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

自定义动态生成Model以及数据格式处理代码精细

阅读更多

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

 * @return java.lang.String

 */

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

StringBuilder json = new StringBuilder();

json.append("{"+'"'+list.get(0).getClass().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){

StringBuilder json = new StringBuilder();

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

if(itr.hasNext()){

json.append("{"+'"'+itr.next().getClass().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"));

}

}

 

0
1
分享到:
评论

相关推荐

    mybatis-plus代码生成器模版代码

    配置文件可以设置数据库连接信息、生成策略等,并且支持自定义模板路径,以便更精细地控制代码生成。 使用Mybatis-Plus代码生成器时,要注意与Mybatis的配置保持一致,确保Mybatis的mapper扫描路径包含了生成的...

    propertyGrid动态加载自定义属性

    通过这个小Demo,我们可以看到如何在C#中利用`PropertyGrid`动态加载自定义属性,实现更精细化的用户界面控制。这在开发复杂应用程序或需要对数据展示有特殊需求时尤其有用。不过,需要注意的是,过度使用自定义属性...

    PowerDesigner生成数据字典(包含反向工程生成方法).docx

    8. **精细化调整**:在定制样式时,可以细化到每个数据字段的属性,如名称、代码、注释、数据类型、长度、精度、是否为主键、默认值、约束条件等,确保数据字典的准确性和完整性。 通过上述步骤,PowerDesigner能够...

    mybatis-generator自动生成代码工具

    1. 自定义插件:MBG允许用户编写自定义插件,对生成的代码进行更精细的控制,比如添加自定义注解、修改SQL结构等。 2. 数据库版本控制:MBG支持生成数据库的DDL脚本,方便数据库版本管理。 3. 多数据源支持:在同...

    根据中文首字生成图片如头像等场景需求

    在生成中文首字图片的应用中,开发者可以利用ThinkPHP的MVC(Model-View-Controller)模式,实现业务逻辑和视图的分离,提高代码的可维护性和复用性。 4. **CMS(内容管理系统)**:内容管理系统允许用户无需编程...

    C# MVC 快速开发框架 自带工作流 在线自定义字段,默认组织架构.7z

    代码生成器是提高开发效率的利器,它可以自动生成常见的CRUD(创建、读取、更新、删除)操作代码,减少手动编码的时间。在C# MVC框架下,开发者可以利用代码生成器快速创建控制器、视图和模型文件,从而专注于业务...

    【JavaScript源代码】Vue 3自定义指令开发的相关总结.docx

    总的来说,Vue 3 的自定义指令是实现特定功能和扩展框架能力的重要工具,它允许开发者在不破坏MVVM模式的前提下,对DOM进行精细化操作,提高代码的复用性和可维护性。通过灵活运用自定义指令,开发者可以构建出更加...

    web 编辑器 三级联动 程序创建数据 demo

    4. **动态数据生成**:可能涉及服务器端编程,动态生成或更新XML数据。 这个demo对于学习Web前端开发,尤其是富文本编辑器的定制和增强,以及前后端交互有很高的参考价值。通过理解并实践这个项目,开发者可以提升...

    Grads绘图手册

    关于数据格式,GrADS支持格点数据描述文件,包括model.le.dat和model.le.ctl文件的生成,以及站点数据的特定格式。软件内置的Cressman.gs方法和Barnes客观分析方法,为数据插值和空间分析提供了有力工具。此外,对于...

    DTcms+会员功能+源代码

    2. 权限管理:系统可能实现了角色和用户权限的分配,不同级别的用户可以访问不同的功能和数据,实现精细化的权限控制。 3. 个人信息管理:会员可以修改个人资料,如昵称、头像等,系统应有相应的接口处理这些请求,...

    ARCGIS中 DEM生成、提取等高线的方法.docx

    本文将详细讲解如何在ARCGIS中利用数字高程模型(Digital Elevation Model, 简称DEM)生成并提取等高线。 1. **引入DEM数据**: 在ARCGIS中,首先需要加载DEM数据。DEM是地形分析的基础,它由一系列等间距的高程点...

    Gazebo模拟仓库中的动态环境。_CMake_下载.zip

    通过Gazebo,我们可以对这些元素进行精细的三维建模,设置物理属性,如重力、摩擦力,以及它们之间的交互规则。 动态环境意味着环境中的某些元素是实时变化的,比如机器人移动、货物被搬运等。在Gazebo中,我们可以...

    java freemarker 导出 word

    FreeMarker模板引擎允许开发者将静态模板与动态数据结合,生成所需的输出,这对于创建自定义报告、文档或邮件非常有用。 首先,我们需要在项目中引入FreeMarker库。如果你使用的是Maven,可以在pom.xml文件中添加...

    二维码生成控件说明书

    - ModelNo:选择编码模式,常见的有Model1、Model2以及microQR。 - QuiteZone:预留边框的宽度,即图像与控件边界的空白区域,通常为5。 - Rotate:设置二维码的旋转角度,支持D0、D90、D180、D270四个方向。 - ...

    关于WPF 报表的制作

    综上所述,WPF报表制作涵盖了数据绑定、XAML布局、图形控件、样式模板、事件处理以及MVVM模式等多个知识点。掌握这些技术,开发者就能在WPF环境中创建出功能强大、界面美观的报表系统。通过学习和实践,你可以进一步...

    jsf动态创建按钮绑定

    本文将深入探讨如何在JSF中实现动态创建按钮以及与之关联的事件处理。 首先,我们要了解JSF中的组件模型。JSF基于MVC(Model-View-Controller)架构,其中,视图由UI组件(如按钮)组成,这些组件可以通过JSF表达式...

    cakephp学习笔记

    它的MVC架构、代码生成、验证机制以及灵活的扩展性,使得开发者能更专注于业务逻辑,而非底层实现,从而提高了开发效率和项目的质量。无论是初学者还是经验丰富的开发者,都能从CakePHP中受益。

    VUE-2.X学习笔记day8

    10. **表单处理**:Vue提供了便捷的表单绑定和事件处理,例如`v-model`用于双向数据绑定,`v-on`配合`.prevent`修饰符处理表单提交事件,以及自定义验证规则等。 在`VueDemo`中,你可能还会遇到如响应式系统、过渡...

    DTcms_50_sql_mvc

    1. Model(模型):模型层主要负责处理业务逻辑和数据访问,与数据库进行交互,封装实体类,提供数据操作接口。在DTcms5.0 MVC中,通常会使用Entity Framework等ORM框架来简化数据库操作。 2. View(视图):视图层...

Global site tag (gtag.js) - Google Analytics