学生教材网 >程序设计 > 代码分享 > Java > 浏览文章

根据java模型产生QT/CPP模型。可用json初始化,并toString为json.

来源:网络编辑:佚名时间:2015-12-28人气:

bzk-005,酒的好坏这样分辨99%却人不知,超级学校霸王2国语

学生教材网的小编为您介绍根据java模型产生QT/CPP模型。可用json初始化,并toString为json.的具体内容:

原创,用于java服务器端和c++客户端跨语言交流。
优点:服务器模型修改后,根据服务器模型,产生新的客户端核心代码。提高效率,减轻沟通负担。 标签: <无>

代码片段(1) [全屏查看所有代码]

1. [文件] GenCppModel.java ~ 8KB     下载(0)     跳至 [1] [全屏预览]

package util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.nio.charset.Charset;
import java.util.List;

import com.cy.video.common.controller.RequestUrlUtil;
import com.cy.video.common.tran.Comment;

import scala.actors.threadpool.Arrays;
/**
 * 通过java模型,产生qt c++模型的工具
 * @author zzl
 *
 */
public class GenCppModel {
	public static String genCppSvn="E:\\qtproject\\NEWSVN\\trunk\\jiaojin\\DataCenter\\generated";
	public static void main(String[] args)throws Exception{
		for(Class<?> clazz :GenJson.clazzs){
			generateHeaderFile(clazz);
			generateCppFile(clazz);
		}
		Runtime.getRuntime().exec("cmd /k start "+genCppSvn);
	}
	public static void generateHeaderFile(Class<?> clazz) throws Exception {  
		String cppFileName = "Data"+clazz.getSimpleName(); 
		File dir = new File(genCppSvn+"\\ws");
		dir.mkdirs(); 
		File f = new File(dir,cppFileName+".h");
		f.createNewFile(); 
		OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(f), Charset.forName("utf-8"));
		fw.write("#ifndef "+cppFileName.toUpperCase()+"_H\n"+"#define "+cppFileName.toUpperCase()+"_H\n"+"#include <QString>\n#include <QJsonObject>\n#include <QJsonArray>\n#include<QList>\n#include<QString>\n#include <QJsonDocument>\n");
		writeGenericHeaders(fw,clazz);
		Comment comment = clazz.getAnnotation(Comment.class);
		if(comment!=null){
			fw.write("//"+comment.txt()+"\n");	
		}
		fw.write("class "+cppFileName+" \n{\n");
		fw.write("public:\n");
		fw.write("\t"+cppFileName+"(QJsonObject jsonObj);\n");
		for(Field field:clazz.getDeclaredFields()){ 
			if(Modifier.isStatic(field.getModifiers())){
				continue;
			}
			String name = field.getName();
			if(field.getType().equals(String.class)){
				fw.write("\tQString m_"+name+"; \n");
			}else if(field.getType().equals(Integer.class)||field.getType().equals(int.class)){ 
				fw.write("\tint m_"+name+"; \n");
			}else if(field.getType().equals(Long.class)||field.getType().equals(long.class)){ 
				fw.write("\tdouble m_"+name+"; \n");
			}else {
				 List<?> asList = Arrays.asList(field.getType().getInterfaces()); 
				if(asList.contains(List.class)||field.getType().equals(List.class)) {
					fw.write("\tQList<"+"Data"+getGenericTypeName(field)+">"+" m_"+name+"; \n");
				}else{
					fw.write("\t//TODO "+field.getType()+" m_"+name+"; \n"); 
				}
			}
		}
		fw.write("\tQString toJson();\n");
		fw.write("};\n#endif //"+cppFileName.toUpperCase()+"_H\n");
		fw.close(); 
	}
	public static void generateCppFile(Class<?> clazz) throws Exception {  
		String cppFileName = "Data"+clazz.getSimpleName(); 
		File dir = new File(genCppSvn+"\\ws");
		dir.mkdirs();
		File f = new File(dir,cppFileName+".cpp");
		f.createNewFile(); 
		FileWriter fw = new FileWriter(f);
		fw.write("#include \""+cppFileName+".h\"\n#include <QString>\n#include <QJsonObject>\n#include <QJsonArray>\n");
		writeGenericHeaders(fw,clazz);
		fw.write(cppFileName+"::"+cppFileName+"(QJsonObject jsonObj){\n");
		for(Field field:clazz.getDeclaredFields()){ 
			if(Modifier.isStatic(field.getModifiers())){
				continue;
			}
			String name = field.getName();
			fw.write("\t\t if(!jsonObj[\""+name+"\"].isUndefined()){\n");
			String m_name = "\t\t\t m_"+name;
			if(field.getType().equals(String.class)){
				fw.write(m_name + "= jsonObj[\"" + name + "\"].toString(); \n"); 
			}else if(field.getType().equals(Integer.class)||field.getType().toString().equals("int")){ 
				fw.write(m_name + "= jsonObj[\"" + name + "\"].toString().toInt(); \n"); 
			}else if(field.getType().equals(Long.class)||field.getType().toString().equals("long")){ 
				fw.write(m_name + "= jsonObj[\"" + name + "\"].toString().toDouble(); \n"); 
			}else {
				 String genericTypeName  = getGenericTypeName(field);
				 List<?> asList = Arrays.asList(field.getType().getInterfaces()); 
				if(asList.contains(List.class)||field.getType().equals(List.class)) {
					String string = "Data"+genericTypeName;
					fw.write("\t\t\tQJsonArray "+name+"= jsonObj[\""+name+"\"].toArray();\n");
					fw.write(" \t\t\tfor(int i=0;i<"+name+".size();i++){\n");
					fw.write("\t"+m_name + ".append("+string+"("+name+".at(i).toObject())); \n"); 
					fw.write("\t\t\t}\n");
				}else{
					fw.write("\t\t\t//TODO "+field.getType()+" m_"+name+"; \n"); 
				}
			}
			fw.write("\t\t}\n");
		}

		fw.write("\t}\n");
		fw.write("\tQString "+cppFileName+"::"+"toJson(){\n");

		fw.write("\t\tQJsonObject json;\n");
		for(Field field:clazz.getDeclaredFields()){ 
			if(Modifier.isStatic(field.getModifiers())){
				continue;
			}
			String name = field.getName(); 
			if(field.getType().equals(String.class)||field.getType().equals(Integer.class)||field.getType().toString().equals("int")||field.getType().equals(Long.class)||field.getType().toString().equals("long")){
				fw.write("\t\tjson.insert(\""+name+"\",m_"+name+");\n"); 
			}else {
				 List<?> asList = Arrays.asList(field.getType().getInterfaces()); 
				 String genericName = "Data"+getGenericTypeName(field);
				if(asList.contains(List.class)||field.getType().equals(List.class)) {
					fw.write("\t\tQJsonArray array;\n");
					fw.write("\t\tforeach("+genericName+" obj,m_"+name+"){\n");
					fw.write("\t\t\tQString str = obj.toJson();\n");
					fw.write("\t\t\tarray.insert(0,str);\n");
					fw.write("\t\t}\n");
					fw.write("\t\tjson.insert(\""+name+"\",array);\n");
				}else{
					fw.write("\t\t//TODO json.insert "+field.getType()+" m_"+name+"; \n"); 
				}
			}
		}
		fw.write("\t\tQJsonDocument document;\n");
		fw.write("\t\tdocument.setObject(json);\n");
		fw.write("\t\tQByteArray byte_array = document.toJson(QJsonDocument::Indented);\n");
		fw.write("\t\treturn QString(byte_array);\n");
		fw.write("\t}\n"); 
		fw.close(); 
	}
	private static String getGenericTypeName(Field field){
		Type genericType = field.getGenericType();
		if(genericType.getClass()!=java.lang.Class.class){
			String str = genericType.toString();
			return  str.substring(str.lastIndexOf('.')+1,str.lastIndexOf('>'));
		}
		return null;
	}

	private static void writeGenericHeaders(Writer fw, Class<?> clazz) throws Exception {;
		for(Field field:clazz.getDeclaredFields()){ 
			if(Modifier.isStatic(field.getModifiers())){
				continue;
			}
			String genericTypeName =getGenericTypeName(field);
			if(genericTypeName!=null){
				fw.write("#include \""+"Data"+genericTypeName+".h\"\n");
			}
		}
		
	}
	private static void genUrlCpp() throws Exception{

		File dir = new File(genCppSvn);
		dir.mkdirs(); 
		String cppFileName = "URLs.h";
		final File f = new File(dir,cppFileName);
		f.createNewFile(); 
		Class<RequestUrlUtil> clazz = RequestUrlUtil.class;
		OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(f), Charset.forName("utf-8"));
		fw.write("#ifndef "+cppFileName.toUpperCase()+"_H\n"+"#define "+cppFileName.toUpperCase()+"_H\n"+"#include <QString>\n#include <QJsonObject>\n#include <QJsonArray>\n#include<QList>\n#include<QString>\n#include <QJsonDocument>\n");
		fw.write("class "+cppFileName+" \n{\n");
		fw.write("public:\n"); 
		RequestUrlUtil obj = clazz.newInstance();
		for(Field field:clazz.getDeclaredFields()){  
			String name = field.getName(); 
			
//			fw.write("\tQString "+name+" = "+.get+"; \n");
		 

		fw.write("};\n#endif //"+cppFileName.toUpperCase()+"_H\n");
		//fw.write("#ifndef "+cppFileName.toUpperCase()+"_H\n"+"#define "+cppFileN
	}
	}
}

以上内容是由学生教材网的小编为您介绍的.

jdbc查询结果集result转换成对应list集合

jdbc查询结果集result转换成对应list集合标签:<无>-->-->-->1.

基于Spring JdbcTemplate的通用dao

之前写过一个常规的通用Dao,请看这里:http://www.oschina.net/code/snippet_997396_33402该通用dao是在使用过程中,针对常规的泛型dao经常遇到的一些不便问题进行了改进。

热门推荐