javaclassgenerator.java
来自「OR Mapping工具」· Java 代码 · 共 515 行 · 第 1/2 页
JAVA
515 行
package org.ephman.abra.tools;import java.io.*;import java.util.*;/** * given a base output directory * generate a class when given a JClass descriptor * @author Paul M. Bethe * @version 0.0.2 */public class JavaClassGenerator implements ClassGenerator, AbraTypes { private String outdir; private char fileSeperator; private String toImplement; /** make a new generator with a base directory of outdir * so for foo.bar.FooBar if outdir = /home/dknull * and file_sep = '/' then a class /home/dknull/foo/bar/FooBar.java is created * @param outdir the base directory for writing files * @param file_sep the file seperator ('/' for unix/linux , '\\' for Windows) */ public JavaClassGenerator (String outdir, char file_sep, String toImp) { this.outdir = outdir; this.fileSeperator = file_sep; this.toImplement = toImp; } public void close () {} // nothing needed public void generate (JClass currentClass) throws IOException, SchemaException { boolean isDatabaseClass = MapToJava.makeFactories; String fname = currentClass.getPackageName().replace('.', fileSeperator) + fileSeperator + currentClass.getClassName() + ".java"; FileWriter outFile = new FileWriter (outdir + fileSeperator + fname); Debugger.trace ("Generating class " +outdir + fileSeperator + fname, Debugger.VERBOSE); writeClassHeader (outFile, currentClass, isDatabaseClass); String constructorString = ""; Debugger.trace ("Class-> " + currentClass.getClassName () + " PrimKeyJ: " + currentClass.getPrimaryKeyJava() + " PrimKeyS: " + currentClass.getPrimaryKey (), Debugger.ALL); currentClass.resetFieldIteration(); while (currentClass.hasMoreFields()) { JField jf = currentClass.getNextField(); writeFieldCode (outFile, jf); Debugger.trace ("\tField: " + jf.getJavaName (), Debugger.ALL); constructorString += "\t\t_" + jf.getJavaName() + " = " + getDefaultValue(jf) + ";\n"; } // now do views -- Iterator i = currentClass.getViewList (); while (i.hasNext ()) { JView view = (JView)i.next (); writeView (view, currentClass, outFile); } writeClassTrailer (outFile, currentClass, constructorString); outFile.close (); } public static String INIT_VIEW_NAME = "initializeFromView"; private void writeView (JView view, JClass currentClass, FileWriter classFile) throws IOException, SchemaException{ String fname = view.getViewName().replace('.', fileSeperator) + ".java"; FileWriter outFile = new FileWriter (outdir + fileSeperator + fname); writeViewHeader (outFile, view, currentClass); String constructorString = ""; String u_name = view.getFormatName (); u_name = u_name.substring (0,1).toUpperCase () + u_name.substring (1); JView top_view = view; if (view.getSuperView () != null ) { while (top_view.getSuperView () != null) top_view = top_view.getSuperView (); } // write code to make w/ constructor // classFile.write ("\tpublic void " + INIT_VIEW_NAME + " ("+ top_view.getViewName() +" view) {\n"); if (view.getSuperView () != null ) classFile.write ("\t\tsuper." + INIT_VIEW_NAME + "(view);\n"); String viewVarName = "view"; if (top_view != view) { classFile.write ("\t\t"+view.getViewName() + " casted_view = " + "("+view.getViewName()+")view;\n"); viewVarName = "casted_view"; } Vector fieldList = view.getFieldList (); for (int i=0; i< fieldList.size (); i++) { JFieldView fieldView = (JFieldView)fieldList.elementAt (i); JField jf = fieldView.getField (); if (jf instanceof JCompositeField) { // foreign if (fieldView.getAsView() && Checks.exists (fieldView.getViewFormat ()) && !jf.isVector ()) { classFile.write ("\t\tif (this.get" + jf.getGetSet () + "() != null && " + viewVarName + ".get" + jf.getGetSet ()+"() != null)"); // is a view classFile.write ("\n\t\t\tthis.get" + jf.getGetSet () + "().initializeFromView (" +viewVarName +".get" + jf.getGetSet () + "());\n"); //else if (jf.isVector () // nothing for now } else {} // single field ?? } else { classFile.write ("\t\tthis.set" + jf.getGetSet ()+ " (" + viewVarName + ".get" + jf.getGetSet () + " ());\n"); } } classFile.write ("\t}\n\n"); // now creation views classFile.write ("\tpublic " + top_view.getViewName() + " create" + u_name + "View () {\n"); classFile.write ("\t\tHashMap viewContext = new HashMap ();\n"); classFile.write ("\t\treturn this.create"+ u_name + "View (viewContext);\n\t}\n\n"); classFile.write ("\tpublic " + top_view.getViewName() + " create" + u_name + "View (HashMap _viewContext) {\n"); classFile.write ("\t\t" + view.getViewName() +" foo = (" +view.getViewName() +")_viewContext.get (this);\n"); classFile.write ("\t\tif (foo == null) { //not found\n"); classFile.write ("\t\t\tfoo = new " + view.getViewName() +" ();\n"); classFile.write ("\t\t\t_viewContext.put (this, foo);\n"); classFile.write ("\t\t\tthis.create" + u_name + "View (foo, _viewContext);\n\t\t}\n"); classFile.write ("\t\treturn foo;\n\t}\n\n"); classFile.write ("\tprotected void create" + u_name + "View (" + top_view.getViewName() +" foo, HashMap _viewContext) {\n"); String varName = "foo"; if (view.getSuperView () != null) { classFile.write ("\t\tsuper.create" + u_name + "View (foo, _viewContext);\n"); classFile.write ("\t\t" + view.getViewName () + " casted_foo = (" + view.getViewName ()+ ")foo;\n"); varName = "casted_foo"; } //Vector fieldList = view.getFieldList (); for (int i=0; i< fieldList.size (); i++) { JFieldView fieldView = (JFieldView)fieldList.elementAt (i); JField jf = fieldView.getField (); writeViewFieldCode (outFile, fieldView, classFile, varName); String initVal = getDefaultValue(jf); if (!jf.isCollection () && jf instanceof JCompositeField && fieldView.getAsView ()) initVal = "null"; else if (jf instanceof JCompositeField && !fieldView.getAsView ()) { // get the field defval .. JField for_f = ((JCompositeField)jf).getJClass ().getFieldByName (fieldView.getViewFormat ()); initVal = getDefaultValue (for_f); } constructorString += "\t\t_" + jf.getJavaName() + " = " + initVal + ";\n"; } classFile.write ("\t}\n\n"); writeViewTrailer (outFile, view, constructorString); outFile.close(); } private void writeViewTrailer (FileWriter outFile, JView view, String constructorString) throws IOException, SchemaException { int i = view.getViewName ().lastIndexOf ("."); String viewName = ""; if (i != -1) viewName = view.getViewName ().substring(i + 1); else viewName = view.getViewName (); outFile.write ("\tpublic " + viewName + " () {\n"); outFile.write (constructorString); outFile.write ("\t}\n\n} // -- End class " + viewName); } private void writeViewHeader (FileWriter outFile, JView view, JClass currentClass) throws IOException, SchemaException { int i = view.getViewName ().lastIndexOf ("."); String className = ""; if (i != -1) { String packageName = view.getViewName ().substring(0, i); className = view.getViewName ().substring(i + 1); outFile.write ("package " + packageName + ";\n\n"); } else className = view.getViewName (); String ext = view.getSuperView () == null ? "" : "extends " + view.getSuperView ().getViewName () + " "; outFile.write ("import java.util.*;\n"); outFile.write ("import java.sql.*;\n"); outFile.write ("// Do not edit!! generated classes\n"); outFile.write ("/** A Viewer to link" + currentClass.getClassName () + " to a message viewing format \n"); outFile.write (" * @version " + (new Date ()).toString () + "\n"); outFile.write (" * @author generated by Dave Knull\n */\n\n"); outFile.write ("public class " + className + " " + ext +"implements org.ephman.abra.utils.Viewable " + "{\n\n"); } private void writeViewFieldCode (FileWriter outFile, JFieldView fieldView, FileWriter classFile, String varName) throws IOException, SchemaException { JField jf = fieldView.getField (); String fieldName = jf.getJavaName(); String fieldType = jf.getObjectType(); String elType = ""; if (jf instanceof JCompositeField && ((JCompositeField)jf).getJClass() != null) { if (fieldView.getAsView ()) { JView comp_view = ((JCompositeField)jf).getJClass ().getView(fieldView.getViewFormat()); if (comp_view != null) fieldType = comp_view.getViewName(); else fieldType = jf.getObjectType (); } else { JField for_field = ((JCompositeField)jf).getJClass ().getFieldByName (fieldView.getViewFormat()); if (for_field == null) { String errMsg = "Foreign field " + fieldView.getViewFormat() + " not found: " + jf.getJavaName (); Debugger.trace (errMsg, Debugger.ERROR); fieldType = jf.getObjectType (); } else fieldType = for_field.getObjectType (); } } if (jf.isVector()) { elType = fieldType; fieldType = "java.util.Vector"; } else if (jf.isArray ()) { elType = fieldType; fieldType += " []"; } if (jf.isArrayList ()) { elType = fieldType; fieldType = "java.util.ArrayList"; } outFile.write ("\tprivate " + fieldType + " _" + fieldName + ";\n\n"); outFile.write ("\tpublic " + fieldType + " get" + jf.getGetSet() + " () { return this._" + fieldName + "; }\n\n"); outFile.write ("\tpublic void set" + jf.getGetSet() + " (" + fieldType + " foo) {\n"); outFile.write ("\t\tthis._"+ fieldName + " = foo;\n"); outFile.write ("\t}\n\n"); if (jf.isCollection ()) { outFile.write ("\tpublic void addTo" + jf.getGetSet () + " ("+ elType + " foo) {\n"); if (jf.isVector()) { outFile.write ("\t\t_" + fieldName + ".addElement (foo);\n\t}\n\n"); } else if (jf.isArrayList()) { outFile.write ("\t\t_" + fieldName + ".add (foo);\n\t}\n\n"); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?