📄 generatejavasource.java
字号:
package com.jpmorgan.neo.neoclient.mds.slcv5.parser;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* parse the message.xml file and generate java source code
*/
public class GenerateJavaSource {
private static final Logger log = Logger.getLogger(GenerateJavaSource.class);
private static Hashtable messages = new Hashtable();
private String SRC_PATH = "src/";
private String superClass = "com.jpmorgan.neo.neoclient.mds.slcv5.parser.Message;";
private HashMap dataTypeMapping = new HashMap();
/**
* parse mappingfile
* @param mappingfile
*/
public void parse(String mappingfile) {
File file = new File(mappingfile);
SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(file);
Element root = document.getRootElement();
List msgs = root.elements();
Iterator<Element> iterator = msgs.iterator();
while(iterator.hasNext()) {
Element msg = iterator.next();
messages.put(msg.attributeValue("id"), msg);
}
} catch (DocumentException e) {
log.error("parse err:" + e.getMessage());
}
//data type mapping
dataTypeMapping.put("CHAR", "String");
dataTypeMapping.put("INT", "int");
dataTypeMapping.put("NUM", "double");
dataTypeMapping.put("Repeat", "ArrayList");
}
/**
* generate all the java source by the message.xml
*
*/
public void generateJavaSrcAll() {
Iterator iterator = messages.keySet().iterator();
while(iterator.hasNext()) {
generateJavaSrcByMsgId((String) iterator.next());
}
}
/**
* generate java source code by message id
* @param msgId
*/
public void generateJavaSrcByMsgId(String msgId) {
if(msgId != null && messages.containsKey(msgId)) {
generateJavaSrcByMsgElement((Element)messages.get(msgId));
}
}
/**
* generate java source code by message element
* @param msgElement
*/
private void generateJavaSrcByMsgElement(Element msgElement) {
HashMap fields = new HashMap();
List<Element> subElements = msgElement.elements();
String classname = msgElement.attributeValue("class");
log.debug("calss: " + classname);
String packageStr = classname.substring(0, classname.lastIndexOf('.'));
log.debug("package: " + packageStr);
String fileName = classname.substring(packageStr.length() + 1);
String pathStr = SRC_PATH + packageStr.replace('.', '/');
log.debug(pathStr);
File path = new File(pathStr);
File file = new File(pathStr + "/" + fileName + ".java");
if(!path.exists()) {
path.mkdir();
}
if(file.exists()) {
log.debug("overwrie old file");
}
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(pathStr + "/" + fileName + ".java");
} catch (FileNotFoundException e) {
log.error(e.getMessage());
}
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("package " + packageStr + ";");
writer.println();
writer.println("import " + superClass);
String repeat = null;
for(int i = 0; i < subElements.size(); i++) {
Element field = subElements.get(i);
repeat = field.attributeValue("Repeat");
if(repeat == null)
continue;
log.debug("repeat===" + repeat.trim() );
if("true".equals(repeat.trim())) {
log.debug("..........");
writer.println("import java.util.ArrayList;");
i = subElements.size();
}
}
writer.println();
writer.println("public class " + fileName + " extends Message {\n");
//create field
Iterator<Element> iterator = subElements.iterator();
while(iterator.hasNext()) {
Element field = iterator.next();
String name = field.attributeValue("Name").trim();
name = name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
repeat = field.attributeValue("Repeat");
if(repeat != null) repeat = repeat.trim();
String dataType = null;
if("true".equals(repeat)) {
dataType = "Repeat";
} else {
dataType = field.attributeValue("DataType").trim();
}
if(!dataTypeMapping.containsKey(dataType)) continue;
generateClassField(writer, name, dataType);
}
generateClassConstruct(writer, fileName, msgElement.attributeValue("id"));
//create method
for(int i = 0; i < subElements.size(); i++) {
Element field = subElements.get(i);
String name = field.attributeValue("Name").trim();
name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
String dataType = field.attributeValue("DataType").trim();
repeat = field.attributeValue("Repeat");
if(repeat != null) repeat = repeat.trim();
// String dataType = null;
if("true".equals(repeat)) {
dataType = "Repeat";
} else {
dataType = field.attributeValue("DataType").trim();
}
if(!dataTypeMapping.containsKey(dataType)) continue;
generateClassMethod(writer, name, dataType);
}
writer.println("}");
writer.close();
}
/**
* generate class field code
* @param writer
* @param fieldName
* @param dataType
*/
private void generateClassField(PrintWriter writer, String fieldName, String dataType) {
StringBuffer field = new StringBuffer();
field.append(" private ")
.append(dataTypeMapping.get(dataType))
.append(" ")
.append(fieldName)
.append(";");
writer.println(field.toString());
writer.println();
}
/**
* generate class construct code
* @param writer
* @param classname
* @param message_id
*/
private void generateClassConstruct(PrintWriter writer, String classname, String message_id) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(" public ").append(classname).append("() {\n");
stringBuffer.append(" super(\"").append(message_id).append("\");\n");
stringBuffer.append(" }\n");
writer.println(stringBuffer.toString());
}
/**
* generate class method code
* @param writer
* @param fieldName
* @param dataType
*/
private void generateClassMethod(PrintWriter writer, String fieldName, String dataType) {
//write get method
StringBuffer method = new StringBuffer();
method.append(" public ").append(dataTypeMapping.get(dataType)).append(" get");
String method_commn_str = Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
method.append(method_commn_str);
method.append("() {\n");
method.append(" return ").append(fieldName).append(";\n");
method.append(" }\n");
writer.print(method.toString());
writer.println();
//write set method
method = new StringBuffer();
method.append(" public void set");
method.append(method_commn_str);
method.append("(").append(dataTypeMapping.get(dataType)).append(" ").append(fieldName).append(") {\n");
method.append(" this.").append(fieldName).append(" = ").append(fieldName).append(";\n");
method.append(" }\n");
writer.print(method.toString());
writer.println();
}
public String getSuperClass() {
return superClass;
}
public void setSuperClass(String superClass) {
this.superClass = superClass;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -