private void addImports(Map typeNameMap) { for (Map.Entry<String, Set<String>> entry : (Set<Map.Entry<String, Set<String>>>) typeNameMap.entrySet()) { String shortName = entry.getKey(); Set<String> packageNames = entry.getValue(); if (packageNames.size() > 1) { continue; } for (String packageName : packageNames) { if (!packageName.equals(JAVA_LANG_PACKAGE_NAME) && !packageName.equals(getPackageName()) && !packageName.equals("")) { addImport(packageName + "." + shortName); } } } sortImports(); }
/** * Parses the class definition, pulls out fully qualified class names, * adds imports for them, and un-fully qualifies the class names. * - Assumes that no imports have been previously added. * - Assumes that all types have been fully qualified to start. * - Will not unqualify ambiguous classes (java.util.Date and java.sql.Date). * - Will not add imports for java.lang.* * - Will not add imports for classes in the same package. * - Will not parse method bodies, but will unqualify types it finds. * * ?? - Should unqualification occur during writing? That way, reflective definitions could take advantage. * */ public void calculateImports() { // Calculate type name map for class definition. // Key - short type name, Value - Set of package names for that type name HashMap typeNameMap = new HashMap(); addTypeNamesToMap(typeNameMap); // Go back through class def, pulling out imports and removing package names from // non-repeated short type names. adjustTypeNames(typeNameMap); // Finally, add the imports addImports(typeNameMap); }
private void adjustTypeNames(HashMap typeNameMap) { setSuperClass(adjustTypeName(getSuperClass(), typeNameMap)); for (Iterator i = new Vector(getInterfaces()).iterator(); i.hasNext();) { String interfaceName = (String)i.next(); replaceInterface(interfaceName, adjustTypeName(interfaceName, typeNameMap)); } for (Iterator i = getAttributes().iterator(); i.hasNext();) { ((AttributeDefinition)i.next()).adjustTypeNames(typeNameMap); } for (Iterator i = getMethods().iterator(); i.hasNext();) { ((MethodDefinition)i.next()).adjustTypeNames(typeNameMap); } }
protected void sortImports() { setImports(new Vector(new TreeSet(getImports()))); }
/** * Return a class definition object representing the code to be generated for the table creator. * This class will have one method per descriptor and its toString can be used to convert it to code. */ protected ClassDefinition generateCreatorClass() { ClassDefinition classDefinition = new ClassDefinition(); classDefinition.setName(getClassName()); classDefinition.setSuperClass("org.eclipse.persistence.tools.schemaframework.TableCreator"); classDefinition.setPackageName(getPackageName()); classDefinition.addImport("org.eclipse.persistence.sessions.*"); classDefinition.addImport("org.eclipse.persistence.tools.schemaframework.*"); classDefinition.setComment("This class was generated by the TopLink table creator generator." + Helper.cr() + "It stores the meta-data (tables) that define the database schema." + Helper.cr() + "@see org.eclipse.persistence.sessions.factories.TableCreatorClassGenerator"); classDefinition.addMethod(buildConstructor()); for (TableDefinition table : getTableCreator().getTableDefinitions()) { classDefinition.addMethod(buildTableMethod(table)); } return classDefinition; }
sortMethods(); if (isInterface()) { generator.write("interface "); } else { generator.write(getName()); if (!isInterface() && (getSuperClass() != null)) { generator.write(" extends "); generator.writeType(getSuperClass()); for (Enumeration interfacesEnum = getInterfaces().elements(); interfacesEnum.hasMoreElements();) { String interfaceName = (String)interfacesEnum.nextElement(); if (isInterface()) { generator.write(" extends"); } else { for (Enumeration attributesEnum = getAttributes().elements(); attributesEnum.hasMoreElements();) { generator.tab(); if (!getAttributes().isEmpty()) { generator.cr(); for (Enumeration methodsEnum = getMethods().elements(); methodsEnum.hasMoreElements();) { ((MethodDefinition)methodsEnum.nextElement()).write(generator);
private void addTypeNamesToMap(HashMap typeNameMap) { putTypeNameInMap(getSuperClass(), typeNameMap); for (Iterator i = getInterfaces().iterator(); i.hasNext();) { putTypeNameInMap((String)i.next(), typeNameMap); } for (Iterator i = getAttributes().iterator(); i.hasNext();) { ((AttributeDefinition)i.next()).putTypeNamesInMap(typeNameMap); } for (Iterator i = getMethods().iterator(); i.hasNext();) { ((MethodDefinition)i.next()).putTypeNamesInMap(typeNameMap); } }
/** * Write the code out to the generator's stream. */ public void write(CodeGenerator generator) { if (getPackageName().length() > 0) { generator.write("package "); generator.write(getPackageName()); generator.writeln(";"); generator.cr(); } for (Enumeration importsEnum = getImports().elements(); importsEnum.hasMoreElements();) { String importLine = (String)importsEnum.nextElement(); generator.write("import "); generator.write(importLine); generator.writeln(";"); } if (!getImports().isEmpty()) { generator.cr(); } super.write(generator); }
/** * The importStatement should be of the form * "{packageName}.{shortName or '*'}" */ public void addImport(String importStatement) { if (!getImports().contains(importStatement)) { getImports().addElement(importStatement); } }
public void addInnerClass(ClassDefinition classDefinition) { getInnerClasses().add(classDefinition); }
public void addAttribute(AttributeDefinition attribute) { getAttributes().addElement(attribute); }
/** * Return a class definition object representing the code to be generated for the table creator. * This class will have one method per descriptor and its toString can be used to convert it to code. */ protected ClassDefinition generateCreatorClass() { ClassDefinition classDefinition = new ClassDefinition(); classDefinition.setName(getClassName()); classDefinition.setSuperClass("org.eclipse.persistence.tools.schemaframework.TableCreator"); classDefinition.setPackageName(getPackageName()); classDefinition.addImport("org.eclipse.persistence.sessions.*"); classDefinition.addImport("org.eclipse.persistence.tools.schemaframework.*"); classDefinition.setComment("This class was generated by the TopLink table creator generator." + Helper.cr() + "It stores the meta-data (tables) that define the database schema." + Helper.cr() + "@see org.eclipse.persistence.sessions.factories.TableCreatorClassGenerator"); classDefinition.addMethod(buildConstructor()); for (TableDefinition table : getTableCreator().getTableDefinitions()) { classDefinition.addMethod(buildTableMethod(table)); } return classDefinition; }
sortMethods(); if (isInterface()) { generator.write("interface "); } else { generator.write(getName()); if (!isInterface() && (getSuperClass() != null)) { generator.write(" extends "); generator.writeType(getSuperClass()); for (Enumeration interfacesEnum = getInterfaces().elements(); interfacesEnum.hasMoreElements();) { String interfaceName = (String)interfacesEnum.nextElement(); if (isInterface()) { generator.write(" extends"); } else { for (Enumeration attributesEnum = getAttributes().elements(); attributesEnum.hasMoreElements();) { generator.tab(); if (!getAttributes().isEmpty()) { generator.cr(); for (Enumeration methodsEnum = getMethods().elements(); methodsEnum.hasMoreElements();) { ((MethodDefinition)methodsEnum.nextElement()).write(generator);
private void addTypeNamesToMap(HashMap typeNameMap) { putTypeNameInMap(getSuperClass(), typeNameMap); for (Iterator i = getInterfaces().iterator(); i.hasNext();) { putTypeNameInMap((String)i.next(), typeNameMap); } for (Iterator i = getAttributes().iterator(); i.hasNext();) { ((AttributeDefinition)i.next()).putTypeNamesInMap(typeNameMap); } for (Iterator i = getMethods().iterator(); i.hasNext();) { ((MethodDefinition)i.next()).putTypeNamesInMap(typeNameMap); } }
protected void sortImports() { setImports(new Vector(new TreeSet(getImports()))); }
/** * Write the code out to the generator's stream. */ public void write(CodeGenerator generator) { if (getPackageName().length() > 0) { generator.write("package "); generator.write(getPackageName()); generator.writeln(";"); generator.cr(); } for (Enumeration importsEnum = getImports().elements(); importsEnum.hasMoreElements();) { String importLine = (String)importsEnum.nextElement(); generator.write("import "); generator.write(importLine); generator.writeln(";"); } if (!getImports().isEmpty()) { generator.cr(); } super.write(generator); }
/** * The importStatement should be of the form * "{packageName}.{shortName or '*'}" */ public void addImport(String importStatement) { if (!getImports().contains(importStatement)) { getImports().addElement(importStatement); } }
public void addInnerClass(ClassDefinition classDefinition) { getInnerClasses().add(classDefinition); }
public void addAttribute(AttributeDefinition attribute) { getAttributes().addElement(attribute); }
/** * Return a class definition object representing the code to be generated for the table creator. * This class will have one method per descriptor and its toString can be used to convert it to code. */ protected ClassDefinition generateCreatorClass() { ClassDefinition classDefinition = new ClassDefinition(); classDefinition.setName(getClassName()); classDefinition.setSuperClass("org.eclipse.persistence.tools.schemaframework.TableCreator"); classDefinition.setPackageName(getPackageName()); classDefinition.addImport("org.eclipse.persistence.sessions.*"); classDefinition.addImport("org.eclipse.persistence.tools.schemaframework.*"); classDefinition.setComment("This class was generated by the TopLink table creator generator." + Helper.cr() + "It stores the meta-data (tables) that define the database schema." + Helper.cr() + "@see org.eclipse.persistence.sessions.factories.TableCreatorClassGenerator"); classDefinition.addMethod(buildConstructor()); for (Enumeration tablesEnum = getTableCreator().getTableDefinitions().elements(); tablesEnum.hasMoreElements();) { TableDefinition table = (TableDefinition)tablesEnum.nextElement(); classDefinition.addMethod(buildTableMethod(table)); } return classDefinition; }