`
三里小龙
  • 浏览: 87861 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
社区版块
存档分类
最新评论

自定义SenchaTouch数据JSON格式处理工具

阅读更多

 

package org.fanzone.util;

 

import java.beans.IntrospectionException;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.io.File;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

 

/** 

 * Title: Touch<br> 

 * Description: Base Handler Utilities<br> 

 * Copyright: Copyright (c) 2011 <br> 

 * Create DateTime: Jun 2, 2011 2:40:20 PM <br> 

 * @author wangmeng

 */

public class SenchaUtil {

 

/**

* Appending object via string.

* @param object

* @return java.lang.String

*/

public static String objectToJson(Object object) {

StringBuilder json = new StringBuilder();

if (object == null) {

json.append("\"\"");

}else if (object instanceof String ) {

json.append("\"").append((String)object).append("\"");

}else if (object instanceof Long){

json.append("\"").append((Long)object).append("\"");

}else if (object instanceof Integer){

json.append("\"").append((Integer)object).append("\"");

}else if (object instanceof Double){

json.append("\"").append((Double)object).append("\"");

}else if (object instanceof Float){

json.append("\"").append((Float)object).append("\"");

}else if (object instanceof Short){

json.append("\"").append((Short)object).append("\"");

}else if (object instanceof Character){

json.append("\"").append((Character)object).append("\"");

}else if (object instanceof Character){

json.append("\"").append((Character)object).append("\"");

}else {

json.append(beanToJson(object));

}

return json.toString();

}

 

/**

* Formating attributes.

* @param bean

* @return String

*/

public static String beanToJson(Object bean) {

StringBuilder json = new StringBuilder();

json.append("{");

PropertyDescriptor[] props = null;

try {

props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();

} catch (IntrospectionException e) {

}

if (props != null) {

for (int i = 0; i < props.length; i++) {

try {

String name = objectToJson(props[i].getName());

String value = objectToJson(props[i].getReadMethod().invoke(bean));

json.append(name);

json.append(":");

json.append(value);

json.append(",");

} catch (Exception e) {

}

}

json.setCharAt(json.length() - 1, '}');

} else {

json.append("}");

}

return json.toString();

}

/**

* Make List to JSON formated.

* @param list, class

* @return java.lang.String

*/

public static String listToJson(List<?> list, Class<?> c) {

StringBuilder json = new StringBuilder();

json.append("{"+'"'+c.getSimpleName()+'"'+":[");

if((list != null) && (list.size() > 0)) {

for(Object obj : list){

json.append(objectToJson(obj));

json.append(",");

}

json.setCharAt(json.length()-1, ']');

}else {

json.append("]");

}

json.append("}");

return json.toString();

}

/**

* Make Set to JSON formated.

* @param list

* @return java.lang.String

*/

public static String setToJson(Set<?> set, Class<?> c){

StringBuilder json = new StringBuilder();

Iterator<?> itr = set.iterator();

if(itr.hasNext()){

json.append("{"+'"'+c.getSimpleName()+'"'+":[");

}

if(set != null && set.size() > 0){

for(Object obj : set){

json.append(objectToJson(obj));

json.append(",");

}

json.setCharAt(json.length()-1, ']');

}else{

json.append("]");

}

json.append("}");

return json.toString();

}

/**

* To build model in dynamic.

* @param className

* @return model string

*/

public static StringBuilder buildModel(String className){

StringBuilder builder = new StringBuilder();

Class<?> c;

PropertyDescriptor[] props = null;

try {

c = Class.forName(className);

builder.append("Ext.regModel('"+c.getSimpleName()+"', {");

builder.append("fields: [");

props = Introspector.getBeanInfo(c, Object.class).getPropertyDescriptors();

if (props != null) {

for (int i = 0; i < props.length; i++) {

String name = props[i].getName();

String type = props[i].getReadMethod().toString();

type = type.substring(type.indexOf(" ")+1, type.lastIndexOf(" "));

type = type.substring(type.lastIndexOf(".")+1,type.length());

builder.append("{name: '"+name+"', type: '"+type.toLowerCase()+"'},");

}

builder.replace(builder.length()-1, builder.length(), "");

}

builder.append("]");

builder.append("});");

} catch (ClassNotFoundException e1) {

e1.printStackTrace();

} catch (IntrospectionException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

}

return builder;

}

 

/**

* To fetch all the entities under the specified package.

* @param pack

* @return entity list

*/

public static List<String> entities(String pack){

List<String> entities = new ArrayList<String>();

String classes = System.getProperty("java.class.path");

String dir = classes.substring(0,classes.indexOf(";"));

String path = dir + '\\' + pack.replace('.', '\\');

File file = new File(path);

if(file.exists()){

if(file.isDirectory()){

File[] files = file.listFiles();

for(File f : files){

entities.add(pack+'.'+f.getName().substring(0,f.getName().indexOf(".")));

}

}

}

return entities;

}

/**

* Build models with the specified package.

* @param pack

* @return all models string.

*/

public static StringBuilder buildModels(String pack){

StringBuilder builder = new StringBuilder();

for(String entity : entities(pack)){

builder.append(buildModel(entity));

builder.append("\r\n");

}

return builder;

}

/**

* Test Main

* @param args

*/

public static void main(String[] args) {

System.out.println(buildModels("org.mars.entity"));

}

}


分享到:
评论

相关推荐

    Sencha Touch 2.4.1

    2. **数据管理**:内置数据包管理器,支持本地存储和远程数据同步,可以轻松处理JSON或XML格式的数据。 3. **触摸事件**:针对触摸设备优化的事件系统,确保用户交互的流畅性。 4. **布局系统**:强大的布局引擎可以...

    sencha touch demo

    将Sencha Touch项目导入myEclipse,可以利用其丰富的代码提示、调试工具以及项目管理功能,提升开发效率。 在"压缩包子文件的文件名称列表"中,我们只有一个文件名为 "demo4"。通常,这可能是一个包含了整个示例...

    使用SenchaTouch开发跨平台移动Web应用.doc

    5. 数据处理功能:Sencha Touch 提供了丰富的数据处理功能,开发人员能够方便地处理各种格式的数据如 XML、JSON,并能灵活地绑定到可视化组件加以展示。 Sencha Touch 的界面组件 1. 表单组件:Sencha Touch 为...

    SENCHA TOUCH权威指南.pdf

    - 数据模型支持多种数据格式,如JSON、XML等,并且可以方便地从服务器获取或保存数据。 #### 4. **触摸事件处理** - 针对移动设备进行了优化,支持多点触控操作,如滑动、缩放等。 - 内置的手势识别器可以轻松地...

    sencha touch 例子 list 使用 代码

    总之,Sencha Touch 2中的`List`组件是一个强大且灵活的工具,它可以帮助开发者创建美观且响应式的移动应用。理解并掌握`List`的使用,对于构建高效、互动的移动界面至关重要。通过实践和学习,你可以充分利用其特性...

    Sencha Touch 2 Menu

    SDK 包含了 Sencha Touch 2 的所有核心库、工具和文档,是开发 Sencha Touch 应用的基础。在提供的 `sdk` 文件夹中,包含了框架的核心 JavaScript 文件、CSS 样式表以及图片资源等。开发者通常会引用 `sdk` 中的 `...

    Hands-On Sencha Touch 2

    - **服务器代理**:实现与后端服务器的通信,包括RESTful API的调用、数据格式化处理等。 - **客户端代理**:利用本地存储技术(如LocalStorage)保存数据,确保在无网络连接情况下应用仍能正常运行。 6. **视图...

    Hands-on Sencha Touch中文翻译第六章.pdf

    在阅读了《Hands-on Sencha Touch中文翻译第六章.pdf》文档的内容之后,可以提炼出以下知识点,主要涉及Sencha Touch框架以及使用Sencha Cmd命令行工具进行Sencha Touch应用的创建和管理。 ### Sencha Cmd命令行...

    Sencha_Touch_2.0用户指南(中文版) (2).pdf

    - **IIS配置:** 如果使用的是Windows IIS作为Web服务器,则需要添加`application/x-json` MIME类型,以确保Sencha Touch能够正常运行。 **1.3 安装步骤** - **解压SDK:** 将下载好的SDK压缩包解压至项目目录中,...

    sencha learn Touch Theming

    它的核心特性在于提供了一套丰富的组件、数据管理工具以及强大的触摸事件处理,使得开发者可以创建具有原生感的多平台移动应用。"sencha learn Touch Theming"主题学习资源可能是针对Sencha Touch的应用主题设计与...

    2013+Sencha.Touch.2:Up.and.Running.pdf 源代码,可运行

    7. **API调用与数据同步**:学习如何使用Sencha Touch 2的Ajax组件与服务器进行通信,例如发送HTTP请求获取JSON数据,或者使用RESTful API进行数据同步。 8. **性能优化**:源代码可能会涉及到一些性能优化技巧,...

    Build mobile web applications with Sencha.pdf

    Sencha Touch还提供了一系列高级功能,如触摸手势支持、离线存储、自定义主题等。随着您对框架的深入学习,您将能够构建更加复杂和功能丰富的移动Web应用。 #### 总结 通过本文的学习,您已经掌握了如何使用Sencha...

    Sencha在Android上的应用入门

    在实际开发中,你可能需要使用源码控制工具(如Git)来管理代码,并定期通过`sencha app upgrade`命令更新Sencha Touch框架。此外,Sencha的组件化特性使得你可以创建自定义组件,实现特定功能。对于复杂的项目,...

    MyApp

    Sencha 提供的主要工具有两个:Sencha Touch 用于移动应用开发,而 Sencha Ext JS 专注于桌面端应用。由于没有具体提及是哪一个,我们将涵盖两者的基础知识。 **Sencha Touch 知识点:** 1. **Sencha Touch 概述**...

    EXTJS主题自定义

    1. Sencha Cmd 3.1或更高版本:这是一个命令行工具,用于打包和部署EXTJS和Sencha Touch应用程序。版本3.1及以上包含了内置的SASS和COMPASS,无需额外安装。 2. Ruby:Sencha Cmd依赖于Ruby运行,因此需要在计算机上...

    OASP-Sencha-client

    1. **安装依赖**:首先,你需要安装Node.js和Sencha Cmd工具,它们是构建和管理Sencha Touch项目所必需的。 2. **克隆项目**:使用Git将`OASP-Sencha-client-master`仓库克隆到本地。 3. **构建项目**:运行Sencha ...

    Ext JS 4 Architecture

    Reader则是Store用来解析从服务器返回的数据格式(如JSON、XML等)的工具。 13. **Proxy和Writer** 在数据管理中,Proxy用于抽象数据加载和保存的机制,使得应用程序不必关心底层数据是如何与服务器交互的。Writer...

    ext的demo

    8. **Ajax和JSON数据处理**:EXT内置了与服务器进行异步通信的能力,支持JSON数据格式,方便前后端数据交换。 9. **主题定制**:EXT允许自定义主题,开发者可以根据需求调整UI风格,满足品牌一致性。 在这个“ext...

Global site tag (gtag.js) - Google Analytics