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 + -
显示快捷键?