javaclassgenerator.java
来自「OR Mapping工具」· Java 代码 · 共 515 行 · 第 1/2 页
JAVA
515 行
else { // an array // TODO: figure out the correct code here outFile.write ("\t\t /* this does not work */\n\t}\n\n"); } } // now rip code if (jf.isCollection ()) { if (jf instanceof JCompositeField) { String viewFormat = fieldView.getViewFormat (); String cast = ""; JCompositeField jcf = (JCompositeField)jf; if (viewFormat != null && !viewFormat.equals ("")){ viewFormat = viewFormat.substring (0,1).toUpperCase () + viewFormat.substring (1); if (fieldView.getAsView ()) viewFormat = ".create" + viewFormat + "View (_viewContext)"; else viewFormat = ".get" + viewFormat + " ()"; } else { viewFormat = ""; cast = "(" + jcf.getObjectType () + ")"; } classFile.write ("\t\tfor (int i=0; i< this.get"+ jcf.getGetSet () + "().size(); i++) {\n"); if (jcf.getJClass() != null) { // Figure out the cast that must be made here, in case the View has parent views JClass fieldClass = ((JCompositeField)jf).getJClass (); JView view = fieldClass.getView (fieldView.getViewFormat ()); if (view != null) cast = "(" + view.getViewName() + ")"; classFile.write ("\t\t\t"+ varName+ ".addTo" + jcf.getGetSet () + " (" + cast + "((" + jcf.getJClass().getPackageName () + "." + jcf.getJClass ().getClassName () + ")this.get" + jf.getGetSet () + "().elementAt (i))"); classFile.write (viewFormat + ");\n"); } else { classFile.write ("\t\t\t" + varName + ".addTo" + jcf.getGetSet() + "(" + cast + "this.get" + jcf.getGetSet() + "().elementAt (i));\n"); } classFile.write ("\t\t}\n"); } else { classFile.write ("\t\t" + varName + ".set" + jf.getGetSet () + " (this.get" + jf.getGetSet () + "());\n"); } } else if (jf instanceof JCompositeField) { String viewFormat = fieldView.getViewFormat (); if (viewFormat == null || viewFormat.equals ("")) { Debugger.trace ("Format not specified for composite field " + jf.getJavaName (), Debugger.SHORT); String cast = "(" +jf.getObjectType () + ")"; classFile.write ("\t\t" + varName + ".set" + jf.getGetSet () + " (" + cast + "this.get" + jf.getGetSet () + "());\n"); } else { // Figure out the cast that must be made here, in case the View has parent views JClass fieldClass = ((JCompositeField)jf).getJClass (); JView view = fieldClass.getView (fieldView.getViewFormat ()); String cast = ""; if (view != null) cast = "(" + view.getViewName() + ")"; viewFormat = viewFormat.substring (0,1).toUpperCase () + viewFormat.substring (1); String vv = "this.get" + jf.getGetSet () + "()"; classFile.write ("\t\t" + varName + ".set" + jf.getGetSet () + " ("); classFile.write (vv + " == null ? "); if (fieldView.getAsView ()) { classFile.write ("null : "); classFile.write (cast + vv + ".create" + viewFormat + "View (_viewContext));\n"); } else { String jDefault = getDefaultValue (fieldClass.getFieldByName (fieldView.getViewFormat())); classFile.write (jDefault + " : "); classFile.write (cast + vv + ".get" + viewFormat + " ());\n"); } } } else classFile.write ("\t\t" + varName +".set" + jf.getGetSet () + " (this.get" + jf.getGetSet () + "());\n"); } private String getDefaultValue (JField jf) { if (jf.isVector ()) return "new Vector ()"; else if (jf.isArrayList ()) return "new ArrayList ()"; else return jf.getObjectDefaultValue (); // TODO: what about Array? } private void writeClassTrailer (FileWriter outFile, JClass currentClass, String constructorString) throws IOException, SchemaException { outFile.write ("\n\t/** the Default constructor for "+ currentClass.getClassName () + "\n"); outFile.write ("\t* use set... methods to fill in fields\n\t*/\n"); outFile.write ("\tpublic " + currentClass.getClassName () + " () {\n\t\tsuper ();\n"); outFile.write (constructorString); outFile.write ("\t}\n\n} // end of " + currentClass.getClassName () + "\n"); } private void writeFieldCode (FileWriter outFile, JField jf) throws IOException, SchemaException { String fieldName = jf.getJavaName(); String fieldType = jf.getObjectType(); if (jf.isVector()) fieldType = "java.util.Vector"; else if (jf.isArrayList()) fieldType = "java.util.ArrayList"; else if (jf.isArray ()) fieldType += " []"; String get_set_name = fieldName.substring (0,1).toUpperCase () + fieldName.substring (1); outFile.write ("\tprivate " + fieldType + " _" + fieldName + ";\n\n"); outFile.write ("\tpublic " + fieldType + " get" + get_set_name + " () { return this._" + fieldName + "; }\n\n"); outFile.write ("\tpublic void set" + get_set_name + " (" + fieldType + " foo) {\n"); outFile.write ("\t\tthis._"+ fieldName + " = foo;\n"); if (jf instanceof JCompositeField && ((JCompositeField)jf).getJClass () != null && !(((JCompositeField)jf).getJClass ().getTableName ().equals ("")) && !jf.isCollection () &&!jf.isTransient ()) { String tmp = ((JCompositeField)jf).getJClass ().getPrimaryKeyJava (); if (tmp != null && !tmp.equals("")) { String get_set = tmp.substring (0,1).toUpperCase () + tmp.substring (1); outFile.write ("\t\tthis._"+ fieldName + "Oid = foo != null ? foo.get" + get_set + " () : 0; // set the oid to zero if object == null\n"); } outFile.write ("\t}\n\n"); outFile.write ("\tprivate int _" + fieldName + "Oid = 0;\n\n"); outFile.write ("\tpublic int get" + get_set_name + "Oid () { return this._" + fieldName + "Oid; }\n\n"); outFile.write ("\tpublic void set" + get_set_name + "Oid (int foo) {\n"); outFile.write ("\t\tthis._"+ fieldName + "Oid = foo;\n\t}\n\n"); } else outFile.write ("\t}\n\n"); // code for vectors if (jf.isCollection()) { //int i = jf.getObjectType().lastIndexOf ("."); //String add_name = i == -1 ? get_set_name.substring(0, get_set_name.length() - 1) //: jf.getObjectType().substring(i + 1); outFile.write ("\tpublic void addTo" + get_set_name + " (" + jf.getObjectType ()+ " 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"); } else { // an array outFile.write ("\t\t /* This does not work */ \n\t}\n\n"); // TODO: write proper code here } } } private void writeClassHeader (FileWriter outFile, JClass jc, boolean isDatabaseClass) throws IOException, SchemaException { String packageName = jc.getPackageName (); JClass parentClass = jc.getParentClass (); String extendsClass = ""; if (parentClass == null) { extendsClass = jc.getParentClassName(); } else { // Check if the package of the parent is the same if (!jc.getPackageName ().equals (parentClass.getPackageName ())) if (parentClass.getPackageName () != null) extendsClass = parentClass.getPackageName () + "."; extendsClass += parentClass.getClassName (); } String extra = ""; String extendString = ""; if (!extendsClass.equals("")) { extendString = "extends " + extendsClass + " "; if (parentClass == null && isDatabaseClass) { // implement Versionable //extra = } } else if (isDatabaseClass) // none try Versioned.. if (jc.isVersioned()) extendString = "extends org.ephman.abra.utils.Versioned "; else extendString = "extends org.ephman.abra.utils.Identified "; String impString = ""; String jcImp = jc.getImplements ().replace (';', ','); if (!this.toImplement.equals ("")) { if (jc.getImplements ().equals ("")) impString = "implements " + toImplement + " "; else impString = "implements " + toImplement + ", " + jcImp + " "; } else if (!jc.getImplements ().equals ("")) impString = "implements " + jcImp + " "; String abst = (jc.hasDescendant () || jc.isAbstract ()) ? "abstract " : ""; outFile.write ("package " + packageName + ";\n\n"); outFile.write ("import java.sql.*;\nimport java.util.*;\n\n"); outFile.write ("// Do not edit!! generated classes\n"); outFile.write ("/** " + jc.getClassName () + " " + jc.getClassDescription () + "<p>\n"); outFile.write (" * XMLSource: " + jc.getSchemaFileName () + "\n"); outFile.write (" * @version " + (new Date ()).toString () + "\n"); outFile.write (" * @author generated by Dave Knull\n */\n\n"); outFile.write ("public " + abst + "class " + jc.getClassName() + " " + extendString + impString + "{ \n\n"); if (jc.hasDescendant ()) { String [] methods = new String [] {"prepareToStore", "makeTransient" }; for (int i=0; i<methods.length; i++) outFile.write ("\tpublic abstract void " + methods[i] + " ();\n\n"); } } // implementation of class-generator call public Map getTypeMap () { return typeMap; } private static HashMap typeMap = new HashMap (); static { // TypeMap tm = null; TypeMap tm = new TypeMap (INTEGER, "int", "0", null); typeMap.put (INTEGER, tm); typeMap.put (STRING, new TypeMap (STRING, "String", "\"\"", null, true)); typeMap.put (LONG, new TypeMap (LONG, "long", "0", null)); typeMap.put (DOUBLE, new TypeMap (DOUBLE, "double", "0.0", null)); typeMap.put (FLOAT, new TypeMap (FLOAT, "float", "0.0", null)); typeMap.put (CLOB, new TypeMap (CLOB, "String", "\"\"", null)); typeMap.put (BLOB, new TypeMap (BLOB, "byte []", "null", null)); typeMap.put (TIMESTAMP, new TypeMap (TIMESTAMP, "Timestamp", "null", null)); typeMap.put (BOOLEAN, new TypeMap (BOOLEAN, "boolean", "false", null)); typeMap.put (CHARACTER, new TypeMap (CHARACTER, "char", "' '", null)); typeMap.put (INTEGER_OBJ, new TypeMap (INTEGER_OBJ, "Integer", "null", null)); typeMap.put (DOUBLE_OBJ, new TypeMap (DOUBLE_OBJ, "Double", "null", null)); typeMap.put (BOOLEAN_OBJ, new TypeMap (BOOLEAN_OBJ, "Boolean", "null", null)); typeMap.put (BIG_DECIMAL, new TypeMap (BIG_DECIMAL, "java.math.BigDecimal", "null", null, true)); //needs length arg typeMap.put (BIG_INTEGER, new TypeMap (BIG_INTEGER, "java.math.BigInteger", "null", null)); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?