diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.gen')
21 files changed, 0 insertions, 3239 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.gen/.classpath b/jpa/plugins/org.eclipse.jpt.gen/.classpath deleted file mode 100644 index 8f257414e6..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/.classpath +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="src" path="property_files"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/jpa/plugins/org.eclipse.jpt.gen/.cvsignore b/jpa/plugins/org.eclipse.jpt.gen/.cvsignore deleted file mode 100644 index a196dd7686..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -bin -@dot -temp.folder -build.xml -javaCompiler...args -javaCompiler...args.*
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.gen/.project b/jpa/plugins/org.eclipse.jpt.gen/.project deleted file mode 100644 index ef2d5088ee..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/.project +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.eclipse.jpt.gen</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.PluginNature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs b/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 1f15ff2b4b..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -#Tue Jan 15 11:12:07 EST 2008 -eclipse.preferences.version=1 -encoding/<project>=ISO-8859-1 diff --git a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.jdt.core.prefs b/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3e1d50ad46..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -#Sun May 27 14:28:54 EDT 2007 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF b/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF deleted file mode 100644 index 65356ab7c1..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/META-INF/MANIFEST.MF +++ /dev/null @@ -1,14 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %pluginName -Bundle-Vendor: %providerName -Bundle-SymbolicName: org.eclipse.jpt.gen -Bundle-Version: 1.2.0.qualifier -Bundle-ClassPath: . -Bundle-Localization: plugin -Export-Package: org.eclipse.jpt.gen.internal; x-friends:="org.eclipse.jpt.ui" -Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", - org.eclipse.jdt.core;bundle-version="[3.4.0,4.0.0)", - org.eclipse.jpt.utility;bundle-version="[1.2.0,2.0.0)", - org.eclipse.jpt.db;bundle-version="[1.2.0,2.0.0)" -Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/jpa/plugins/org.eclipse.jpt.gen/about.html b/jpa/plugins/org.eclipse.jpt.gen/about.html deleted file mode 100644 index be534ba44f..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/about.html +++ /dev/null @@ -1,34 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<HTML> - -<head> -<title>About</title> -<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> -</head> - -<BODY lang="EN-US"> - -<H3>About This Content</H3> - -<P>May 02, 2008</P> - -<H3>License</H3> - -<P>The Eclipse Foundation makes available all content in this plug-in -("Content"). Unless otherwise indicated below, the Content is provided to you -under the terms and conditions of the Eclipse Public License Version 1.0 -("EPL"). A copy of the EPL is available at -<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. -For purposes of the EPL, "Program" will mean the Content.</P> - -<P>If you did not receive this Content directly from the Eclipse Foundation, the -Content is being redistributed by another party ("Redistributor") and different -terms and conditions may apply to your use of any object code in the Content. -Check the Redistributor's license that was provided with the Content. If no such -license exists, contact the Redistributor. Unless otherwise indicated below, the -terms and conditions of the EPL still apply to any source code in the Content -and such source code may be obtained at -<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P> - -</BODY> -</HTML> diff --git a/jpa/plugins/org.eclipse.jpt.gen/build.properties b/jpa/plugins/org.eclipse.jpt.gen/build.properties deleted file mode 100644 index a1fd5b8411..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/build.properties +++ /dev/null @@ -1,17 +0,0 @@ -################################################################################ -# Copyright (c) 2006, 2007 Oracle. All rights reserved. -# This program and the accompanying materials are made available under the -# terms of the Eclipse Public License v1.0, which accompanies this distribution -# and is available at http://www.eclipse.org/legal/epl-v10.html. -# -# Contributors: -# Oracle - initial API and implementation -################################################################################ -source.. = src/,\ - property_files/ -output.. = bin/ -bin.includes = .,\ - META-INF/,\ - about.html,\ - plugin.properties -jars.compile.order = . diff --git a/jpa/plugins/org.eclipse.jpt.gen/component.xml b/jpa/plugins/org.eclipse.jpt.gen/component.xml deleted file mode 100644 index 7a4e04e21f..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/component.xml +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><component xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jpt.gen"><description url=""></description><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jpt.gen" fragment="false"/></component>
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.gen/plugin.properties b/jpa/plugins/org.eclipse.jpt.gen/plugin.properties deleted file mode 100644 index 4875a8b174..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/plugin.properties +++ /dev/null @@ -1,24 +0,0 @@ -############################################################################### -# Copyright (c) 2007 Oracle. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# Oracle - initial API and implementation -############################################################################### -# ==================================================================== -# To code developer: -# Do NOT change the properties between this line and the -# "%%% END OF TRANSLATED PROPERTIES %%%" line. -# Make a new property name, append to the end of the file and change -# the code to use the new property. -# ==================================================================== - -# ==================================================================== -# %%% END OF TRANSLATED PROPERTIES %%% -# ==================================================================== - -pluginName = Java Persistence API Tools - Entity Gen -providerName = Eclipse.org diff --git a/jpa/plugins/org.eclipse.jpt.gen/property_files/jpt_gen.properties b/jpa/plugins/org.eclipse.jpt.gen/property_files/jpt_gen.properties deleted file mode 100644 index 03e8908d0e..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/property_files/jpt_gen.properties +++ /dev/null @@ -1,13 +0,0 @@ -################################################################################ -# Copyright (c) 2008 Oracle. All rights reserved. -# This program and the accompanying materials are made available under the -# terms of the Eclipse Public License v1.0, which accompanies this distribution -# and is available at http://www.eclipse.org/legal/epl-v10.html. -# -# Contributors: -# Oracle - initial API and implementation -################################################################################ - -PackageGenerator_taskName=Generate Entities -GenScope_taskName=Build Database Model -EntityGenerator_taskName=Generate Entity: {0} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenTools.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenTools.java deleted file mode 100644 index 058490ea15..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenTools.java +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import java.util.Collection; -import org.eclipse.jpt.utility.internal.NameTools; -import org.eclipse.jpt.utility.internal.StringTools; - -/** - * Utility methods for entity generation. - */ -public class EntityGenTools { - - /** - * Convert the specified (database) identifier to a unique "Java style" - * class name. - * @see #convertToUniqueJavaStyleIdentifier(String, boolean, Collection) - */ - public static String convertToUniqueJavaStyleClassName(String identifier, Collection<String> classNames) { - return convertToUniqueJavaStyleIdentifier(identifier, true, classNames); - } - - /** - * Convert the specified (database) identifier to a unique "Java style" - * attribute (field/property) name. - * @see #convertToUniqueJavaStyleIdentifier(String, boolean, Collection) - */ - public static String convertToUniqueJavaStyleAttributeName(String identifier, Collection<String> attributeNames) { - return convertToUniqueJavaStyleIdentifier(identifier, false, attributeNames); - } - - /** - * Convert the specified (database) identifier to a unique "Java style" - * identifier: - * - if the identifier is all-caps, convert underscores to "camel case" - * - if the identifier is not all-caps, leave it unchanged (except, possibly, for the first letter) - * - convert to a legal Java identifier - * - eliminate illegal characters - * - if the result is a reserved word, modify it slightly - * If the result is already one of the specified existing identifiers - * (ignoring case so we don't have filename collisions on Windows), - * modify it slightly again. - * "FOO" => "Foo" or "foo" - * "FOO_BAR" => "FooBar" or "fooBar" - * "PACKAGE" => "Package" or "package_" - */ - public static String convertToUniqueJavaStyleIdentifier(String identifier, boolean capitalizeFirstLetter, Collection<String> identifiers) { - String result = identifier; - if (StringTools.stringIsUppercase(result)) { - // leave mixed case identifiers alone? - result = StringTools.convertUnderscoresToCamelCase(result, capitalizeFirstLetter); - } else { - result = capitalizeFirstLetter ? StringTools.capitalize(result) : StringTools.uncapitalize(result); - } - result = NameTools.convertToJavaIdentifier(result); - // assume that converting to a unique name will not result in a Java reserved word - // (since no Java reserved words end with a number) - result = NameTools.uniqueNameForIgnoreCase(result, identifiers); - return result; - } - - - // ********** constructor ********** - - /** - * Suppress default constructor, ensuring non-instantiability. - */ - private EntityGenTools() { - super(); - throw new UnsupportedOperationException(); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenerator.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenerator.java deleted file mode 100644 index 86d10b48a3..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/EntityGenerator.java +++ /dev/null @@ -1,1779 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import java.io.PrintWriter; -import java.io.Serializable; -import java.io.StringWriter; -import java.lang.reflect.Modifier; -import java.text.Collator; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubMonitor; -import org.eclipse.jdt.core.IJavaModelStatusConstants; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jpt.db.Column; -import org.eclipse.jpt.db.ForeignKey; -import org.eclipse.jpt.db.Table; -import org.eclipse.jpt.utility.JavaType; -import org.eclipse.jpt.utility.internal.BooleanHolder; -import org.eclipse.jpt.utility.internal.IndentingPrintWriter; -import org.eclipse.jpt.utility.internal.NameTools; -import org.eclipse.jpt.utility.internal.StringTools; -import org.eclipse.jpt.utility.internal.iterators.FilteringIterator; -import org.eclipse.osgi.util.NLS; - -// TODO format generated code per preferences -// TODO organize generated imports per preferences -/** - * This generator will generate an entity for a table. - */ -public class EntityGenerator { - final Config config; - private final IPackageFragment packageFragment; - private final GenTable genTable; - private final String entityClassName; - private final String pkClassName; - - - // ********** public API ********** - - static void generateEntity( - Config config, - IPackageFragment packageFragment, - GenTable genTable, - IProgressMonitor progressMonitor - ) { - if ((config == null) || (packageFragment == null) || (genTable == null)) { - throw new NullPointerException(); - } - new EntityGenerator(config, packageFragment, genTable).generateEntity(progressMonitor); - } - - - // ********** constructor/initialization ********** - - private EntityGenerator(Config config, IPackageFragment packageFragment, GenTable genTable) { - super(); - this.config = config; - this.packageFragment = packageFragment; - this.genTable = genTable; - this.entityClassName = this.fullyQualify(this.getEntityName()); - this.pkClassName = this.entityClassName + '.' + config.getPrimaryKeyMemberClassName(); - } - - - // ********** code gen ********** - - private void generateEntity(IProgressMonitor progressMonitor) { - try { - this.generateEntity_(progressMonitor); - } catch (JavaModelException ex) { - throw new RuntimeException(ex); - } - } - - private void generateEntity_(IProgressMonitor progressMonitor) throws JavaModelException { - SubMonitor sm = SubMonitor.convert(progressMonitor, this.buildTaskName(), 100); - String fileName = this.getEntityName() + ".java"; //$NON-NLS-1$ - String source = this.buildSource(); - sm.worked(20); - try { - this.packageFragment.createCompilationUnit(fileName, source, false, sm.newChild(40)); - } catch (JavaModelException ex) { - if (ex.getJavaModelStatus().getCode() == IJavaModelStatusConstants.NAME_COLLISION) { - if (this.config.getOverwriteConfirmer().overwrite(this.entityClassName)) { - this.packageFragment.createCompilationUnit(fileName, source, true, sm.newChild(40)); - } - } else { - throw ex; - } - } - sm.setWorkRemaining(0); - } - - private String buildTaskName() { - return NLS.bind(JptGenMessages.EntityGenerator_taskName, this.getEntityName()); - } - - /** - * build the "body" source first; then build the "package" and "imports" source - * and concatenate the "body" source to it - */ - private String buildSource() { - // build the body source first so we can gather up the import statements - BodySource bodySource = this.buildBodySource(); - - StringWriter sw = new StringWriter(bodySource.length() + 2000); - PrintWriter pw = new PrintWriter(sw); - this.printPackageAndImportsOn(pw, bodySource); - pw.print(bodySource.getSource()); - return sw.toString(); - } - - private BodySource buildBodySource() { - EntitySourceWriter pw = new EntitySourceWriter(this.getPackageName(), this.entityClassName); - this.printBodySourceOn(pw); - return pw; - } - - private void printBodySourceOn(EntitySourceWriter pw) { - this.printClassDeclarationOn(pw); - - pw.indent(); - this.printEntityPrimaryKeyFieldsOn(pw); - this.printEntityNonPrimaryKeyBasicFieldsOn(pw); - this.printEntityManyToOneFieldsOn(pw); - this.printEntityOneToManyFieldsOn(pw); - this.printEntityOwnedManyToManyFieldsOn(pw); - this.printEntityNonOwnedManyToManyFieldsOn(pw); - this.printSerialVersionUIDFieldOn(pw); - pw.println(); - - this.printZeroArgumentConstructorOn(this.getEntityName(), this.config.getMethodVisibilityClause(), pw); - if (this.config.propertyAccessType() || this.config.generateGettersAndSetters()) { - this.printEntityPrimaryKeyPropertiesOn(pw); - this.printEntityNonPrimaryKeyBasicPropertiesOn(pw); - this.printEntityManyToOnePropertiesOn(pw); - this.printEntityOneToManyPropertiesOn(pw); - this.printEntityOwnedManyToManyPropertiesOn(pw); - this.printEntityNonOwnedManyToManyPropertiesOn(pw); - } - - if (this.primaryKeyClassIsRequired()) { - this.printPrimaryKeyClassOn(pw); - } - pw.undent(); - - pw.print('}'); - pw.println(); // EOF - } - - - // ********** class declaration ********** - - private void printClassDeclarationOn(EntitySourceWriter pw) { - this.printEntityAnnotationOn(pw); - this.printTableAnnotationOn(pw); - this.printIdClassAnnotationOn(pw); - - pw.print("public class "); //$NON-NLS-1$ - pw.printTypeDeclaration(this.entityClassName); - if (config.serializable()) { - pw.print(" implements "); //$NON-NLS-1$ - pw.printTypeDeclaration(Serializable.class.getName()); - } - pw.print(" {"); //$NON-NLS-1$ - pw.println(); - } - - private void printEntityAnnotationOn(EntitySourceWriter pw) { - pw.printAnnotation(JPA.ENTITY); - pw.println(); - } - - private void printTableAnnotationOn(EntitySourceWriter pw) { - String tableName = this.config.getDatabaseAnnotationNameBuilder().buildTableAnnotationName(this.getEntityName(), this.getTable()); - if (tableName == null) { - return; // the default table name is OK - } - pw.printAnnotation(JPA.TABLE); - pw.print("(name="); //$NON-NLS-1$ - pw.printStringLiteral(tableName); - pw.print(')'); - pw.println(); - } - - private void printIdClassAnnotationOn(EntitySourceWriter pw) { - if (this.primaryKeyClassIsRequired() && this.config.generateIdClassForCompoundPK()) { - pw.printAnnotation(JPA.ID_CLASS); - pw.print('('); - pw.printTypeDeclaration(this.pkClassName); - pw.print(".class)"); //$NON-NLS-1$ - pw.println(); - } - } - - - // ********** primary key fields ********** - - private void printEntityPrimaryKeyFieldsOn(EntitySourceWriter pw) { - if (this.primaryKeyClassIsRequired() && this.config.generateEmbeddedIdForCompoundPK()) { - this.printEntityEmbeddedIdPrimaryKeyFieldOn(pw); - } else { - this.printEntityReadOnlyPrimaryKeyFieldsOn(pw); - this.printEntityWritablePrimaryKeyFieldsOn(pw); - } - } - - private void printEntityEmbeddedIdPrimaryKeyFieldOn(EntitySourceWriter pw) { - if (this.config.fieldAccessType()) { - pw.printAnnotation(JPA.EMBEDDED_ID); - pw.println(); - } - this.printFieldOn(this.genTable.getAttributeNameForEmbeddedId(), this.pkClassName, pw); - } - - private void printEntityReadOnlyPrimaryKeyFieldsOn(EntitySourceWriter pw) { - this.printPrimaryKeyFieldsOn(pw, true, true); // true=read-only; true=print ID annotation on fields - } - - private void printEntityWritablePrimaryKeyFieldsOn(EntitySourceWriter pw) { - this.printPrimaryKeyFieldsOn(pw, false, true); // false=writable; true=print ID annotation on fields - } - - private void printPrimaryKeyFieldsOn(EntitySourceWriter pw, boolean readOnly, boolean printIdAnnotation) { - for (Iterator<Column> stream = this.primaryKeyColumns(readOnly); stream.hasNext(); ) { - this.printPrimaryKeyFieldOn(stream.next(), pw, readOnly, printIdAnnotation); - } - } - - private Iterator<Column> primaryKeyColumns(boolean readOnly) { - return readOnly ? this.genTable.readOnlyPrimaryKeyColumns() : this.genTable.writablePrimaryKeyColumns(); - } - - // TODO if the field's type is java.util/sql.Date, it needs @Temporal(DATE) - // TODO if the primary key is auto-generated, the field must be an integral type - private void printPrimaryKeyFieldOn(Column column, EntitySourceWriter pw, boolean readOnly, boolean printIdAnnotation) { - String fieldName = this.genTable.getAttributeNameFor(column); - if (this.config.fieldAccessType()) { - if (printIdAnnotation) { - pw.printAnnotation(JPA.ID); - pw.println(); - } - String columnName = this.config.getDatabaseAnnotationNameBuilder().buildColumnAnnotationName(fieldName, column); - if (readOnly) { - this.printReadOnlyColumnAnnotationOn(columnName, pw); - } else { - this.printColumnAnnotationOn(columnName, pw); - } - } - this.printFieldOn(fieldName, column.getPrimaryKeyJavaTypeDeclaration(), pw); - } - - private void printReadOnlyColumnAnnotationOn(String columnName, EntitySourceWriter pw) { - pw.printAnnotation(JPA.COLUMN); - pw.print('('); - if (columnName != null) { - pw.print("name="); //$NON-NLS-1$ - pw.printStringLiteral(columnName); - pw.print(", "); //$NON-NLS-1$ - } - pw.print("insertable=false, updatable=false)"); //$NON-NLS-1$ - pw.println(); - } - - - // ********** basic fields ********** - - private void printEntityNonPrimaryKeyBasicFieldsOn(EntitySourceWriter pw) { - for (Iterator<Column> stream = this.genTable.nonPrimaryKeyBasicColumns(); stream.hasNext(); ) { - this.printEntityNonPrimaryKeyBasicFieldOn(stream.next(), pw); - } - } - - private void printEntityNonPrimaryKeyBasicFieldOn(Column column, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(column); - if (this.config.fieldAccessType()) { - String columnName = this.config.getDatabaseAnnotationNameBuilder().buildColumnAnnotationName(fieldName, column); - this.printColumnAnnotationOn(columnName, pw); - } - if (column.isLOB()) { - pw.printAnnotation(JPA.LOB); - pw.println(); - } - this.printFieldOn(fieldName, column.getJavaTypeDeclaration(), pw); - } - - private void printColumnAnnotationOn(String columnName, EntitySourceWriter pw) { - if (columnName != null) { // the column name is null if the default is OK - pw.printAnnotation(JPA.COLUMN); - pw.print("(name="); //$NON-NLS-1$ - pw.printStringLiteral(columnName); - pw.print(')'); - pw.println(); - } - } - - - // ********** many-to-one fields ********** - - private void printEntityManyToOneFieldsOn(EntitySourceWriter pw) { - for (Iterator<ManyToOneRelation> stream = this.genTable.manyToOneRelations(); stream.hasNext(); ) { - this.printEntityManyToOneFieldOn(stream.next(), pw); - } - } - - private void printEntityManyToOneFieldOn(ManyToOneRelation relation, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(relation); - if (this.config.fieldAccessType()) { - this.printManyToOneAnnotationOn(fieldName, relation, pw); - } - this.printFieldOn(fieldName, this.fullyQualify(relation.getReferencedEntityName()), pw); - } - - private void printManyToOneAnnotationOn(String attributeName, ManyToOneRelation relation, EntitySourceWriter pw) { - pw.printAnnotation(JPA.MANY_TO_ONE); - pw.println(); - ForeignKey foreignKey = relation.getForeignKey(); - if (foreignKey.referencesSingleColumnPrimaryKey()) { - // if the FK references a single-column PK, 'referencedColumnName' is not required - String joinColumnName = this.config.getDatabaseAnnotationNameBuilder().buildJoinColumnAnnotationName(attributeName, foreignKey); - if (joinColumnName == null) { - // no JoinColumn annotation needed: the default 'name' and 'referencedColumnName' work - } else { - // there is only a single join column here (just not the default name) - this.printJoinColumnAnnotationOn(joinColumnName, null, pw); - pw.println(); - } - } else { - this.printManyToOneJoinColumnsAnnotationOn(foreignKey, pw); - } - } - - private void printManyToOneJoinColumnsAnnotationOn(ForeignKey foreignKey, EntitySourceWriter pw) { - if (foreignKey.columnPairsSize() > 1) { - pw.printAnnotation(JPA.JOIN_COLUMNS); - pw.print("({"); //$NON-NLS-1$ - pw.println(); - pw.indent(); - } - this.printJoinColumnAnnotationsOn(foreignKey, pw); - if (foreignKey.columnPairsSize() > 1) { - pw.undent(); - pw.println(); - pw.print("})"); //$NON-NLS-1$ - } - pw.println(); - } - - private void printJoinColumnAnnotationsOn(ForeignKey foreignKey, EntitySourceWriter pw) { - for (Iterator<ForeignKey.ColumnPair> stream = foreignKey.columnPairs(); stream.hasNext(); ) { - this.printJoinColumnAnnotationOn(stream.next(), pw); - if (stream.hasNext()) { - pw.println(','); - } - } - } - - private void printJoinColumnAnnotationOn(ForeignKey.ColumnPair columnPair, EntitySourceWriter pw) { - this.printJoinColumnAnnotationOn( - this.config.getDatabaseAnnotationNameBuilder().buildJoinColumnAnnotationName(columnPair.getBaseColumn()), - this.config.getDatabaseAnnotationNameBuilder().buildJoinColumnAnnotationName(columnPair.getReferencedColumn()), - pw - ); - } - - /** - * 'baseColumnName' cannot be null; - * 'referencedColumnName' is null when the default is applicable (i.e. the - * referenced column is the single-column primary key column of the - * referenced table) - */ - private void printJoinColumnAnnotationOn(String baseColumnName, String referencedColumnName, EntitySourceWriter pw) { - pw.printAnnotation(JPA.JOIN_COLUMN); - pw.print("(name="); //$NON-NLS-1$ - pw.printStringLiteral(baseColumnName); - - if (referencedColumnName != null) { - pw.print(", referencedColumnName="); //$NON-NLS-1$ - pw.printStringLiteral(referencedColumnName); - } - - pw.print(')'); - } - - - // ********** one-to-many fields ********** - - private void printEntityOneToManyFieldsOn(EntitySourceWriter pw) { - for (Iterator<OneToManyRelation> stream = this.genTable.oneToManyRelations(); stream.hasNext(); ) { - this.printEntityOneToManyFieldOn(stream.next(), pw); - } - } - - private void printEntityOneToManyFieldOn(OneToManyRelation relation, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(relation); - if (this.config.fieldAccessType()) { - this.printOneToManyAnnotationOn(relation, pw); - } - this.printCollectionFieldOn(fieldName, this.fullyQualify(relation.getReferencedEntityName()), pw); - } - - private void printOneToManyAnnotationOn(OneToManyRelation relation, EntitySourceWriter pw) { - pw.printAnnotation(JPA.ONE_TO_MANY); - pw.print("(mappedBy=\""); //$NON-NLS-1$ - pw.print(relation.getMappedBy()); - pw.print("\")"); //$NON-NLS-1$ - pw.println(); - } - - - // ********** owned many-to-many fields ********** - - private void printEntityOwnedManyToManyFieldsOn(EntitySourceWriter pw) { - for (Iterator<ManyToManyRelation> stream = this.genTable.ownedManyToManyRelations(); stream.hasNext(); ) { - this.printEntityOwnedManyToManyFieldOn(stream.next(), pw); - } - } - - private void printEntityOwnedManyToManyFieldOn(ManyToManyRelation relation, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(relation); - if (this.config.fieldAccessType()) { - this.printOwnedManyToManyAnnotationOn(fieldName, relation, pw); - } - this.printCollectionFieldOn(fieldName, this.fullyQualify(relation.getNonOwningEntityName()), pw); - } - - /** - * only print the JoinTable annotation if one or more of the - * [generated] elements is not defaulted: - * name - * joinColumns - * inverseJoinColumns - * thus the need for the 'printJoinTableAnnotation' flag - */ - private void printOwnedManyToManyAnnotationOn(String attributeName, ManyToManyRelation relation, EntitySourceWriter pw) { - pw.printAnnotation(JPA.MANY_TO_MANY); - pw.println(); - BooleanHolder printJoinTableAnnotation = new BooleanHolder(true); - - if ( ! relation.joinTableNameIsDefault()) { // db-only test - no need to delegate to platform? - printJoinTableAnnotation.setFalse(); - pw.printAnnotation(JPA.JOIN_TABLE); - pw.print("(name="); //$NON-NLS-1$ - pw.printStringLiteral(this.config.getDatabaseAnnotationNameBuilder().buildJoinTableAnnotationName(relation.getJoinGenTable().getTable())); - } - - this.printJoinTableJoinColumnAnnotationsOn( - "joinColumns", //$NON-NLS-1$ - attributeName, - relation.getOwningForeignKey(), - printJoinTableAnnotation, - pw - ); - - this.printJoinTableJoinColumnAnnotationsOn( - "inverseJoinColumns", //$NON-NLS-1$ - relation.getNonOwningGenTable().getAttributeNameFor(relation), - relation.getNonOwningForeignKey(), - printJoinTableAnnotation, - pw - ); - - if (printJoinTableAnnotation.isFalse()) { - pw.print(')'); - pw.println(); - } - } - - /** - * 'elementName' is either "joinColumns" or "inverseJoinColumns" - */ - private void printJoinTableJoinColumnAnnotationsOn(String elementName, String attributeName, ForeignKey foreignKey, BooleanHolder printJoinTableAnnotation, EntitySourceWriter pw) { - // we have to pre-calculate whether either 'name' and/or 'referencedColumnName' - // is required because they are wrapped by the JoinTable annotation and we - // need to print the JoinTable annotation first (if it hasn't already been printed) - boolean printRef = ! foreignKey.referencesSingleColumnPrimaryKey(); - // if 'referencedColumnName' is required, 'name' is also required (i.e. it cannot be defaulted); - // but we will calculate it later [1], since there could be multiple join columns - String joinColumnName = (printRef) ? - null // 'joinColumnName' is not used - : - this.config.getDatabaseAnnotationNameBuilder().buildJoinColumnAnnotationName(attributeName, foreignKey); - boolean printBase = (printRef || (joinColumnName != null)); - if (printBase || printRef) { - if (printJoinTableAnnotation.isTrue()) { - printJoinTableAnnotation.setFalse(); - pw.printAnnotation(JPA.JOIN_TABLE); - pw.print('('); - } else { - pw.print(','); - } - pw.println(); - pw.indent(); - if (printRef) { - // if 'printRef' is true, 'joinColumnName' will always be "IGNORED" (so we ignore it) - this.printJoinTableJoinColumnAnnotationsOn(elementName, foreignKey, pw); // [1] - } else { - // if the FK references a single-column PK, 'referencedColumnName' is not required - if (printBase) { - // there is only a single join column here (just not the default name) - pw.print(elementName); - pw.print('='); - this.printJoinColumnAnnotationOn(joinColumnName, null, pw); - } else { - // no JoinColumn annotation needed: the default 'name' and 'referencedColumnName' work - } - } - pw.undent(); - } - } - - /** - * 'elementName' is either "joinColumns" or "inverseJoinColumns" - */ - private void printJoinTableJoinColumnAnnotationsOn(String elementName, ForeignKey foreignKey, EntitySourceWriter pw) { - pw.print(elementName); - pw.print('='); - if (foreignKey.columnPairsSize() > 1) { - pw.print('{'); - pw.println(); - pw.indent(); - } - this.printJoinColumnAnnotationsOn(foreignKey, pw); - if (foreignKey.columnPairsSize() > 1) { - pw.undent(); - pw.println(); - pw.print('}'); - pw.println(); - } - } - - - // ********** non-owned many-to-many fields ********** - - private void printEntityNonOwnedManyToManyFieldsOn(EntitySourceWriter pw) { - for (Iterator<ManyToManyRelation> stream = this.genTable.nonOwnedManyToManyRelations(); stream.hasNext(); ) { - this.printEntityNonOwnedManyToManyFieldOn(stream.next(), pw); - } - } - - private void printEntityNonOwnedManyToManyFieldOn(ManyToManyRelation relation, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(relation); - if (this.config.fieldAccessType()) { - this.printNonOwnedManyToManyAnnotationOn(relation, pw); - } - this.printCollectionFieldOn(fieldName, this.fullyQualify(relation.getOwningEntityName()), pw); - } - - private void printNonOwnedManyToManyAnnotationOn(ManyToManyRelation relation, EntitySourceWriter pw) { - pw.printAnnotation(JPA.MANY_TO_MANY); - pw.print("(mappedBy=\""); //$NON-NLS-1$ - pw.print(relation.getMappedBy()); - pw.print("\")"); //$NON-NLS-1$ - pw.println(); - } - - - // ********** misc ********** - - private void printSerialVersionUIDFieldOn(EntitySourceWriter pw) { - if (this.config.generateSerialVersionUID()) { - pw.print("private static final long serialVersionUID = 1L;"); //$NON-NLS-1$ - pw.println(); - } - } - - private void printZeroArgumentConstructorOn(String ctorName, String visibility, EntitySourceWriter pw) { - if (this.config.generateDefaultConstructor()) { - pw.printVisibility(visibility); - pw.print(ctorName); - pw.print("() {"); //$NON-NLS-1$ - pw.println(); - pw.indent(); - pw.println("super();"); //$NON-NLS-1$ - pw.undent(); - pw.print('}'); - pw.println(); - pw.println(); - } - } - - - // ********** primary key properties ********** - - private void printEntityPrimaryKeyPropertiesOn(EntitySourceWriter pw) { - if (this.primaryKeyClassIsRequired() && this.config.generateEmbeddedIdForCompoundPK()) { - this.printEntityEmbeddedIdPrimaryKeyPropertyOn(pw); - } else { - this.printEntityReadOnlyPrimaryKeyPropertiesOn(pw); - this.printEntityWritablePrimaryKeyPropertiesOn(pw); - } - } - - private void printEntityEmbeddedIdPrimaryKeyPropertyOn(EntitySourceWriter pw) { - if (this.config.propertyAccessType()) { - pw.printAnnotation(JPA.EMBEDDED_ID); - pw.println(); - } - this.printPropertyOn(this.genTable.getAttributeNameForEmbeddedId(), this.pkClassName, pw); - } - - private void printEntityReadOnlyPrimaryKeyPropertiesOn(EntitySourceWriter pw) { - this.printPrimaryKeyPropertiesOn(pw, true, true); // true=read-only; true=print ID annotation on getters - } - - private void printEntityWritablePrimaryKeyPropertiesOn(EntitySourceWriter pw) { - this.printPrimaryKeyPropertiesOn(pw, false, true); // false=writable; true=print ID annotation on getters - } - - private void printPrimaryKeyPropertiesOn(EntitySourceWriter pw, boolean readOnly, boolean printIdAnnotation) { - for (Iterator<Column> stream = this.primaryKeyColumns(readOnly); stream.hasNext(); ) { - this.printPrimaryKeyPropertyOn(stream.next(), pw, readOnly, printIdAnnotation); - } - } - - // TODO if the property's type is java.util/sql.Date, it needs @Temporal(DATE) - // TODO if the primary key is auto-generated, the property must be an integral type - private void printPrimaryKeyPropertyOn(Column column, EntitySourceWriter pw, boolean readOnly, boolean printIdAnnotation) { - String propertyName = this.genTable.getAttributeNameFor(column); - if (this.config.propertyAccessType()) { - if (printIdAnnotation) { - pw.printAnnotation(JPA.ID); - pw.println(); - } - String columnName = this.config.getDatabaseAnnotationNameBuilder().buildColumnAnnotationName(propertyName, column); - if (readOnly) { - this.printReadOnlyColumnAnnotationOn(columnName, pw); - } else { - this.printColumnAnnotationOn(columnName, pw); - } - } - this.printPropertyOn(propertyName, column.getPrimaryKeyJavaTypeDeclaration(), pw); - } - - - // ********** basic properties ********** - - private void printEntityNonPrimaryKeyBasicPropertiesOn(EntitySourceWriter pw) { - for (Iterator<Column> stream = this.genTable.nonPrimaryKeyBasicColumns(); stream.hasNext(); ) { - this.printEntityNonPrimaryKeyBasicPropertyOn(stream.next(), pw); - } - } - - private void printEntityNonPrimaryKeyBasicPropertyOn(Column column, EntitySourceWriter pw) { - String propertyName = this.genTable.getAttributeNameFor(column); - if (this.config.propertyAccessType()) { - String columnName = this.config.getDatabaseAnnotationNameBuilder().buildColumnAnnotationName(propertyName, column); - this.printColumnAnnotationOn(columnName, pw); - } - this.printPropertyOn(propertyName, column.getJavaTypeDeclaration(), pw); - } - - - // ********** many-to-one properties ********** - - private void printEntityManyToOnePropertiesOn(EntitySourceWriter pw) { - for (Iterator<ManyToOneRelation> stream = this.genTable.manyToOneRelations(); stream.hasNext(); ) { - this.printEntityManyToOnePropertyOn(stream.next(), pw); - } - } - - private void printEntityManyToOnePropertyOn(ManyToOneRelation relation, EntitySourceWriter pw) { - String propertyName = this.genTable.getAttributeNameFor(relation); - if (this.config.propertyAccessType()) { - this.printManyToOneAnnotationOn(propertyName, relation, pw); - } - String typeDeclaration = this.fullyQualify(relation.getReferencedEntityName()); - this.printPropertyOn(propertyName, typeDeclaration, pw); - } - - - // ********** one-to-many properties ********** - - private void printEntityOneToManyPropertiesOn(EntitySourceWriter pw) { - for (Iterator<OneToManyRelation> stream = this.genTable.oneToManyRelations(); stream.hasNext(); ) { - this.printEntityOneToManyPropertyOn(stream.next(), pw); - } - } - - private void printEntityOneToManyPropertyOn(OneToManyRelation relation, EntitySourceWriter pw) { - String propertyName = this.genTable.getAttributeNameFor(relation); - if (this.config.propertyAccessType()) { - this.printOneToManyAnnotationOn(relation, pw); - } - String elementTypeDeclaration = this.fullyQualify(relation.getReferencedEntityName()); - this.printCollectionPropertyOn(propertyName, elementTypeDeclaration, pw); - } - - - // ********** owned many-to-many properties ********** - - private void printEntityOwnedManyToManyPropertiesOn(EntitySourceWriter pw) { - for (Iterator<ManyToManyRelation> stream = this.genTable.ownedManyToManyRelations(); stream.hasNext(); ) { - this.printEntityOwnedManyToManyPropertyOn(stream.next(), pw); - } - } - - private void printEntityOwnedManyToManyPropertyOn(ManyToManyRelation relation, EntitySourceWriter pw) { - String propertyName = this.genTable.getAttributeNameFor(relation); - if (this.config.propertyAccessType()) { - this.printOwnedManyToManyAnnotationOn(propertyName, relation, pw); - } - String elementTypeDeclaration = this.fullyQualify(relation.getNonOwningEntityName()); - this.printCollectionPropertyOn(propertyName, elementTypeDeclaration, pw); - } - - - // ********** non-owned many-to-many properties ********** - - private void printEntityNonOwnedManyToManyPropertiesOn(EntitySourceWriter pw) { - for (Iterator<ManyToManyRelation> stream = this.genTable.nonOwnedManyToManyRelations(); stream.hasNext(); ) { - this.printEntityNonOwnedManyToManyPropertyOn(stream.next(), pw); - } - } - - private void printEntityNonOwnedManyToManyPropertyOn(ManyToManyRelation relation, EntitySourceWriter pw) { - String propertyName = this.genTable.getAttributeNameFor(relation); - if (this.config.propertyAccessType()) { - this.printNonOwnedManyToManyAnnotationOn(relation, pw); - } - String elementTypeDeclaration = this.fullyQualify(relation.getOwningEntityName()); - this.printCollectionPropertyOn(propertyName, elementTypeDeclaration, pw); - } - - - // ********** compound primary key class ********** - - private void printPrimaryKeyClassOn(EntitySourceWriter pw) { - pw.println(); - if (this.config.generateEmbeddedIdForCompoundPK()) { - pw.printAnnotation(JPA.EMBEDDABLE); - pw.println(); - } - pw.print("public static class "); //$NON-NLS-1$ - pw.print(this.config.getPrimaryKeyMemberClassName()); - pw.print(" implements "); //$NON-NLS-1$ - pw.printTypeDeclaration(Serializable.class.getName()); - pw.print(" {"); //$NON-NLS-1$ - pw.println(); - - pw.indent(); - if (this.config.generateEmbeddedIdForCompoundPK()) { - this.printEmbeddableReadOnlyPrimaryKeyFieldsOn(pw); - this.printEmbeddableWritablePrimaryKeyFieldsOn(pw); - } else { - this.printIdFieldsOn(pw); - } - this.printSerialVersionUIDFieldOn(pw); - pw.println(); - this.printZeroArgumentConstructorOn(this.config.getPrimaryKeyMemberClassName(), "public", pw); //$NON-NLS-1$ - - if (this.config.propertyAccessType() || this.config.generateGettersAndSetters()) { - if (this.config.generateEmbeddedIdForCompoundPK()) { - this.printEmbeddableReadOnlyPrimaryKeyPropertiesOn(pw); - this.printEmbeddableWritablePrimaryKeyPropertiesOn(pw); - } else { - this.printIdPropertiesOn(pw); - } - } - - this.printPrimaryKeyEqualsMethodOn(this.config.getPrimaryKeyMemberClassName(), this.getTable().primaryKeyColumns(), pw); - this.printPrimaryKeyHashCodeMethodOn(this.getTable().primaryKeyColumns(), pw); - pw.undent(); - - pw.print('}'); - pw.println(); - pw.println(); - } - - - // ********** compound primary key class fields ********** - - private void printEmbeddableReadOnlyPrimaryKeyFieldsOn(EntitySourceWriter pw) { - this.printPrimaryKeyFieldsOn(pw, true, false); // true=read-only; false=do not print ID annotation on fields - } - - private void printEmbeddableWritablePrimaryKeyFieldsOn(EntitySourceWriter pw) { - this.printPrimaryKeyFieldsOn(pw, false, false); // false=writable; false=do not print ID annotation on fields - } - - private void printIdFieldsOn(EntitySourceWriter pw) { - for (Iterator<Column> stream = this.getTable().primaryKeyColumns(); stream.hasNext(); ) { - this.printIdFieldOn(stream.next(), pw); - } - } - - private void printIdFieldOn(Column column, EntitySourceWriter pw) { - this.printFieldOn(this.genTable.getAttributeNameFor(column), column.getPrimaryKeyJavaTypeDeclaration(), pw); - } - - - // ********** compound primary key class properties ********** - - private void printEmbeddableReadOnlyPrimaryKeyPropertiesOn(EntitySourceWriter pw) { - this.printPrimaryKeyPropertiesOn(pw, true, false); // true=read-only; false=do not print ID annotation on getters - } - - private void printEmbeddableWritablePrimaryKeyPropertiesOn(EntitySourceWriter pw) { - this.printPrimaryKeyPropertiesOn(pw, false, false); // false=writable; false=do not print ID annotation on getters - } - - private void printIdPropertiesOn(EntitySourceWriter pw) { - for (Iterator<Column> stream = this.getTable().primaryKeyColumns(); stream.hasNext(); ) { - this.printIdPropertyOn(stream.next(), pw); - } - } - - private void printIdPropertyOn(Column column, EntitySourceWriter pw) { - this.printPropertyOn(this.genTable.getAttributeNameFor(column), column.getPrimaryKeyJavaTypeDeclaration(), pw); - } - - - // ********** compound primary key class equals ********** - - private void printPrimaryKeyEqualsMethodOn(String className, Iterator<Column> columns, EntitySourceWriter pw) { - pw.printAnnotation("java.lang.Override"); //$NON-NLS-1$ - pw.println(); - - pw.println("public boolean equals(Object o) {"); //$NON-NLS-1$ - pw.indent(); - pw.println("if (o == this) {"); //$NON-NLS-1$ - pw.indent(); - pw.println("return true;"); //$NON-NLS-1$ - pw.undent(); - pw.print('}'); - pw.println(); - - pw.print("if ( ! (o instanceof "); //$NON-NLS-1$ - pw.print(className); - pw.print(")) {"); //$NON-NLS-1$ - pw.println(); - pw.indent(); - pw.println("return false;"); //$NON-NLS-1$ - pw.undent(); - pw.print('}'); - pw.println(); - - pw.print(className); - pw.print(" other = ("); //$NON-NLS-1$ - pw.print(className); - pw.print(") o;"); //$NON-NLS-1$ - pw.println(); - - pw.print("return "); //$NON-NLS-1$ - pw.indent(); - while (columns.hasNext()) { - this.printPrimaryKeyEqualsClauseOn(columns.next(), pw); - if (columns.hasNext()) { - pw.println(); - pw.print("&& "); //$NON-NLS-1$ - } - } - pw.print(';'); - pw.println(); - pw.undent(); - pw.undent(); - pw.print('}'); - pw.println(); - pw.println(); - } - - private void printPrimaryKeyEqualsClauseOn(Column column, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(column); - JavaType javaType = column.getPrimaryKeyJavaType(); - if (javaType.isPrimitive()) { - this.printPrimitiveEqualsClauseOn(fieldName, pw); - } else { - this.printReferenceEqualsClauseOn(fieldName, pw); - } - } - - private void printPrimitiveEqualsClauseOn(String fieldName, EntitySourceWriter pw) { - pw.print("(this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(" == other."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(')'); - } - - private void printReferenceEqualsClauseOn(String fieldName, EntitySourceWriter pw) { - pw.print("this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(".equals(other."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(')'); - } - - - // ********** compound primary key class hash code ********** - - private void printPrimaryKeyHashCodeMethodOn(Iterator<Column> columns, EntitySourceWriter pw) { - pw.printAnnotation("java.lang.Override"); //$NON-NLS-1$ - pw.println(); - - pw.println("public int hashCode() {"); //$NON-NLS-1$ - pw.indent(); - pw.println("final int prime = 31;"); //$NON-NLS-1$ - pw.println("int hash = 17;"); //$NON-NLS-1$ - while (columns.hasNext()) { - pw.print("hash = hash * prime + "); //$NON-NLS-1$ - this.printPrimaryKeyHashCodeClauseOn(columns.next(), pw); - pw.print(';'); - pw.println(); - } - pw.println("return hash;"); //$NON-NLS-1$ - pw.undent(); - pw.print('}'); - pw.println(); - pw.println(); - } - - private void printPrimaryKeyHashCodeClauseOn(Column column, EntitySourceWriter pw) { - String fieldName = this.genTable.getAttributeNameFor(column); - JavaType javaType = column.getPrimaryKeyJavaType(); - if (javaType.isPrimitive()) { - this.printPrimitiveHashCodeClauseOn(javaType.getElementTypeName(), fieldName, pw); - } else { - this.printReferenceHashCodeClauseOn(fieldName, pw); - } - } - - private void printPrimitiveHashCodeClauseOn(String primitiveName, String fieldName, EntitySourceWriter pw) { - if (primitiveName.equals("int")) { //$NON-NLS-1$ - // this.value - pw.print("this."); //$NON-NLS-1$ - pw.print(fieldName); - } else if (primitiveName.equals("short") //$NON-NLS-1$ - || primitiveName.equals("byte") //$NON-NLS-1$ - || primitiveName.equals("char")) { //$NON-NLS-1$ - // ((int) this.value) - explicit cast - pw.print("((int) this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(')'); - } else if (primitiveName.equals("long")) { // cribbed from Long#hashCode() //$NON-NLS-1$ - // ((int) (this.value ^ (this.value >>> 32))) - pw.print("((int) (this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(" ^ (this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(" >>> 32)))"); //$NON-NLS-1$ - } else if (primitiveName.equals("float")) { // cribbed from Float#hashCode() //$NON-NLS-1$ - // java.lang.Float.floatToIntBits(this.value) - pw.printTypeDeclaration("java.lang.Float"); //$NON-NLS-1$ - pw.print(".floatToIntBits(this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(')'); - } else if (primitiveName.equals("double")) { // cribbed from Double#hashCode() //$NON-NLS-1$ - // ((int) (java.lang.Double.doubleToLongBits(this.value) ^ (java.lang.Double.doubleToLongBits(this.value) >>> 32))) - pw.print("((int) ("); //$NON-NLS-1$ - pw.printTypeDeclaration("java.lang.Double"); //$NON-NLS-1$ - pw.print(".doubleToLongBits(this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(") ^ ("); //$NON-NLS-1$ - pw.printTypeDeclaration("java.lang.Double"); //$NON-NLS-1$ - pw.print(".doubleToLongBits(this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(") >>> 32)))"); //$NON-NLS-1$ - } else if (primitiveName.equals("boolean")) { //$NON-NLS-1$ - // (this.value ? 1 : 0) - pw.print("(this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(" ? 1 : 0)"); //$NON-NLS-1$ - } else { - throw new IllegalArgumentException(primitiveName); - } - } - - private void printReferenceHashCodeClauseOn(String fieldName, EntitySourceWriter pw) { - pw.print("this."); //$NON-NLS-1$ - pw.print(fieldName); - pw.print(".hashCode()"); //$NON-NLS-1$ - } - - - // ********** package and imports ********** - - private void printPackageAndImportsOn(PrintWriter pw, BodySource bodySource) { - if (this.getPackageName().length() != 0) { - pw.print("package "); //$NON-NLS-1$ - pw.print(this.getPackageName()); - pw.print(';'); - pw.println(); - pw.println(); - } - - for (Iterator<Map.Entry<String, String>> stream = bodySource.importEntries(); stream.hasNext(); ) { - Map.Entry<String, String> entry = stream.next(); - pw.print("import "); //$NON-NLS-1$ - pw.print(entry.getValue()); // package - pw.print('.'); - pw.print(entry.getKey()); // short class name - pw.print(';'); - pw.println(); - } - pw.println(); - } - - - // ********** fields ********** - - /** - * visibility is set in the config - */ - private void printFieldOn(String fieldName, String typeDeclaration, EntitySourceWriter pw) { - pw.printField( - fieldName, - typeDeclaration, - this.config.getFieldVisibilityClause() - ); - } - - /** - * visibility and collection type are set in the config - */ - private void printCollectionFieldOn(String fieldName, String elementTypeDeclaration, EntitySourceWriter pw) { - pw.printParameterizedField( - fieldName, - this.config.getCollectionTypeName(), - elementTypeDeclaration, - this.config.getFieldVisibilityClause() - ); - } - - - // ********** properties ********** - - /** - * visibility is set in the config - */ - private void printPropertyOn(String propertyName, String typeDeclaration, EntitySourceWriter pw) { - pw.printGetterAndSetter( - propertyName, - typeDeclaration, - this.config.getMethodVisibilityClause() - ); - } - - /** - * visibility and collection type are set in the config - */ - private void printCollectionPropertyOn(String propertyName, String elementTypeDeclaration, EntitySourceWriter pw) { - pw.printCollectionGetterAndSetter( - propertyName, - this.config.getCollectionTypeName(), - elementTypeDeclaration, - this.config.getMethodVisibilityClause() - ); - } - - - // ********** convenience methods ********** - - private String getPackageName() { - return this.packageFragment.getElementName(); - } - - private Table getTable() { - return this.genTable.getTable(); - } - - private String getEntityName() { - return this.genTable.getEntityName(); - } - - private boolean primaryKeyClassIsRequired() { - return this.getTable().primaryKeyColumnsSize() > 1; - } - - private String fullyQualify(String shortClassName) { - String pkg = this.getPackageName(); - return (pkg.length() == 0) ? shortClassName : pkg + '.' + shortClassName; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.genTable.getName() + " => " + this.entityClassName); //$NON-NLS-1$ - } - - - // ********** source writer ********** - - private interface BodySource { - - /** - * return a sorted set of map entries; the key is the short class name, - * the value is the package name - */ - Iterator<Map.Entry<String, String>> importEntries(); - - /** - * return the body source code - */ - String getSource(); - - /** - * return the length of the body source code - */ - int length(); - - } - - /** - * Extend IndentingPrintWriter with some methods that facilitate building - * class source code. - */ - private static class EntitySourceWriter extends IndentingPrintWriter implements BodySource { - final String packageName; - final String className; - // key = short class name; value = package name - private final Map<String, String> imports = new HashMap<String, String>(); - - EntitySourceWriter(String packageName, String className) { - super(new StringWriter(20000)); - this.packageName = packageName; - this.className = className; - } - - /** - * Convert the specified string to a String Literal and print it, - * adding the surrounding double-quotes and escaping characters - * as necessary. - */ - void printStringLiteral(String string) { - StringTools.convertToJavaStringLiteralOn(string, this); - } - - void printVisibility(String visibilityModifier) { - if (visibilityModifier.length() != 0) { - this.print(visibilityModifier); - this.print(' '); - } - } - - void printAnnotation(String annotationName) { - this.print('@'); - this.printTypeDeclaration(annotationName); - } - - void printTypeDeclaration(String typeDeclaration) { - this.print(this.buildImportedTypeDeclaration(typeDeclaration)); - } - - /** - * Return the specified class's "imported" name. - * The class declaration must be of the form: - * "int" - * "int[]" (not "[I") - * "java.lang.Object" - * "java.lang.Object[]" (not "[Ljava.lang.Object;") - * "java.util.Map.Entry" (not "java.util.Map$Entry") - * "java.util.Map.Entry[][]" (not "[[Ljava.util.Map$Entry;") - */ - private String buildImportedTypeDeclaration(String typeDeclaration) { - if (this.typeDeclarationIsMemberClass(typeDeclaration)) { - // no need for an import, just return the partially-qualified name - return this.buildMemberClassTypeDeclaration(typeDeclaration); - } - int last = typeDeclaration.lastIndexOf('.'); - String pkg = (last == -1) ? "" : typeDeclaration.substring(0, last); //$NON-NLS-1$ - String shortTypeDeclaration = typeDeclaration.substring(last + 1); - String shortElementTypeName = shortTypeDeclaration; - while (shortElementTypeName.endsWith("[]")) { //$NON-NLS-1$ - shortElementTypeName = shortElementTypeName.substring(0, shortElementTypeName.length() - 2); - } - String prev = this.imports.get(shortElementTypeName); - if (prev == null) { - // this is the first class with this short element type name - this.imports.put(shortElementTypeName, pkg); - return shortTypeDeclaration; - } - if (prev.equals(pkg)) { - // this element type has already been imported - return shortTypeDeclaration; - } - // another class with the same short element type name has been - // previously imported, so this one must be used fully-qualified - return typeDeclaration; - } - - /** - * e.g. "foo.bar.Employee.PK" will return true - */ - private boolean typeDeclarationIsMemberClass(String typeDeclaration) { - return (typeDeclaration.length() > this.className.length()) - && typeDeclaration.startsWith(this.className) - && (typeDeclaration.charAt(this.className.length()) == '.'); - } - - /** - * e.g. "foo.bar.Employee.PK" will return "Employee.PK" - * this prevents collisions with other imported classes (e.g. "joo.jar.PK") - */ - private String buildMemberClassTypeDeclaration(String typeDeclaration) { - int index = this.packageName.length(); - if (index != 0) { - index++; // bump past the '.' - } - return typeDeclaration.substring(index); - } - - private Iterator<Map.Entry<String, String>> sortedImportEntries() { - TreeSet<Map.Entry<String, String>> sortedImports = new TreeSet<Map.Entry<String, String>>(this.buildImportEntriesComparator()); - sortedImports.addAll(this.imports.entrySet()); - return sortedImports.iterator(); - } - - private Comparator<Map.Entry<String, String>> buildImportEntriesComparator() { - return new Comparator<Map.Entry<String, String>>() { - public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) { - Collator collator = Collator.getInstance(); - int pkg = collator.compare(e1.getValue(), e2.getValue()); - return (pkg == 0) ? collator.compare(e1.getKey(), e2.getKey()) : pkg; - } - }; - } - - void printField(String fieldName, String typeDeclaration, String visibility) { - this.printVisibility(visibility); - this.printTypeDeclaration(typeDeclaration); - this.print(' '); - this.print(fieldName); - this.print(';'); - this.println(); - this.println(); - } - - void printParameterizedField(String fieldName, String typeDeclaration, String parameterTypeDeclaration, String visibility) { - this.printVisibility(visibility); - this.printTypeDeclaration(typeDeclaration); - this.print('<'); - this.printTypeDeclaration(parameterTypeDeclaration); - this.print('>'); - this.print(' '); - this.print(fieldName); - this.print(';'); - this.println(); - this.println(); - } - - void printGetterAndSetter(String propertyName, String typeDeclaration, String visibility) { - this.printGetter(propertyName, typeDeclaration, visibility); - this.println(); - this.println(); - - this.printSetter(propertyName, typeDeclaration, visibility); - this.println(); - this.println(); - } - - private void printGetter(String propertyName, String typeDeclaration, String visibility) { - this.printVisibility(visibility); - this.printTypeDeclaration(typeDeclaration); - this.print(' '); - this.print(typeDeclaration.equals("boolean") ? "is" : "get"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - this.print(StringTools.capitalize(propertyName)); - this.print("() {"); //$NON-NLS-1$ - this.println(); - - this.indent(); - this.print("return this."); //$NON-NLS-1$ - this.print(propertyName); - this.print(';'); - this.println(); - this.undent(); - - this.print('}'); - } - - private void printSetter(String propertyName, String typeDeclaration, String visibility) { - this.printVisibility(visibility); - this.print("void set"); //$NON-NLS-1$ - this.print(StringTools.capitalize(propertyName)); - this.print('('); - this.printTypeDeclaration(typeDeclaration); - this.print(' '); - this.print(propertyName); - this.print(") {"); //$NON-NLS-1$ - this.println(); - - this.indent(); - this.print("this."); //$NON-NLS-1$ - this.print(propertyName); - this.print(" = "); //$NON-NLS-1$ - this.print(propertyName); - this.print(';'); - this.println(); - this.undent(); - - this.print('}'); - } - - void printCollectionGetterAndSetter(String propertyName, String collectionTypeDeclaration, String elementTypeDeclaration, String visibility) { - this.printCollectionGetter(propertyName, collectionTypeDeclaration, elementTypeDeclaration, visibility); - this.println(); - this.println(); - - this.printCollectionSetter(propertyName, collectionTypeDeclaration, elementTypeDeclaration, visibility); - this.println(); - this.println(); - } - - private void printCollectionGetter(String propertyName, String collectionTypeDeclaration, String elementTypeDeclaration, String visibility) { - this.printVisibility(visibility); - this.printTypeDeclaration(collectionTypeDeclaration); - this.print('<'); - this.printTypeDeclaration(elementTypeDeclaration); - this.print("> get"); //$NON-NLS-1$ - this.print(StringTools.capitalize(propertyName)); - this.print("() {"); //$NON-NLS-1$ - this.println(); - - this.indent(); - this.print("return this."); //$NON-NLS-1$ - this.print(propertyName); - this.print(';'); - this.println(); - this.undent(); - - this.print('}'); - } - - private void printCollectionSetter(String propertyName, String collectionTypeDeclaration, String elementTypeDeclaration, String visibility) { - this.printVisibility(visibility); - this.print("void set"); //$NON-NLS-1$ - this.print(StringTools.capitalize(propertyName)); - this.print('('); - this.printTypeDeclaration(collectionTypeDeclaration); - this.print('<'); - this.printTypeDeclaration(elementTypeDeclaration); - this.print('>'); - this.print(' '); - this.print(propertyName); - this.print(") {"); //$NON-NLS-1$ - this.println(); - - this.indent(); - this.print("this."); //$NON-NLS-1$ - this.print(propertyName); - this.print(" = "); //$NON-NLS-1$ - this.print(propertyName); - this.print(';'); - this.println(); - this.undent(); - - this.print('}'); - } - - - // ********** BodySource implementation ********** - - public Iterator<Map.Entry<String, String>> importEntries() { - return new FilteringIterator<Map.Entry<String, String>, Map.Entry<String, String>>(this.sortedImportEntries()) { - @Override - protected boolean accept(Map.Entry<String, String> next) { - String pkg = next.getValue(); - if (pkg.equals("") //$NON-NLS-1$ - || pkg.equals("java.lang") //$NON-NLS-1$ - || pkg.equals(EntitySourceWriter.this.packageName)) { - return false; - } - return true; - } - }; - } - - public String getSource() { - return this.out.toString(); - } - - public int length() { - return ((StringWriter) this.out).getBuffer().length(); - } - - } - - - // ********** config ********** - - public static class Config { - private boolean convertToJavaStyleIdentifiers = true; - - private boolean propertyAccessType = false; // as opposed to "field" - - private String collectionTypeName = Set.class.getName(); - private String collectionAttributeNameSuffix = "Collection"; // e.g. "private Set<Foo> fooCollection" //$NON-NLS-1$ - - private int fieldVisibility = Modifier.PRIVATE; - private int methodVisibility = Modifier.PUBLIC; - - private boolean generateGettersAndSetters = true; - private boolean generateDefaultConstructor = true; - - private boolean serializable = true; - private boolean generateSerialVersionUID = true; - - private boolean generateEmbeddedIdForCompoundPK = true; // as opposed to IdClass - private String embeddedIdAttributeName = "pk"; //$NON-NLS-1$ - private String primaryKeyMemberClassName = "PK"; //$NON-NLS-1$ - - /** - * key = table - * value = entity name - */ - private HashMap<Table, String> tables = new HashMap<Table, String>(); - - private DatabaseAnnotationNameBuilder databaseAnnotationNameBuilder = DatabaseAnnotationNameBuilder.Default.INSTANCE; - - private OverwriteConfirmer overwriteConfirmer = OverwriteConfirmer.Never.INSTANCE; - - public static final int PRIVATE = 0; - public static final int PACKAGE = 1; - public static final int PROTECTED = 2; - public static final int PUBLIC = 3; - - - public boolean convertToJavaStyleIdentifiers() { - return this.convertToJavaStyleIdentifiers; - } - public void setConvertToJavaStyleIdentifiers(boolean convertToJavaStyleIdentifiers) { - this.convertToJavaStyleIdentifiers = convertToJavaStyleIdentifiers; - } - - public boolean propertyAccessType() { - return this.propertyAccessType; - } - public void setPropertyAccessType(boolean propertyAccessType) { - this.propertyAccessType = propertyAccessType; - } - - public boolean fieldAccessType() { - return ! this.propertyAccessType; - } - public void setFieldAccessType(boolean fieldAccessType) { - this.propertyAccessType = ! fieldAccessType; - } - - public String getCollectionTypeName() { - return this.collectionTypeName; - } - public void setCollectionTypeName(String collectionTypeName) { - this.checkRequiredString(collectionTypeName, "collection type name is required"); //$NON-NLS-1$ - this.collectionTypeName = collectionTypeName; - } - - public String getCollectionAttributeNameSuffix() { - return this.collectionAttributeNameSuffix; - } - public void setCollectionAttributeNameSuffix(String collectionAttributeNameSuffix) { - this.collectionAttributeNameSuffix = collectionAttributeNameSuffix; - } - - public int getFieldVisibility() { - return this.fieldVisibility; - } - /** entity fields cannot be 'public' */ - public void setFieldVisibility(int fieldVisibility) { - switch (fieldVisibility) { - case PRIVATE: - case PACKAGE: - case PROTECTED: - this.fieldVisibility = fieldVisibility; - break; - default: - throw new IllegalArgumentException("invalid field visibility: " + fieldVisibility); //$NON-NLS-1$ - } - } - String getFieldVisibilityClause() { - switch (this.fieldVisibility) { - case PRIVATE: - return "private"; //$NON-NLS-1$ - case PACKAGE: - return ""; //$NON-NLS-1$ - case PROTECTED: - return "protected"; //$NON-NLS-1$ - default: - throw new IllegalStateException("invalid field visibility: " + this.fieldVisibility); //$NON-NLS-1$ - } - } - - public int getMethodVisibility() { - return this.methodVisibility; - } - /** entity properties must be 'public' or 'protected' */ - public void setMethodVisibility(int methodVisibility) { - switch (methodVisibility) { - case PROTECTED: - case PUBLIC: - this.methodVisibility = methodVisibility; - break; - default: - throw new IllegalArgumentException("invalid method visibility: " + methodVisibility); //$NON-NLS-1$ - } - } - String getMethodVisibilityClause() { - switch (this.methodVisibility) { - case PROTECTED: - return "protected"; //$NON-NLS-1$ - case PUBLIC: - return "public"; //$NON-NLS-1$ - default: - throw new IllegalStateException("invalid method visibility: " + this.methodVisibility); //$NON-NLS-1$ - } - } - - public boolean generateGettersAndSetters() { - return this.generateGettersAndSetters; - } - public void setGenerateGettersAndSetters(boolean generateGettersAndSetters) { - this.generateGettersAndSetters = generateGettersAndSetters; - } - - public boolean generateDefaultConstructor() { - return this.generateDefaultConstructor; - } - public void setGenerateDefaultConstructor(boolean generateDefaultConstructor) { - this.generateDefaultConstructor = generateDefaultConstructor; - } - - public boolean serializable() { - return this.serializable; - } - public void setSerializable(boolean serializable) { - this.serializable = serializable; - } - - public boolean generateSerialVersionUID() { - return this.generateSerialVersionUID; - } - public void setGenerateSerialVersionUID(boolean generateSerialVersionUID) { - this.generateSerialVersionUID = generateSerialVersionUID; - } - - public boolean generateEmbeddedIdForCompoundPK() { - return this.generateEmbeddedIdForCompoundPK; - } - public void setGenerateEmbeddedIdForCompoundPK(boolean generateEmbeddedIdForCompoundPK) { - this.generateEmbeddedIdForCompoundPK = generateEmbeddedIdForCompoundPK; - } - - public boolean generateIdClassForCompoundPK() { - return ! this.generateEmbeddedIdForCompoundPK; - } - public void setGenerateIdClassForCompoundPK(boolean generateIdClassForCompoundPK) { - this.generateEmbeddedIdForCompoundPK = ! generateIdClassForCompoundPK; - } - - public String getEmbeddedIdAttributeName() { - return this.embeddedIdAttributeName; - } - public void setEmbeddedIdAttributeName(String embeddedIdAttributeName) { - this.checkRequiredString(embeddedIdAttributeName, "EmbeddedId attribute name is required"); //$NON-NLS-1$ - this.embeddedIdAttributeName = embeddedIdAttributeName; - } - - public String getPrimaryKeyMemberClassName() { - return this.primaryKeyMemberClassName; - } - public void setPrimaryKeyMemberClassName(String primaryKeyMemberClassName) { - this.checkRequiredString(primaryKeyMemberClassName, "primary key member class name is required"); //$NON-NLS-1$ - this.primaryKeyMemberClassName = primaryKeyMemberClassName; - } - - String getEntityName(Table table) { - return this.tables.get(table); - } - Iterator<Table> tables() { - return this.tables.keySet().iterator(); - } - int tablesSize() { - return this.tables.size(); - } - public void addTable(Table table, String entityName) { - if (table == null) { - throw new NullPointerException("table is required"); //$NON-NLS-1$ - } - this.checkRequiredString(entityName, "entity name is required"); //$NON-NLS-1$ - if (this.tables.containsKey(table)) { - throw new IllegalArgumentException("duplicate table: " + table.getName()); //$NON-NLS-1$ - } - if (this.tables.values().contains(entityName)) { - throw new IllegalArgumentException("duplicate entity name: " + entityName); //$NON-NLS-1$ - } - if ( ! NameTools.stringConsistsOfJavaIdentifierCharacters(entityName)) { - throw new IllegalArgumentException("entity name is not a valid Java identifier: " + entityName); //$NON-NLS-1$ - } - if (NameTools.JAVA_RESERVED_WORDS_SET.contains(entityName)) { - throw new IllegalArgumentException("entity name is a Java reserved word: " + entityName); //$NON-NLS-1$ - } - this.tables.put(table, entityName); - } - - public DatabaseAnnotationNameBuilder getDatabaseAnnotationNameBuilder() { - return this.databaseAnnotationNameBuilder; - } - public void setDatabaseAnnotationNameBuilder(DatabaseAnnotationNameBuilder databaseAnnotationNameBuilder) { - if (databaseAnnotationNameBuilder == null) { - throw new NullPointerException("database annotation name builder is required"); //$NON-NLS-1$ - } - this.databaseAnnotationNameBuilder = databaseAnnotationNameBuilder; - } - - public OverwriteConfirmer getOverwriteConfirmer() { - return this.overwriteConfirmer; - } - public void setOverwriteConfirmer(OverwriteConfirmer overwriteConfirmer) { - if (overwriteConfirmer == null) { - throw new NullPointerException("overwrite confirmer is required"); //$NON-NLS-1$ - } - this.overwriteConfirmer = overwriteConfirmer; - } - - private void checkRequiredString(String string, String message) { - if ((string == null) || (string.length() == 0)) { - throw new IllegalArgumentException(message); - } - } - - } - - - // ********** overwrite confirmer ********** - - public static interface OverwriteConfirmer { - /** - * Return whether the entity generator should overwrite the specified - * file. - */ - boolean overwrite(String className); - - - final class Always implements OverwriteConfirmer { - public static final OverwriteConfirmer INSTANCE = new Always(); - public static OverwriteConfirmer instance() { - return INSTANCE; - } - // ensure single instance - private Always() { - super(); - } - // everything will be overwritten - public boolean overwrite(String arg0) { - return true; - } - @Override - public String toString() { - return "OverwriteConfirmer.Always"; //$NON-NLS-1$ - } - } - - - final class Never implements OverwriteConfirmer { - public static final OverwriteConfirmer INSTANCE = new Never(); - public static OverwriteConfirmer instance() { - return INSTANCE; - } - // ensure single instance - private Never() { - super(); - } - // nothing will be overwritten - public boolean overwrite(String arg0) { - return false; - } - @Override - public String toString() { - return "OverwriteConfirmer.Never"; //$NON-NLS-1$ - } - } - - } - - - // ********** annotation name builder ********** - - /** - * Provide a pluggable way to determine whether and how the entity generator - * prints the names of various database objects. - */ - public static interface DatabaseAnnotationNameBuilder { - - /** - * Given the name of an entity and the table to which it is mapped, - * build and return a string to be used as the value for the entity's - * Table annotation's 'name' element. Return null if the entity - * maps to the table by default. - */ - String buildTableAnnotationName(String entityName, Table table); - - /** - * Given the name of an attribute (field or property) and the column - * to which it is mapped, - * build and return a string to be used as the value for the attribute's - * Column annotation's 'name' element. Return null if the attribute - * maps to the column by default. - */ - String buildColumnAnnotationName(String attributeName, Column column); - - /** - * Given the name of an attribute (field or property) and the - * many-to-one or many-to-many foreign key to which it is mapped, - * build and return a string to be used as the value for the attribute's - * JoinColumn annotation's 'name' element. Return null if the attribute - * maps to the join column by default. - * The specified foreign key consists of a single column pair whose - * referenced column is the single-column primary key of the foreign - * key's referenced table. - */ - String buildJoinColumnAnnotationName(String attributeName, ForeignKey foreignKey); - - /** - * Build and return a string to be used as the value for a JoinColumn - * annotation's 'name' or 'referencedColumnName' element. - * This is called for many-to-one and many-to-many mappings when - * the default join column name and/or referenced column name are/is - * not applicable. - * @see buildJoinColumnAnnotationName(String, ForeignKey) - */ - String buildJoinColumnAnnotationName(Column column); - - /** - * Build and return a string to be used as the value for a JoinTable - * annotation's 'name' element. - * This is called for many-to-many mappings when the default - * join table name is not applicable. - */ - String buildJoinTableAnnotationName(Table table); - - - /** - * The default implementation simple returns the database object's name, - * unaltered. - */ - final class Default implements DatabaseAnnotationNameBuilder { - public static final DatabaseAnnotationNameBuilder INSTANCE = new Default(); - public static DatabaseAnnotationNameBuilder instance() { - return INSTANCE; - } - // ensure single instance - private Default() { - super(); - } - public String buildTableAnnotationName(String entityName, Table table) { - return table.getName(); - } - public String buildColumnAnnotationName(String attributeName, Column column) { - return column.getName(); - } - public String buildJoinColumnAnnotationName(String attributeName, ForeignKey foreignKey) { - return foreignKey.getColumnPair().getBaseColumn().getName(); - } - public String buildJoinColumnAnnotationName(Column column) { - return column.getName(); - } - public String buildJoinTableAnnotationName(Table table) { - return table.getName(); - } - @Override - public String toString() { - return "DatabaseAnnotationNameBuilder.Default"; //$NON-NLS-1$ - } - } - - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenScope.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenScope.java deleted file mode 100644 index 4e524e6f68..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenScope.java +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.SubMonitor; -import org.eclipse.jpt.db.Table; -import org.eclipse.jpt.utility.internal.CollectionTools; -import org.eclipse.jpt.utility.internal.StringTools; -import org.eclipse.jpt.utility.internal.iterators.FilteringIterator; - -/** - * Build a GenTable for each db.Table passed in. - * Determine all the relations among the tables in the scope: - * many-to-many - * many-to-one - * one-to-many - * Make a first pass to determine each entity table's Java attribute names, - * because we will need them on subsequent passes. - */ -class GenScope { - private final EntityGenerator.Config entityConfig; - private final HashMap<Table, GenTable> genTables; - - - // ********** construction/initialization ********** - - GenScope(EntityGenerator.Config entityConfig, IProgressMonitor progressMonitor) { - super(); - this.entityConfig = entityConfig; - this.genTables = new HashMap<Table, GenTable>(entityConfig.tablesSize()); - SubMonitor sm = SubMonitor.convert(progressMonitor, JptGenMessages.GenScope_taskName, 4); - - this.buildGenTables(); - sm.worked(1); - this.checkCanceled(sm); - - this.buildManyToManyRelations(); - sm.worked(1); - this.checkCanceled(sm); - - this.buildManyToOneRelations(); // this will also build the corresponding one-to-many relations - sm.worked(1); - this.checkCanceled(sm); - - this.buildAttributeNames(); - sm.worked(1); - this.checkCanceled(sm); - } - - private void buildGenTables() { - for (Iterator<Table> stream = entityConfig.tables(); stream.hasNext(); ) { - Table table = stream.next(); - this.genTables.put(table, new GenTable(this, table)); - } - } - - /** - * find all the "join" tables - */ - private void buildManyToManyRelations() { - for (Iterator<GenTable> stream = this.genTables(); stream.hasNext(); ) { - stream.next().buildJoinTableRelation(); - } - - // revert any "join" table that is referenced by another table back to an "entity" table - HashSet<GenTable> referencedGenTables = this.buildReferencedGenTables(); - for (Iterator<GenTable> stream = this.joinGenTables(); stream.hasNext(); ) { - GenTable joinGenTable = stream.next(); - if (referencedGenTables.contains(joinGenTable)) { - joinGenTable.clearJoinTableRelation(); - } - } - } - - /** - * find all the many-to-one and corresponding one-to-many relations - */ - private void buildManyToOneRelations() { - for (Iterator<GenTable> stream = this.entityGenTables(); stream.hasNext(); ) { - stream.next().buildManyToOneRelations(); - } - } - - /** - * determine all the Java attribute names up-front because we will - * need them for things like 'mappedBy' annotation elements - */ - private void buildAttributeNames() { - for (Iterator<GenTable> stream = this.entityGenTables(); stream.hasNext(); ) { - stream.next().buildAttributeNames(); - } - } - - - // ********** package API ********** - - EntityGenerator.Config getEntityConfig() { - return this.entityConfig; - } - - /** - * return only the gen tables that are suitable for generating - * entities (i.e. exclude the "join" tables) - */ - Iterator<GenTable> entityGenTables() { - return new FilteringIterator<GenTable, GenTable>(this.genTables()) { - @Override - protected boolean accept(GenTable genTable) { - return ! genTable.isJoinTable(); - } - }; - } - - int entityTablesSize() { - return CollectionTools.size(this.entityGenTables()); - } - - /** - * return the gen table corresponding to the specified db table; - * return null if the gen table is not "in-scope" (e.g. a db foreign key - * might have a reference to a db table that was not included in the - * scope, so we won't have a corresponding gen table) - */ - GenTable getGenTable(Table table) { - return this.genTables.get(table); - } - - - // ********** internal methods ********** - - private Iterator<GenTable> genTables() { - return this.genTables.values().iterator(); - } - - private int genTablesSize() { - return this.genTables.size(); - } - - /** - * return only the "join" gen tables - */ - private Iterator<GenTable> joinGenTables() { - return new FilteringIterator<GenTable, GenTable>(this.genTables()) { - @Override - protected boolean accept(GenTable genTable) { - return genTable.isJoinTable(); - } - }; - } - - /** - * build a set of the gen tables that are referenced by other gen tables - * in the scope - */ - private HashSet<GenTable> buildReferencedGenTables() { - HashSet<GenTable> referencedGenTables = new HashSet<GenTable>(this.genTablesSize()); - for (Iterator<GenTable> stream = this.genTables(); stream.hasNext(); ) { - stream.next().addReferencedGenTablesTo(referencedGenTables); - } - return referencedGenTables; - } - - private void checkCanceled(IProgressMonitor progressMonitor) { - if (progressMonitor.isCanceled()) { - throw new OperationCanceledException(); - } - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.genTables); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenTable.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenTable.java deleted file mode 100644 index 7c563447a9..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/GenTable.java +++ /dev/null @@ -1,362 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import org.eclipse.jpt.db.Column; -import org.eclipse.jpt.db.ForeignKey; -import org.eclipse.jpt.db.Table; -import org.eclipse.jpt.utility.internal.CollectionTools; -import org.eclipse.jpt.utility.internal.NameTools; -import org.eclipse.jpt.utility.internal.StringTools; -import org.eclipse.jpt.utility.internal.iterators.FilteringIterator; - -/** - * associate a table with the various relations that will be used when - * generating the entity corresponding to the table - */ -class GenTable { - private final GenScope scope; - private final Table table; - - // these relations cannot be built until after we have built all the scope's tables - private ManyToManyRelation joinTableRelation; - private final ArrayList<ManyToManyRelation> ownedManyToManyRelations = new ArrayList<ManyToManyRelation>(); - private final ArrayList<ManyToManyRelation> nonOwnedManyToManyRelations = new ArrayList<ManyToManyRelation>(); - private final ArrayList<ManyToOneRelation> manyToOneRelations = new ArrayList<ManyToOneRelation>(); - private final ArrayList<OneToManyRelation> oneToManyRelations = new ArrayList<OneToManyRelation>(); - private final HashSet<Column> foreignKeyColumns = new HashSet<Column>(); - - // key=column/relation; value=entity attribute (field/property) name - private final HashMap<Object, String> attributeNames = new HashMap<Object, String>(); - // key to 'attributeNames' for the optional embedded ID attribute name - private static final Object EMBEDDED_ID_VIRTUAL_COLUMN = new Object(); - - - // ********** construction/initialization ********** - - GenTable(GenScope scope, Table table) { - super(); - this.scope = scope; - this.table = table; - } - - - // ********** package API ********** - - EntityGenerator.Config getEntityConfig() { - return this.scope.getEntityConfig(); - } - - /** - * examples: - * GenTable(FOO) => "FOO_COLLECTION" - * GenTable(foo) => "fooCollection" - * GenTable(Foo) => "FooCollection" - */ - String getCollectionAttributeName() { - String name = this.getName(); - String suffix = this.getEntityConfig().getCollectionAttributeNameSuffix(); - if (StringTools.stringIsUppercase(name)) { // hmmm ~bjv - suffix = '_' + suffix.toUpperCase(); - } - return name + suffix; - } - - /** - * determine whether the table is a "join" table within the table's scope; - * this can be removed, later, if we find another table references the, - * seemingly, join table - * @see #clearJoinTableRelation() (and callers) - */ - void buildJoinTableRelation() { - if ( ! this.table.isPossibleJoinTable()) { - return; // the table must have exactly 2 foreign keys - } - ForeignKey owningFK = this.table.getJoinTableOwningForeignKey(); - GenTable owningGenTable = this.scope.getGenTable(owningFK.getReferencedTable()); - if (owningGenTable == null) { - return; // both tables must be in the scope - } - ForeignKey nonOwningFK = this.table.getJoinTableNonOwningForeignKey(); - GenTable nonOwningGenTable = this.scope.getGenTable(nonOwningFK.getReferencedTable()); - if (nonOwningGenTable == null) { - return; // both tables must be in the scope - } - this.joinTableRelation = new ManyToManyRelation( - this, - owningFK, - owningGenTable, - nonOwningFK, - nonOwningGenTable - ); - } - - /** - * used by the scope to figure out whether "join" tables should be - * converted to "entity" tables - */ - void addReferencedGenTablesTo(Set<GenTable> referencedTables) { - for (Iterator<ForeignKey> stream = this.table.foreignKeys(); stream.hasNext(); ) { - ForeignKey fk = stream.next(); - GenTable genTable = this.scope.getGenTable(fk.getReferencedTable()); - if (genTable != null) { - referencedTables.add(genTable); - } - } - } - - /** - * the scope clears the join table relation if there are any references - * to the join table from other tables in the scope - */ - void clearJoinTableRelation() { - this.joinTableRelation.clear(); - this.joinTableRelation = null; - } - - /** - * find "in-scope" foreign keys - */ - void buildManyToOneRelations() { - for (Iterator<ForeignKey> stream = this.table.foreignKeys(); stream.hasNext(); ) { - ForeignKey fk = stream.next(); - GenTable referencedGenTable = this.scope.getGenTable(fk.getReferencedTable()); - if (referencedGenTable != null) { - this.manyToOneRelations.add(new ManyToOneRelation(this, fk, referencedGenTable)); - } - } - } - - /** - * now that all the relations are in place, we can configure the Java - * attribute names - */ - void buildAttributeNames() { - if ((this.table.primaryKeyColumnsSize() > 1) && this.getEntityConfig().generateEmbeddedIdForCompoundPK()) { - // if we are going to generate an EmbeddedId attribute, add it to - // 'attributeNames' so we don't collide with it later, when generating - // attribute names for the columns etc. - this.configureAttributeName(EMBEDDED_ID_VIRTUAL_COLUMN, this.getEntityConfig().getEmbeddedIdAttributeName()); - } - - // gather up all the table's columns... - Set<Column> columns = CollectionTools.set(this.table.columns(), this.table.columnsSize()); - // ...remove the columns that belong exclusively to many-to-one foreign keys... - this.buildManyToOneAttributeNames(columns); - // ...and use the remaining columns to generate "basic" attribute names - this.buildBasicAttributeNames(columns); - - this.buildOneToManyAttributeNames(); - this.buildOwnedManyToManyAttributeNames(); - this.buildNonOwnedManyToManyAttributeNames(); - } - - /** - * return the columns that are part of the table's primary key - * but are also part of an "in-scope" foreign key - */ - Iterator<Column> readOnlyPrimaryKeyColumns() { - return new FilteringIterator<Column, Column>(this.table.primaryKeyColumns()) { - @Override - protected boolean accept(Column pkColumn) { - return pkColumn.isPartOfForeignKey(); - } - }; - } - - /** - * return the columns that are part of the table's primary key - * but are NOT part of any "in-scope" foreign key - */ - Iterator<Column> writablePrimaryKeyColumns() { - return new FilteringIterator<Column, Column>(this.table.primaryKeyColumns()) { - @Override - protected boolean accept(Column pkColumn) { - return ! pkColumn.isPartOfForeignKey(); - } - }; - } - - /** - * return the columns that NEITHER part of the table's primary key - * NOR part of any foreign key - */ - Iterator<Column> nonPrimaryKeyBasicColumns() { - return new FilteringIterator<Column, Column>(this.table.columns()) { - @Override - protected boolean accept(Column column) { - return ! (column.isPartOfPrimaryKey() || column.isPartOfForeignKey()); - } - }; - } - - Table getTable() { - return this.table; - } - - String getEntityName() { - return this.getEntityConfig().getEntityName(this.table); - } - - boolean isJoinTable() { - return this.joinTableRelation != null; - } - - void addOwnedManyToManyRelation(ManyToManyRelation relation) { - this.ownedManyToManyRelations.add(relation); - } - - void removeOwnedManyToManyRelation(ManyToManyRelation relation) { - this.ownedManyToManyRelations.remove(relation); - } - - void addNonOwnedManyToManyRelation(ManyToManyRelation relation) { - this.nonOwnedManyToManyRelations.add(relation); - } - - void removeNonOwnedManyToManyRelation(ManyToManyRelation relation) { - this.nonOwnedManyToManyRelations.remove(relation); - } - - void addOneToManyRelation(OneToManyRelation relation) { - this.oneToManyRelations.add(relation); - } - - Iterator<ManyToOneRelation> manyToOneRelations() { - return this.manyToOneRelations.iterator(); - } - - Iterator<OneToManyRelation> oneToManyRelations() { - return this.oneToManyRelations.iterator(); - } - - Iterator<ManyToManyRelation> ownedManyToManyRelations() { - return this.ownedManyToManyRelations.iterator(); - } - - Iterator<ManyToManyRelation> nonOwnedManyToManyRelations() { - return this.nonOwnedManyToManyRelations.iterator(); - } - - /** - * the key can be a column or relation or #EMBEDDED_ID_VIRTUAL_COLUMN - */ - private String getAttributeNameFor_(Object o) { - return this.attributeNames.get(o); - } - - /** - * this will return null if we don't want an embedded id attribute - */ - String getAttributeNameForEmbeddedId() { - return this.getAttributeNameFor_(EMBEDDED_ID_VIRTUAL_COLUMN); - } - - String getAttributeNameFor(Column column) { - return this.getAttributeNameFor_(column); - } - - String getAttributeNameFor(ManyToOneRelation relation) { - return this.getAttributeNameFor_(relation); - } - - String getAttributeNameFor(OneToManyRelation relation) { - return this.getAttributeNameFor_(relation); - } - - String getAttributeNameFor(ManyToManyRelation relation) { - return this.getAttributeNameFor_(relation); - } - - String getName() { - return this.table.getName(); - } - - boolean joinTableNameIsDefault() { - return this.table.joinTableNameIsDefault(); - } - - - // ********** internal API ********** - - /** - * while we are figuring out the names for the m:1 attributes, remove from the - * specified set of columns the columns that are only part of the foreign keys - * (leaving the remaining columns for basic attributes) - */ - private void buildManyToOneAttributeNames(Set<Column> columns) { - for (ManyToOneRelation relation : this.manyToOneRelations) { - CollectionTools.removeAll(columns, relation.getForeignKey().nonPrimaryKeyBaseColumns()); - CollectionTools.addAll(this.foreignKeyColumns, relation.getForeignKey().baseColumns()); - relation.setMappedBy(this.configureAttributeName(relation, relation.getAttributeName())); - } - } - - /** - * build a unique attribute name for the specified "basic" columns, - * checking for name collisions - */ - private void buildBasicAttributeNames(Set<Column> columns) { - for (Column column : columns) { - this.configureAttributeName(column, column.getName()); - } - } - - private void buildOneToManyAttributeNames() { - for (OneToManyRelation relation : this.oneToManyRelations) { - this.configureAttributeName(relation, relation.getAttributeName()); - } - } - - private void buildOwnedManyToManyAttributeNames() { - for (ManyToManyRelation relation : this.ownedManyToManyRelations) { - relation.setMappedBy(this.configureAttributeName(relation, relation.getOwnedAttributeName())); - } - } - - private void buildNonOwnedManyToManyAttributeNames() { - for (ManyToManyRelation relation : this.nonOwnedManyToManyRelations) { - this.configureAttributeName(relation, relation.getNonOwnedAttributeName()); - } - } - - /** - * Convert the specified attribute name to something unique for the entity, - * converting it to something Java-like if the config flag is set. - * Store the calculated name so we can get it back later, when we - * are generating source. - */ - private String configureAttributeName(Object o, String attributeName) { - String result = attributeName; - Collection<String> existingAttributeNames = this.attributeNames.values(); - if (this.getEntityConfig().convertToJavaStyleIdentifiers()) { - result = EntityGenTools.convertToUniqueJavaStyleAttributeName(result, existingAttributeNames); - } else { - // first, convert the attribute name to a legal Java identifier - result = NameTools.convertToJavaIdentifier(result); - // then make sure it's unique - result = NameTools.uniqueNameForIgnoreCase(attributeName, existingAttributeNames); - } - this.attributeNames.put(o, result); - return result; - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.table); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JPA.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JPA.java deleted file mode 100644 index 7f601e4253..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JPA.java +++ /dev/null @@ -1,302 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - - -/** - * JPA Java-related stuff (annotations etc.) - * - * Provisional API: This interface is part of an interim API that is still - * under development and expected to change significantly before reaching - * stability. It is available at this early stage to solicit feedback from - * pioneering adopters on the understanding that any code that uses this API - * will almost certainly be broken (repeatedly) as the API evolves. - */ -// TODO move to utility? -@SuppressWarnings("nls") -public interface JPA { - - // JPA package - String PACKAGE = "javax.persistence"; - String PACKAGE_ = PACKAGE + '.'; - - - // ********** API ********** - - // JPA annotations - String ASSOCIATION_OVERRIDE = PACKAGE_ + "AssociationOverride"; - String ASSOCIATION_OVERRIDE__NAME = "name"; - String ASSOCIATION_OVERRIDE__JOIN_COLUMNS = "joinColumns"; - String ASSOCIATION_OVERRIDES = PACKAGE_ + "AssociationOverrides"; - String ASSOCIATION_OVERRIDES__VALUE = "value"; - String ATTRIBUTE_OVERRIDE = PACKAGE_ + "AttributeOverride"; - String ATTRIBUTE_OVERRIDE__NAME = "name"; - String ATTRIBUTE_OVERRIDE__COLUMN = "column"; - String ATTRIBUTE_OVERRIDES = PACKAGE_ + "AttributeOverrides"; - String ATTRIBUTE_OVERRIDES__VALUE = "value"; - String BASIC = PACKAGE_ + "Basic"; - String BASIC__FETCH = "fetch"; - String BASIC__OPTIONAL = "optional"; - String COLUMN = PACKAGE_ + "Column"; - String COLUMN__NAME = "name"; - String COLUMN__UNIQUE = "unique"; - String COLUMN__NULLABLE = "nullable"; - String COLUMN__INSERTABLE = "insertable"; - String COLUMN__UPDATABLE = "updatable"; - String COLUMN__COLUMN_DEFINITION = "columnDefinition"; - String COLUMN__TABLE = "table"; - String COLUMN__LENGTH = "length"; - String COLUMN__PRECISION = "precision"; - String COLUMN__SCALE = "scale"; - String COLUMN_RESULT = PACKAGE_ + "ColumnResult"; - String COLUMN_RESULT__NAME = "name"; - String DISCRIMINATOR_COLUMN = PACKAGE_ + "DiscriminatorColumn"; - String DISCRIMINATOR_COLUMN__NAME = "name"; - String DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE = "discriminatorType"; - String DISCRIMINATOR_COLUMN__COLUMN_DEFINITION = "columnDefinition"; - String DISCRIMINATOR_COLUMN__LENGTH = "length"; - String DISCRIMINATOR_VALUE = PACKAGE_ + "DiscriminatorValue"; - String DISCRIMINATOR_VALUE__VALUE = "value"; - String EMBEDDABLE = PACKAGE_ + "Embeddable"; - String EMBEDDED = PACKAGE_ + "Embedded"; - String EMBEDDED_ID = PACKAGE_ + "EmbeddedId"; - String ENTITY = PACKAGE_ + "Entity"; - String ENTITY__NAME = "name"; - String ENTITY_LISTENERS = PACKAGE_ + "EntityListeners"; - String ENTITY_LISTENERS__VALUE = "value"; - String ENTITY_RESULT = PACKAGE_ + "EntityResult"; - String ENTITY_RESULT__ENTITY_CLASS = "entityClass"; - String ENTITY_RESULT__FIELDS = "fields"; - String ENTITY_RESULT__DISCRIMINATOR_COLUMN = "discriminatorColumn"; - String ENUMERATED = PACKAGE_ + "Enumerated"; - String ENUMERATED__VALUE = "value"; - String EXCLUDE_DEFAULT_LISTENERS = PACKAGE_ + "ExcludeDefaultListeners"; - String EXCLUDE_SUPERCLASS_LISTENERS = PACKAGE_ + "ExcludeSuperclassListeners"; - String FIELD_RESULT = PACKAGE_ + "FieldResult"; - String FIELD_RESULT__NAME = "name"; - String FIELD_RESULT__COLUMN = "column"; - String FLUSH_MODE = PACKAGE_ + "FlushMode"; - String FLUSH_MODE__VALUE = "value"; - String GENERATED_VALUE = PACKAGE_ + "GeneratedValue"; - String GENERATED_VALUE__STRATEGY = "strategy"; - String GENERATED_VALUE__GENERATOR = "generator"; - String ID = PACKAGE_ + "Id"; - String ID_CLASS = PACKAGE_ + "IdClass"; - String ID_CLASS__VALUE = "value"; - String INHERITANCE = PACKAGE_ + "Inheritance"; - String INHERITANCE__STRATEGY = "strategy"; - String JOIN_COLUMN = PACKAGE_ + "JoinColumn"; - String JOIN_COLUMN__NAME = "name"; - String JOIN_COLUMN__REFERENCED_COLUMN_NAME = "referencedColumnName"; - String JOIN_COLUMN__UNIQUE = "unique"; - String JOIN_COLUMN__NULLABLE = "nullable"; - String JOIN_COLUMN__INSERTABLE = "insertable"; - String JOIN_COLUMN__UPDATABLE = "updatable"; - String JOIN_COLUMN__COLUMN_DEFINITION = "columnDefinition"; - String JOIN_COLUMN__TABLE = "table"; - String JOIN_COLUMNS = PACKAGE_ + "JoinColumns"; - String JOIN_COLUMNS__VALUE = "value"; - String JOIN_TABLE = PACKAGE_ + "JoinTable"; - String JOIN_TABLE__NAME = "name"; - String JOIN_TABLE__CATALOG = "catalog"; - String JOIN_TABLE__SCHEMA = "schema"; - String JOIN_TABLE__JOIN_COLUMNS = "joinColumns"; - String JOIN_TABLE__INVERSE_JOIN_COLUMNS = "inverseJoinColumns"; - String JOIN_TABLE__UNIQUE_CONSTRAINTS = "uniqueConstraints"; - String LOB = PACKAGE_ + "Lob"; - String MANY_TO_MANY = PACKAGE_ + "ManyToMany"; - String MANY_TO_MANY__TARGET_ENTITY = "targetEntity"; - String MANY_TO_MANY__CASCADE = "cascade"; - String MANY_TO_MANY__FETCH = "fetch"; - String MANY_TO_MANY__MAPPED_BY = "mappedBy"; - String MANY_TO_ONE = PACKAGE_ + "ManyToOne"; - String MANY_TO_ONE__TARGET_ENTITY = "targetEntity"; - String MANY_TO_ONE__CASCADE = "cascade"; - String MANY_TO_ONE__FETCH = "fetch"; - String MANY_TO_ONE__OPTIONAL = "optional"; - String MAP_KEY = PACKAGE_ + "MapKey"; - String MAP_KEY__NAME = "name"; - String MAPPED_SUPERCLASS = PACKAGE_ + "MappedSuperclass"; - String NAMED_NATIVE_QUERIES = PACKAGE_ + "NamedNativeQueries"; - String NAMED_NATIVE_QUERIES__VALUE = "value"; - String NAMED_NATIVE_QUERY = PACKAGE_ + "NamedNativeQuery"; - String NAMED_NATIVE_QUERY__NAME = "name"; - String NAMED_NATIVE_QUERY__QUERY = "query"; - String NAMED_NATIVE_QUERY__HINTS = "hints"; - String NAMED_NATIVE_QUERY__RESULT_CLASS = "resultClass"; - String NAMED_NATIVE_QUERY__RESULT_SET_MAPPING = "resultSetMapping"; - String NAMED_QUERIES = PACKAGE_ + "NamedQueries"; - String NAMED_QUERIES__VALUE = "value"; - String NAMED_QUERY = PACKAGE_ + "NamedQuery"; - String NAMED_QUERY__NAME = "name"; - String NAMED_QUERY__QUERY = "query"; - String NAMED_QUERY__HINTS = "hints"; - String ONE_TO_MANY = PACKAGE_ + "OneToMany"; - String ONE_TO_MANY__TARGET_ENTITY = "targetEntity"; - String ONE_TO_MANY__CASCADE = "cascade"; - String ONE_TO_MANY__FETCH = "fetch"; - String ONE_TO_MANY__MAPPED_BY = "mappedBy"; - String ONE_TO_ONE = PACKAGE_ + "OneToOne"; - String ONE_TO_ONE__TARGET_ENTITY = "targetEntity"; - String ONE_TO_ONE__CASCADE = "cascade"; - String ONE_TO_ONE__FETCH = "fetch"; - String ONE_TO_ONE__OPTIONAL = "optional"; - String ONE_TO_ONE__MAPPED_BY = "mappedBy"; - String ORDER_BY = PACKAGE_ + "OrderBy"; - String ORDER_BY__VALUE = "value"; - String PERSISTENCE_CONTEXT = PACKAGE_ + "PersistenceContext"; - String PERSISTENCE_CONTEXT__NAME = "name"; - String PERSISTENCE_CONTEXT__UNIT_NAME = "unitName"; - String PERSISTENCE_CONTEXT__TYPE = "type"; - String PERSISTENCE_CONTEXTS = PACKAGE_ + "PersistenceContexts"; - String PERSISTENCE_CONTEXTS__VALUE = "value"; - String PERSISTENCE_UNIT = PACKAGE_ + "XmlPersistenceUnit"; - String PERSISTENCE_UNIT__NAME = "name"; - String PERSISTENCE_UNIT__UNIT_NAME = "unitName"; - String PERSISTENCE_UNITS = PACKAGE_ + "PersistenceUnits"; - String PERSISTENCE_UNITS__VALUE = "value"; - String POST_LOAD = PACKAGE_ + "PostLoad"; - String POST_PERSIST = PACKAGE_ + "PostPersist"; - String POST_REMOVE = PACKAGE_ + "PostRemove"; - String POST_UPDATE = PACKAGE_ + "PostUpdate"; - String PRE_PERSIST = PACKAGE_ + "PrePersist"; - String PRE_REMOVE = PACKAGE_ + "PreRemove"; - String PRE_UPDATE = PACKAGE_ + "PreUpdate"; - String PRIMARY_KEY_JOIN_COLUMN = PACKAGE_ + "PrimaryKeyJoinColumn"; - String PRIMARY_KEY_JOIN_COLUMN__NAME = "name"; - String PRIMARY_KEY_JOIN_COLUMN__REFERENCED_COLUMN_NAME = "referencedColumnName"; - String PRIMARY_KEY_JOIN_COLUMN__COLUMN_DEFINITION = "columnDefinition"; - String PRIMARY_KEY_JOIN_COLUMNS = PACKAGE_ + "PrimaryKeyJoinColumns"; - String PRIMARY_KEY_JOIN_COLUMNS__VALUE = "value"; - String QUERY_HINT = PACKAGE_ + "QueryHint"; - String QUERY_HINT__NAME = "name"; - String QUERY_HINT__VALUE = "value"; - String SECONDARY_TABLE = PACKAGE_ + "SecondaryTable"; - String SECONDARY_TABLE__NAME = "name"; - String SECONDARY_TABLE__CATALOG = "catalog"; - String SECONDARY_TABLE__SCHEMA = "schema"; - String SECONDARY_TABLE__PK_JOIN_COLUMNS = "pkJoinColumns"; - String SECONDARY_TABLE__UNIQUE_CONSTRAINTS = "uniqueConstraints"; - String SECONDARY_TABLES = PACKAGE_ + "SecondaryTables"; - String SECONDARY_TABLES__VALUE = "value"; - String SEQUENCE_GENERATOR = PACKAGE_ + "SequenceGenerator"; - String SEQUENCE_GENERATOR__NAME = "name"; - String SEQUENCE_GENERATOR__SEQUENCE_NAME = "sequenceName"; - String SEQUENCE_GENERATOR__INITIAL_VALUE = "initialValue"; - String SEQUENCE_GENERATOR__ALLOCATION_SIZE = "allocationSize"; - String SQL_RESULT_SET_MAPPING = PACKAGE_ + "SqlResultSetMapping"; - String SQL_RESULT_SET_MAPPING__NAME = "name"; - String SQL_RESULT_SET_MAPPING__ENTITIES = "entities"; - String SQL_RESULT_SET_MAPPING__COLUMNS = "columns"; - String TABLE = PACKAGE_ + "Table"; - String TABLE__NAME = "name"; - String TABLE__CATALOG = "catalog"; - String TABLE__SCHEMA = "schema"; - String TABLE__UNIQUE_CONSTRAINTS = "uniqueConstraints"; - String TABLE_GENERATOR = PACKAGE_ + "TableGenerator"; - String TABLE_GENERATOR__NAME = "name"; - String TABLE_GENERATOR__TABLE = "table"; - String TABLE_GENERATOR__CATALOG = "catalog"; - String TABLE_GENERATOR__SCHEMA = "schema"; - String TABLE_GENERATOR__PK_COLUMN_NAME = "pkColumnName"; - String TABLE_GENERATOR__VALUE_COLUMN_NAME = "valueColumnName"; - String TABLE_GENERATOR__PK_COLUMN_VALUE = "pkColumnValue"; - String TABLE_GENERATOR__INITIAL_VALUE = "initialValue"; - String TABLE_GENERATOR__ALLOCATION_SIZE = "allocationSize"; - String TABLE_GENERATOR__UNIQUE_CONSTRAINTS = "uniqueConstraints"; - String TEMPORAL = PACKAGE_ + "Temporal"; - String TEMPORAL__VALUE = "value"; - String TRANSIENT = PACKAGE_ + "Transient"; - String UNIQUE_CONSTRAINT = PACKAGE_ + "UniqueConstraint"; - String UNIQUE_CONSTRAINT__COLUMN_NAMES = "columnNames"; - String VERSION = PACKAGE_ + "Version"; - - // JPA enums - String GENERATION_TYPE = PACKAGE_ + "GenerationType"; - String GENERATION_TYPE_ = GENERATION_TYPE + '.'; - String GENERATION_TYPE__AUTO = GENERATION_TYPE_ + "AUTO"; - String GENERATION_TYPE__IDENTITY = GENERATION_TYPE_ + "IDENTITY"; - String GENERATION_TYPE__SEQUENCE = GENERATION_TYPE_ + "SEQUENCE"; - String GENERATION_TYPE__TABLE = GENERATION_TYPE_ + "TABLE"; - - String CASCADE_TYPE = PACKAGE_ + "CascadeType"; - String CASCADE_TYPE_ = CASCADE_TYPE + '.'; - String CASCADE_TYPE__ALL = CASCADE_TYPE_ + "ALL"; - String CASCADE_TYPE__MERGE = CASCADE_TYPE_ + "MERGE"; - String CASCADE_TYPE__PERSIST = CASCADE_TYPE_ + "PERSIST"; - String CASCADE_TYPE__REFRESH = CASCADE_TYPE_ + "REFRESH"; - String CASCADE_TYPE__REMOVE = CASCADE_TYPE_ + "REMOVE"; - - String DISCRIMINATOR_TYPE = PACKAGE_ + "DiscriminatorType"; - String DISCRIMINATOR_TYPE_ = DISCRIMINATOR_TYPE + '.'; - String DISCRIMINATOR_TYPE__CHAR = DISCRIMINATOR_TYPE_ + "CHAR"; - String DISCRIMINATOR_TYPE__INTEGER = DISCRIMINATOR_TYPE_ + "INTEGER"; - String DISCRIMINATOR_TYPE__STRING = DISCRIMINATOR_TYPE_ + "STRING"; - - String ENUM_TYPE = PACKAGE_ + "EnumType"; - String ENUM_TYPE_ = ENUM_TYPE + '.'; - String ENUM_TYPE__ORDINAL = ENUM_TYPE_ + "ORDINAL"; - String ENUM_TYPE__STRING = ENUM_TYPE_ + "STRING"; - - String FETCH_TYPE = PACKAGE_ + "FetchType"; - String FETCH_TYPE_ = FETCH_TYPE + '.'; - String FETCH_TYPE__EAGER = FETCH_TYPE_ + "EAGER"; - String FETCH_TYPE__LAZY = FETCH_TYPE_ + "LAZY"; - - String FLUSH_MODE_TYPE = PACKAGE_ + "FlushModeType"; - String FLUSH_MODE_TYPE_ = FLUSH_MODE_TYPE + '.'; - String FLUSH_MODE_TYPE__AUTO = FLUSH_MODE_TYPE_ + "AUTO"; - String FLUSH_MODE_TYPE__COMMIT = FLUSH_MODE_TYPE_ + "COMMIT"; - - String INHERITANCE_TYPE = PACKAGE_ + "InheritanceType"; - String INHERITANCE_TYPE_ = INHERITANCE_TYPE + '.'; - String INHERITANCE_TYPE__JOINED = INHERITANCE_TYPE_ + "JOINED"; - String INHERITANCE_TYPE__SINGLE_TABLE = INHERITANCE_TYPE_ + "SINGLE_TABLE"; - String INHERITANCE_TYPE__TABLE_PER_CLASS = INHERITANCE_TYPE_ + "TABLE_PER_CLASS"; - - String PERSISTENCE_CONTEXT_TYPE = PACKAGE_ + "PersistenceContextType"; - String PERSISTENCE_CONTEXT_TYPE_ = PERSISTENCE_CONTEXT_TYPE + '.'; - String PERSISTENCE_CONTEXT_TYPE__EXTENDED = PERSISTENCE_CONTEXT_TYPE_ + "EXTENDED"; - String PERSISTENCE_CONTEXT_TYPE__TRANSACTION = PERSISTENCE_CONTEXT_TYPE_ + "TRANSACTION"; - - String TEMPORAL_TYPE = PACKAGE_ + "TemporalType"; - String TEMPORAL_TYPE_ = TEMPORAL_TYPE + '.'; - String TEMPORAL_TYPE__DATE = TEMPORAL_TYPE_ + "DATE"; - String TEMPORAL_TYPE__TIME = TEMPORAL_TYPE_ + "TIME"; - String TEMPORAL_TYPE__TIMESTAMP = TEMPORAL_TYPE_ + "TIMESTAMP"; - - // JPA interfaces - String ENTITY_MANAGER = PACKAGE_ + "EntityManager"; - String ENTITY_MANAGER_FACTORY = PACKAGE_ + "EntityManagerFactory"; - String ENTITY_TRANSACTION = PACKAGE_ + "EntityTransaction"; - String INSTRUMENTABLE_CLASS_LOADER = PACKAGE_ + "InstrumentableClassLoader"; - String QUERY = PACKAGE_ + "Query"; - - // JPA classes - String PERSISTENCE = PACKAGE_ + "XmlPersistence"; - - // JPA exceptions - String NON_UNIQUE_RESULT_EXCEPTION = PACKAGE_ + "NonUniqueResultException"; - String OBJECT_NOT_FOUND_EXCEPTION = PACKAGE_ + "ObjectNotFoundException"; - String PERSISTENCE_EXCEPTION = PACKAGE_ + "PersistenceException"; - - - // ********** SPI ********** - - // JPA SPI package - String SPI_PACKAGE = PACKAGE_ + "spi"; - String SPI_PACKAGE_ = SPI_PACKAGE + '.'; - - // JPA SPI interfaces - String ENTITY_MANAGER_FACTORY_PROVIDER = SPI_PACKAGE_ + "EntityManagerFactoryProvider"; - String PERSISTENCE_INFO = SPI_PACKAGE_ + "PersistenceInfo"; - String PERSISTENCE_PROVIDER = SPI_PACKAGE_ + "PersistenceProvider"; - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenMessages.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenMessages.java deleted file mode 100644 index bc3bbf0d38..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/JptGenMessages.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import org.eclipse.osgi.util.NLS; - -/** - * Localized messages used by Dali entity generation. - */ -class JptGenMessages { - - public static String PackageGenerator_taskName; - public static String GenScope_taskName; - public static String EntityGenerator_taskName; - - private static final String BUNDLE_NAME = "jpt_gen"; //$NON-NLS-1$ - private static final Class<?> BUNDLE_CLASS = JptGenMessages.class; - static { - NLS.initializeMessages(BUNDLE_NAME, BUNDLE_CLASS); - } - - private JptGenMessages() { - throw new UnsupportedOperationException(); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToManyRelation.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToManyRelation.java deleted file mode 100644 index 12631a5bf0..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToManyRelation.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import org.eclipse.jpt.db.ForeignKey; -import org.eclipse.jpt.utility.internal.StringTools; - -/** - * This object is shared by the two gen tables that make up the relation. - * Upon construction, 'mappedBy' will be 'null'. The first gen table to be - * used to generate an entity will fill in 'mappedBy' with the appropriate - * attribute (field/property) name. - */ -class ManyToManyRelation { - private final GenTable joinGenTable; - private final ForeignKey owningForeignKey; - private final GenTable owningGenTable; - private final ForeignKey nonOwningForeignKey; - private final GenTable nonOwningGenTable; - private String mappedBy; // set while generating entities - - - ManyToManyRelation( - GenTable joinGenTable, - ForeignKey owningForeignKey, - GenTable owningGenTable, - ForeignKey nonOwningForeignKey, - GenTable nonOwningGenTable - ) { - super(); - this.joinGenTable = joinGenTable; - - this.owningForeignKey = owningForeignKey; - this.owningGenTable = owningGenTable; - owningGenTable.addOwnedManyToManyRelation(this); - - this.nonOwningForeignKey = nonOwningForeignKey; - this.nonOwningGenTable = nonOwningGenTable; - nonOwningGenTable.addNonOwnedManyToManyRelation(this); - } - - GenTable getJoinGenTable() { - return this.joinGenTable; - } - - ForeignKey getOwningForeignKey() { - return this.owningForeignKey; - } - - GenTable getOwningGenTable() { - return this.owningGenTable; - } - - ForeignKey getNonOwningForeignKey() { - return this.nonOwningForeignKey; - } - - GenTable getNonOwningGenTable() { - return this.nonOwningGenTable; - } - - String getOwnedAttributeName() { - return this.nonOwningGenTable.getCollectionAttributeName(); - } - - String getNonOwnedAttributeName() { - return this.owningGenTable.getCollectionAttributeName(); - } - - /** - * the scope clears the join table relation if there are any references - * to the join table - */ - void clear() { - this.owningGenTable.removeOwnedManyToManyRelation(this); - this.nonOwningGenTable.removeNonOwnedManyToManyRelation(this); - } - - String getMappedBy() { - return this.mappedBy; - } - - void setMappedBy(String mappedBy) { - this.mappedBy = mappedBy; - } - - String getOwningEntityName() { - return this.owningGenTable.getEntityName(); - } - - String getNonOwningEntityName() { - return this.nonOwningGenTable.getEntityName(); - } - - boolean joinTableNameIsDefault() { - return this.joinGenTable.joinTableNameIsDefault(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.joinGenTable); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToOneRelation.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToOneRelation.java deleted file mode 100644 index b69e402a06..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/ManyToOneRelation.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import org.eclipse.jpt.db.ForeignKey; -import org.eclipse.jpt.utility.internal.StringTools; - -/** - * This object is held by the "base" gen table and, indirectly via a - * one-to-many relation, the "referenced" gen table. - * The "mapped by" attribute (field/property) name is set while the - * "base" table is calculating its attribute names. - */ -class ManyToOneRelation { - private final GenTable baseGenTable; // the "many" side (e.g. Detail) - private final ForeignKey foreignKey; - private final GenTable referencedGenTable; // the "one" side (e.g. Master) - private String mappedBy; // set while generating entities; used by partner one-to-many relation - - - ManyToOneRelation( - GenTable baseGenTable, - ForeignKey foreignKey, - GenTable referencedGenTable - ) { - super(); - this.baseGenTable = baseGenTable; - this.foreignKey = foreignKey; - this.referencedGenTable = referencedGenTable; - referencedGenTable.addOneToManyRelation(new OneToManyRelation(this)); - } - - GenTable getBaseGenTable() { - return this.baseGenTable; - } - - ForeignKey getForeignKey() { - return this.foreignKey; - } - - GenTable getReferencedGenTable() { - return this.referencedGenTable; - } - - String getAttributeName() { - return this.foreignKey.getAttributeName(); - } - - String getMappedBy() { - return this.mappedBy; - } - - void setMappedBy(String mappedBy) { - this.mappedBy = mappedBy; - } - - String getBaseEntityName() { - return this.baseGenTable.getEntityName(); - } - - String getReferencedEntityName() { - return this.referencedGenTable.getEntityName(); - } - - String getBaseGenTableCollectionAttributeName() { - return this.baseGenTable.getCollectionAttributeName(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.foreignKey); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OneToManyRelation.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OneToManyRelation.java deleted file mode 100644 index 8d832ccd1c..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/OneToManyRelation.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import org.eclipse.jpt.utility.internal.StringTools; - -/** - * This object is the inverse of the corresponding many-to-one relation. - */ -class OneToManyRelation { - private final ManyToOneRelation manyToOneRelation; - - - OneToManyRelation(ManyToOneRelation manyToOneRelation) { - super(); - this.manyToOneRelation = manyToOneRelation; - } - - ManyToOneRelation getManyToOneRelation() { - return this.manyToOneRelation; - } - - String getAttributeName() { - return this.manyToOneRelation.getBaseGenTableCollectionAttributeName(); - } - - String getMappedBy() { - return this.manyToOneRelation.getMappedBy(); - } - - String getReferencedEntityName() { - return this.manyToOneRelation.getBaseEntityName(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.manyToOneRelation); - } - -} diff --git a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java b/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java deleted file mode 100644 index 0aa0b5ed7e..0000000000 --- a/jpa/plugins/org.eclipse.jpt.gen/src/org/eclipse/jpt/gen/internal/PackageGenerator.java +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.gen.internal; - -import java.util.Iterator; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.SubMonitor; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jpt.utility.internal.StringTools; - -/** - * This generator will generate a package of entities for a set of tables. - */ -public class PackageGenerator { - private final Config config; - private final EntityGenerator.Config entityConfig; - private final GenScope scope; - - - // ********** public API ********** - - public static void generateEntities( - Config config, - EntityGenerator.Config entityConfig, - IProgressMonitor progressMonitor - ) { - if ((config == null) || (entityConfig == null)) { - throw new NullPointerException(); - } - SubMonitor sm = SubMonitor.convert(progressMonitor, JptGenMessages.PackageGenerator_taskName, 100); - new PackageGenerator(config, entityConfig, sm.newChild(10)).generateEntities(sm.newChild(90)); - } - - - // ********** construction/initialization ********** - - private PackageGenerator( - Config config, - EntityGenerator.Config entityConfig, - IProgressMonitor progressMonitor - ) { - super(); - this.config = config; - this.entityConfig = entityConfig; - this.scope = new GenScope(entityConfig, progressMonitor); - } - - - // ********** generation ********** - - private void generateEntities(IProgressMonitor progressMonitor) { - SubMonitor sm = SubMonitor.convert(progressMonitor, this.scope.entityTablesSize()); - for (Iterator<GenTable> stream = this.scope.entityGenTables(); stream.hasNext(); ) { - this.checkCanceled(sm); - this.generateEntity(stream.next(), sm.newChild(1)); - } - } - - private void generateEntity(GenTable genTable, IProgressMonitor progressMonitor) { - EntityGenerator.generateEntity( - this.entityConfig, - this.config.getPackageFragment(), - genTable, - progressMonitor - ); - } - - private void checkCanceled(IProgressMonitor progressMonitor) { - if (progressMonitor.isCanceled()) { - throw new OperationCanceledException(); - } - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.scope); - } - - - // ********** config ********** - - public static class Config { - private IPackageFragment packageFragment; - - public IPackageFragment getPackageFragment() { - return this.packageFragment; - } - - public void setPackageFragment(IPackageFragment packageFragment) { - this.packageFragment = packageFragment; - } - - } - -} |