xmlmarshalgenerator.java
来自「OR Mapping工具」· Java 代码 · 共 161 行
JAVA
161 行
package org.ephman.abra.tools.generators;import org.ephman.abra.tools.*;import org.ephman.abra.tools.plugins.*;import java.io.*;import java.util.*;import org.apache.regexp.*;/** * * generate the xml-marshaller for a class * @author Paul M. Bethe * @version 0.0.2 */public class XmlMarshalGenerator implements Generator { public String getName () { return "XmlMarshalGenerator";}; public void close () { // nothing } /// private String outdir; private char fileSeperator; public XmlMarshalGenerator () { this.outdir = MapToJava.outdir; this.fileSeperator = MapToJava.fileSeperator.charAt (0); } public void generate (JClass currentClass) throws IOException, SchemaException { String fname = currentClass.getPackageName().replace('.', '/') + "/" + currentClass.getClassName() + SUFFIX; FileWriter outFile = new FileWriter (outdir + fileSeperator + fname+ ".java"); Debugger.trace ("Generating xml-marshaller " + outdir + fileSeperator + fname, Debugger.SHORT); writeHeader (currentClass, outFile); writeMethods (currentClass, outFile); outFile.write ("\n}\n"); outFile.close (); } public void writeHeader (JClass currentClass, FileWriter outFile) throws IOException { String header = "package " + currentClass.getPackageName () + ";\n\n"; header += "import org.ephman.xml.XmlNode;\n"; header += "import java.util.Vector;\n"; header += "/** \n* a XmlMarshaller for " + currentClass.getClassName() + "\n"; header += " * @version " + (new Date ()).toString () + "\n"; header += " * @author generated by Dave Knull\n */\n\n"; String toExt = " "; //extends "; //if (thisPlugin.getFormatName ().equals ("")) // is default // toExt += SUFFIX + "Base "; // if (currentClass.get) // toExt = "extends " + thisPlugin.getParentPlugin ().getName () + " "; header += "public class " + currentClass.getClassName () + "XmlMarshaller" + toExt + "{\n\n"; outFile.write (header); } public static final String SUFFIX = "XmlMarshaller"; String marshal = ""; String unmarshal = ""; public void writeMethods (JClass currentClass, FileWriter outFile) throws IOException, SchemaException { String varName = currentClass.getClassName ().substring (0,1).toLowerCase () +currentClass.getClassName ().substring (1); marshal = "\n\tpublic static String marshal (" + currentClass.getClassName () + " " + varName + ") {\n"; marshal += "\t\treturn marshal (" + varName + ", \""+currentClass.getXmlNodeName()+"\", \"\");\n"; marshal += "\t}\n"; marshal += "\n\tpublic static String marshal (" + currentClass.getClassName () + " " + varName + ", String node_name, String indent_tabs) {\n"; marshal += "\t\tStringBuffer result = new StringBuffer (indent_tabs).append (\"<\").append(node_name);\n"; marshal += "\t\tresult.append (marshalAttributes (" + varName + "));\n"; marshal += "\t\tString these_els = marshalElements (" + varName + ", indent_tabs+\"\\t\");\n"; marshal += "\t\tif (these_els != null && these_els.length()>0) \n"; marshal += "\t\t\tresult.append (these_els).append (\"\\n\").append (indent_tabs).append (\"</\")"+ ".append (node_name)" +".append (\">\\n\");\n"; marshal += "\t\telse\n\t\t\tresult.append (\"/>\");\n"; marshal += "\t\treturn result.toString ();\n\t}\n"; String marshalAttribs = "\n\tprotected static String marshalAttributes (" + currentClass.getClassName () + " " + varName + ") {\n"+ "\t\tStringBuffer result = new StringBuffer ();\n"; String marshalEls = "\n\tprotected static String marshalElements (" + currentClass.getClassName () + " " + varName + ", String indent_tabs) {\n" + "\t\tStringBuffer result = new StringBuffer (indent_tabs);\n"; // overloaded unmarshal = "\n\tpublic static "+currentClass.getClassName ()+" unmarshal (XmlNode thisNode) {\n"; unmarshal += "\t\t"+currentClass.getClassName () +" " + varName + " = new "+ currentClass.getClassName () + " ();\n"; unmarshal += "\t\tunmarshal (thisNode, "+varName+");\n\t\treturn " +varName+";\n\t}\n"; unmarshal += "\t/** unmarshal passing Xmlnode + pre-formed" + "\t * " + currentClass.getClassName () + " to populate\n\t*/\n"; unmarshal += "\tpublic static void unmarshal (XmlNode thisNode, "+ currentClass.getClassName () + " " + varName+") {\n"; // ## IM HERE.. JClass parent = currentClass.getParentClass (); if (parent != null) { // use extension //marshal += "\t\tresult.append (" + parent.getClassName () + SUFFIX // + ".marshal (" + varName + "));\n"; String parentName = parent.getClassName () + SUFFIX; if (!parent.getPackageName().equals (currentClass.getPackageName())) parentName = parent.getPackageName() + "." + parentName; marshalEls += "\t\tresult.append (" + parentName +".marshalElements ("+varName+", indent_tabs));\n"; marshalAttribs += "\t\tresult.append (" + parentName +".marshalAttributes (" + varName + "));\n"; unmarshal += "\t\t" + parentName +".unmarshal (thisNode, " + varName + ");\n"; } // use inheritance instead.. // Vector allFields = new Vector(currentClass.getAllFields ().values ()); for (currentClass.resetFieldIteration (); currentClass.hasMoreFields (); ) { JField jf = currentClass.getNextField (); String typ = jf.getObjectType (); if (jf.canMarshal()) { //marshal += if (jf instanceof JCompositeField) { } else { // simple type if (jf.isXmlAttribute()) { marshalAttribs += "\t\tresult.append (\" " + jf.getJavaName() + "=\\\"\").append (" + varName + ".get" + jf.getGetSet() + " ());\n"; } } } } marshalAttribs += "\t\treturn result.toString ();\n\t}\n"; marshalEls += "\t\treturn result.toString ();\n\t}\n"; unmarshal += "\t}\n"; outFile.write(marshal); outFile.write(unmarshal); outFile.write(marshalAttribs); outFile.write(marshalEls); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?