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"));
}
}
分享到:
相关推荐
配置文件可以设置数据库连接信息、生成策略等,并且支持自定义模板路径,以便更精细地控制代码生成。 使用Mybatis-Plus代码生成器时,要注意与Mybatis的配置保持一致,确保Mybatis的mapper扫描路径包含了生成的...
通过这个小Demo,我们可以看到如何在C#中利用`PropertyGrid`动态加载自定义属性,实现更精细化的用户界面控制。这在开发复杂应用程序或需要对数据展示有特殊需求时尤其有用。不过,需要注意的是,过度使用自定义属性...
8. **精细化调整**:在定制样式时,可以细化到每个数据字段的属性,如名称、代码、注释、数据类型、长度、精度、是否为主键、默认值、约束条件等,确保数据字典的准确性和完整性。 通过上述步骤,PowerDesigner能够...
1. 自定义插件:MBG允许用户编写自定义插件,对生成的代码进行更精细的控制,比如添加自定义注解、修改SQL结构等。 2. 数据库版本控制:MBG支持生成数据库的DDL脚本,方便数据库版本管理。 3. 多数据源支持:在同...
在生成中文首字图片的应用中,开发者可以利用ThinkPHP的MVC(Model-View-Controller)模式,实现业务逻辑和视图的分离,提高代码的可维护性和复用性。 4. **CMS(内容管理系统)**:内容管理系统允许用户无需编程...
代码生成器是提高开发效率的利器,它可以自动生成常见的CRUD(创建、读取、更新、删除)操作代码,减少手动编码的时间。在C# MVC框架下,开发者可以利用代码生成器快速创建控制器、视图和模型文件,从而专注于业务...
总的来说,Vue 3 的自定义指令是实现特定功能和扩展框架能力的重要工具,它允许开发者在不破坏MVVM模式的前提下,对DOM进行精细化操作,提高代码的复用性和可维护性。通过灵活运用自定义指令,开发者可以构建出更加...
4. **动态数据生成**:可能涉及服务器端编程,动态生成或更新XML数据。 这个demo对于学习Web前端开发,尤其是富文本编辑器的定制和增强,以及前后端交互有很高的参考价值。通过理解并实践这个项目,开发者可以提升...
关于数据格式,GrADS支持格点数据描述文件,包括model.le.dat和model.le.ctl文件的生成,以及站点数据的特定格式。软件内置的Cressman.gs方法和Barnes客观分析方法,为数据插值和空间分析提供了有力工具。此外,对于...
2. 权限管理:系统可能实现了角色和用户权限的分配,不同级别的用户可以访问不同的功能和数据,实现精细化的权限控制。 3. 个人信息管理:会员可以修改个人资料,如昵称、头像等,系统应有相应的接口处理这些请求,...
本文将详细讲解如何在ARCGIS中利用数字高程模型(Digital Elevation Model, 简称DEM)生成并提取等高线。 1. **引入DEM数据**: 在ARCGIS中,首先需要加载DEM数据。DEM是地形分析的基础,它由一系列等间距的高程点...
通过Gazebo,我们可以对这些元素进行精细的三维建模,设置物理属性,如重力、摩擦力,以及它们之间的交互规则。 动态环境意味着环境中的某些元素是实时变化的,比如机器人移动、货物被搬运等。在Gazebo中,我们可以...
FreeMarker模板引擎允许开发者将静态模板与动态数据结合,生成所需的输出,这对于创建自定义报告、文档或邮件非常有用。 首先,我们需要在项目中引入FreeMarker库。如果你使用的是Maven,可以在pom.xml文件中添加...
- ModelNo:选择编码模式,常见的有Model1、Model2以及microQR。 - QuiteZone:预留边框的宽度,即图像与控件边界的空白区域,通常为5。 - Rotate:设置二维码的旋转角度,支持D0、D90、D180、D270四个方向。 - ...
综上所述,WPF报表制作涵盖了数据绑定、XAML布局、图形控件、样式模板、事件处理以及MVVM模式等多个知识点。掌握这些技术,开发者就能在WPF环境中创建出功能强大、界面美观的报表系统。通过学习和实践,你可以进一步...
本文将深入探讨如何在JSF中实现动态创建按钮以及与之关联的事件处理。 首先,我们要了解JSF中的组件模型。JSF基于MVC(Model-View-Controller)架构,其中,视图由UI组件(如按钮)组成,这些组件可以通过JSF表达式...
它的MVC架构、代码生成、验证机制以及灵活的扩展性,使得开发者能更专注于业务逻辑,而非底层实现,从而提高了开发效率和项目的质量。无论是初学者还是经验丰富的开发者,都能从CakePHP中受益。
10. **表单处理**:Vue提供了便捷的表单绑定和事件处理,例如`v-model`用于双向数据绑定,`v-on`配合`.prevent`修饰符处理表单提交事件,以及自定义验证规则等。 在`VueDemo`中,你可能还会遇到如响应式系统、过渡...
1. Model(模型):模型层主要负责处理业务逻辑和数据访问,与数据库进行交互,封装实体类,提供数据操作接口。在DTcms5.0 MVC中,通常会使用Entity Framework等ORM框架来简化数据库操作。 2. View(视图):视图层...