You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by tf...@apache.org on 2013/08/25 23:01:06 UTC
svn commit: r1517382 - in /db/torque/torque4/trunk/torque-templates/src/main:
java/org/apache/torque/templates/
java/org/apache/torque/templates/transformer/om/
resources/org/apache/torque/templates/doc/templates/
resources/org/apache/torque/templates/...
Author: tfischer
Date: Sun Aug 25 21:01:05 2013
New Revision: 1517382
URL: http://svn.apache.org/r1517382
Log:
TORQUE-293 generate correct joinGetters for database objects
Added:
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMJoinGetterTransformer.java
Removed:
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/doc/templates/
Modified:
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TemplateOptionName.java
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/JavaFieldAttributeName.java
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMColumnTransformer.java
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableChildElementName.java
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/options.properties
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/dbObject.xml
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/joinGetterReferencingObject.vm
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/general/getter.vm
Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TemplateOptionName.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TemplateOptionName.java?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TemplateOptionName.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TemplateOptionName.java Sun Aug 25 21:01:05 2013
@@ -219,7 +219,23 @@ public enum TemplateOptionName implement
* The name of the option for the mode used in optimistic locking.
* The value must be one of selectForUpdate, simpleSelect.
*/
- OM_OPTIMISTIC_LOCKING_MODE("torque.om.optimisticLocking.mode");
+ OM_OPTIMISTIC_LOCKING_MODE("torque.om.optimisticLocking.mode"),
+
+ /**
+ * Whether joinGetter methods are generated in the data object classes
+ * which fetch related objects in one database query.
+ */
+ OM_GENERATE_JOIN_GETTERS("torque.om.complexObjectModel.generateJoinGetters"),
+
+ /**
+ * The separator in the joinGetter Methods between the two name parts.
+ */
+ OM_JOIN_GETTER_SEPARATOR("torque.om.complexObjectModel.joinGetterSeparator"),
+
+ /**
+ * The visibility of the joinGetter methods.
+ */
+ OM_JOIN_GETTER_VISIBILITY("torque.om.complexObjectModel.joinGetterVisibility");
/**
* The fully qualified name of the option.
@@ -231,7 +247,7 @@ public enum TemplateOptionName implement
*
* @param name the fully qualified name of the option, not null.
*/
- private TemplateOptionName(String name)
+ private TemplateOptionName(final String name)
{
this.name = name;
}
@@ -260,8 +276,8 @@ public enum TemplateOptionName implement
*
* @throws SourceTransformerException if a required option is not set.
*/
- public static void checkRequiredOptions(ControllerState controllerState,
- TemplateOptionName... requiredOptions)
+ public static void checkRequiredOptions(final ControllerState controllerState,
+ final TemplateOptionName... requiredOptions)
throws SourceTransformerException
{
for (TemplateOptionName templateOption : requiredOptions)
Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/JavaFieldAttributeName.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/JavaFieldAttributeName.java?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/JavaFieldAttributeName.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/JavaFieldAttributeName.java Sun Aug 25 21:01:05 2013
@@ -99,7 +99,7 @@ public enum JavaFieldAttributeName imple
/**
* The access modifier (e.g. "public" ...) for the getter method
**/
- GETTER_ACCESS_MODIFIER("getterAccessModifer"),
+ GETTER_ACCESS_MODIFIER("getterAccessModifier"),
/**
* The access modifier (e.g. "public" ...) for the setter method
@@ -145,7 +145,7 @@ public enum JavaFieldAttributeName imple
*
* @param name the name of the source element attribute, not null.
*/
- private JavaFieldAttributeName(String name)
+ private JavaFieldAttributeName(final String name)
{
this.name = name;
}
Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMColumnTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMColumnTransformer.java?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMColumnTransformer.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMColumnTransformer.java Sun Aug 25 21:01:05 2013
@@ -99,9 +99,9 @@ public class OMColumnTransformer
}
public void transform(
- SourceElement columnElement,
- ControllerState controllerState,
- int columnPosition)
+ final SourceElement columnElement,
+ final ControllerState controllerState,
+ final int columnPosition)
throws SourceTransformerException
{
checkElementName(columnElement);
@@ -158,7 +158,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setJavaTypeAttribute(SourceElement columnElement)
+ protected void setJavaTypeAttribute(final SourceElement columnElement)
{
if (columnElement.getAttribute(TorqueSchemaAttributeName.JAVA_TYPE)
!= null)
@@ -184,7 +184,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setAttributeDefaultValues(SourceElement columnElement)
+ protected void setAttributeDefaultValues(final SourceElement columnElement)
{
// set autoincrement attribute
if (columnElement.getAttribute(TorqueSchemaAttributeName.AUTO_INCREMENT)
@@ -251,8 +251,8 @@ public class OMColumnTransformer
}
protected void setDomainAttributes(
- SourceElement columnElement,
- ControllerState controllerState)
+ final SourceElement columnElement,
+ final ControllerState controllerState)
throws SourceTransformerException
{
SqlType domain = SchemaTypeHelper.getDomain(
@@ -295,12 +295,12 @@ public class OMColumnTransformer
}
/**
- * Sets the attributes getterAccessModifer and setterAccessModifer
+ * Sets the attributes getterAccessModifier and setterAccessModifer
* on the column element.
*
* @param columnElement the column element, not null.
*/
- protected void setAccessModifierAttributes(SourceElement columnElement)
+ protected void setAccessModifierAttributes(final SourceElement columnElement)
{
boolean isProtected = "true".equals(
columnElement.getAttribute(
@@ -333,8 +333,8 @@ public class OMColumnTransformer
* @return the java type of the column
*/
protected JavaType getFieldJavaType(
- SourceElement columnElement,
- SchemaType schemaType)
+ final SourceElement columnElement,
+ final SchemaType schemaType)
throws SourceTransformerException
{
JavaType result;
@@ -368,7 +368,7 @@ public class OMColumnTransformer
*
* @throws IllegalArgumentException if the element name is wrong.
*/
- protected void checkElementName(SourceElement columnElement)
+ protected void checkElementName(final SourceElement columnElement)
{
if (!TorqueSchemaElementName.COLUMN.getName().equals(
columnElement.getName()))
@@ -385,7 +385,7 @@ public class OMColumnTransformer
*
* @throws SourceTransformerException if the name attribute does not exist.
*/
- protected void checkColumnNameExists(SourceElement columnElement)
+ protected void checkColumnNameExists(final SourceElement columnElement)
throws SourceTransformerException
{
String columnName
@@ -407,7 +407,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setJavaNameAttribute(SourceElement columnElement)
+ protected void setJavaNameAttribute(final SourceElement columnElement)
{
if (columnElement.getAttribute(TorqueSchemaAttributeName.JAVA_NAME)
!= null)
@@ -429,7 +429,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setFieldNameAttribute(SourceElement columnElement)
+ protected void setFieldNameAttribute(final SourceElement columnElement)
{
if (columnElement.getAttribute(JavaFieldAttributeName.FIELD_NAME)
!= null)
@@ -451,7 +451,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setPeerColumnNameAttribute(SourceElement columnElement)
+ protected void setPeerColumnNameAttribute(final SourceElement columnElement)
{
if (columnElement.getAttribute(ColumnAttributeName.PEER_COLUMN_NAME)
!= null)
@@ -476,7 +476,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setQualifiedColumnNameAttribute(SourceElement columnElement)
+ protected void setQualifiedColumnNameAttribute(final SourceElement columnElement)
{
if (columnElement.getAttribute(ColumnAttributeName.QUALIFIED_COLUMN_NAME)
!= null)
@@ -504,9 +504,9 @@ public class OMColumnTransformer
* @param controllerState the controller state, not null.
*/
protected void setGetterNameAttribute(
- SourceElement columnElement,
- JavaType javaType,
- ControllerState controllerState)
+ final SourceElement columnElement,
+ final JavaType javaType,
+ final ControllerState controllerState)
{
if (columnElement.getAttribute(JavaFieldAttributeName.GETTER_NAME)
!= null)
@@ -531,7 +531,7 @@ public class OMColumnTransformer
*
* @param columnElement the column element, not null.
*/
- protected void setSetterNameAttribute(SourceElement columnElement)
+ protected void setSetterNameAttribute(final SourceElement columnElement)
{
if (columnElement.getAttribute(JavaFieldAttributeName.SETTER_NAME)
!= null)
@@ -555,8 +555,8 @@ public class OMColumnTransformer
* column, not null.
*/
protected void setPrimitiveTypeAttribute(
- SourceElement columnElement,
- JavaType javaType)
+ final SourceElement columnElement,
+ final JavaType javaType)
{
if (columnElement.getAttribute(ColumnAttributeName.PRIMITIVE_TYPE)
!= null)
@@ -578,8 +578,8 @@ public class OMColumnTransformer
* column, not null.
*/
protected void setNumberTypeAttribute(
- SourceElement columnElement,
- JavaType javaType)
+ final SourceElement columnElement,
+ final JavaType javaType)
{
if (columnElement.getAttribute(ColumnAttributeName.NUMBER_TYPE)
!= null)
@@ -606,9 +606,9 @@ public class OMColumnTransformer
* is encountered
*/
protected void setDefaultValueAttribute(
- SourceElement columnElement,
- JavaType javaType,
- ControllerState controllerState)
+ final SourceElement columnElement,
+ final JavaType javaType,
+ final ControllerState controllerState)
throws SourceTransformerException
{
// special case inheritance by class name
@@ -677,10 +677,10 @@ public class OMColumnTransformer
* @throws SourceTransformerException if an illegal default value is used.
*/
protected String getDefaultValueWithDefaultSet(
- JavaType javaType,
- String defaultValue,
- boolean useDatabaseDefaultValue,
- SourceElement columnElement)
+ final JavaType javaType,
+ final String defaultValue,
+ final boolean useDatabaseDefaultValue,
+ final SourceElement columnElement)
throws SourceTransformerException
{
boolean primitiveFieldType = javaType.isPrimitive();
@@ -842,7 +842,7 @@ public class OMColumnTransformer
*
* @throws SourceTransformerException if the date cannot be parsed.
*/
- public static Date getDefaultValueAsDate(String defaultValue)
+ public static Date getDefaultValueAsDate(final String defaultValue)
throws SourceTransformerException
{
try
@@ -871,7 +871,7 @@ public class OMColumnTransformer
*
* @return The java default value.
*/
- protected String getDefaultValueWithoutDefaultSet(JavaType javaType)
+ protected String getDefaultValueWithoutDefaultSet(final JavaType javaType)
throws SourceTransformerException
{
String fieldDefaultValue;
@@ -930,7 +930,7 @@ public class OMColumnTransformer
* @param columnElement the column element, not null.
*/
protected void setUseDatabaseDefaultValueAttribute(
- SourceElement columnElement)
+ final SourceElement columnElement)
{
if (columnElement.getAttribute(
TorqueSchemaAttributeName.USE_DATABASE_DEFAULT_VALUE)
@@ -953,8 +953,8 @@ public class OMColumnTransformer
* @param schemaType the schema type of the column, not null.
*/
protected void setResultSetGetterAttribute(
- SourceElement columnElement,
- SchemaType schemaType)
+ final SourceElement columnElement,
+ final SchemaType schemaType)
{
ResultSetGetter resultSetGetter = null;
Object originalValue = columnElement.getAttribute(
@@ -989,8 +989,8 @@ public class OMColumnTransformer
* @param schemaType the schema type of the column, not null.
*/
protected void setSampleObjectAttribute(
- SourceElement columnElement,
- SchemaType schemaType)
+ final SourceElement columnElement,
+ final SchemaType schemaType)
{
if (columnElement.getAttribute(ColumnAttributeName.SAMPLE_OBJECT)
!= null)
Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMForeignKeyTransformer.java Sun Aug 25 21:01:05 2013
@@ -65,8 +65,8 @@ import org.apache.torque.templates.Torqu
public class OMForeignKeyTransformer
{
public void transform(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
throws SourceTransformerException
{
if (!TorqueSchemaElementName.FOREIGN_KEY.getName().equals(
@@ -126,8 +126,8 @@ public class OMForeignKeyTransformer
* @throws SourceTransformerException if the transformation fails
*/
public void transformSecondPass(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
throws SourceTransformerException
{
modifyForeignFieldSecondPass(foreignKey, controllerState);
@@ -144,8 +144,8 @@ public class OMForeignKeyTransformer
* @param controllerState the current controller state.
*/
private void addForeignField(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement localTable = foreignKey.getParent();
SourceElement foreignTable = foreignKey.getChild(
@@ -274,24 +274,6 @@ public class OMForeignKeyTransformer
setAndSaveMethodName);
}
{
- // Name for a getter in the foreign table to
- // retrieve entries in the foreign table plus the joined
- // entries in the local table.
- String joinGetterFieldName
- = StringUtils.capitalize(getterSetterFieldName)
- + "sJoin"
- + foreignTable.getAttribute(
- TorqueSchemaAttributeName.JAVA_NAME);
- String joinGetterName = FieldHelper.getGetterName(
- joinGetterFieldName,
- fieldType,
- controllerState);
- foreignFieldElement.setAttribute(
- ForeignKeyChildAttributeName
- .FOREIGN_FIELD_JOIN_GETTER,
- joinGetterName);
- }
- {
// Name for the doSelectJoinXXX method in the Peer Class
// of the foreign table.
String peerJoinSelectMethodName
@@ -334,8 +316,8 @@ public class OMForeignKeyTransformer
* @param controllerState the current controller state.
*/
private void modifyForeignFieldSecondPass(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement foreignFieldElement
= foreignKey.getChild(ForeignKeyChildElementName.FOREIGN_FIELD);
@@ -403,8 +385,8 @@ public class OMForeignKeyTransformer
* @param controllerState the current controller state.
*/
private void addForeignFieldInBean(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement localTable = foreignKey.getParent();
String referencedBySuffix = getForeignReferencedBySuffix(
@@ -491,8 +473,8 @@ public class OMForeignKeyTransformer
* @param controllerState the current controller state.
*/
private void addLocalFieldInBean(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement foreignTable = foreignKey.getChild(
TorqueSchemaElementName.TABLE);
@@ -555,8 +537,8 @@ public class OMForeignKeyTransformer
* @param controllerState the current controller state.
*/
private void addLocalField(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement foreignTable = foreignKey.getChild(
TorqueSchemaElementName.TABLE);
@@ -637,8 +619,8 @@ public class OMForeignKeyTransformer
* Not null.
*/
private String getLocalReferencedBySuffix(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement localTable = foreignKey.getParent();
String localTableName = (String) localTable.getAttribute(
@@ -691,9 +673,9 @@ public class OMForeignKeyTransformer
* @return the qualifying suffix, or the empty String if none is needed.
* Not null.
*/
- private String getForeignReferencedBySuffix(
- SourceElement foreignKey,
- ControllerState controllerState)
+ static String getForeignReferencedBySuffix(
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement localTable = foreignKey.getParent();
String foreignTableName = (String) foreignKey.getAttribute(
@@ -736,8 +718,8 @@ public class OMForeignKeyTransformer
* @param reference the refenced element to enrich.
*/
private void createForeignElementForReference(
- SourceElement foreignTable,
- SourceElement reference)
+ final SourceElement foreignTable,
+ final SourceElement reference)
{
{
String foreignColumnName = (String)
@@ -761,8 +743,8 @@ public class OMForeignKeyTransformer
* @param reference the refenced element to enrich.
*/
protected void createLocalElementForReference(
- SourceElement localTable,
- SourceElement reference)
+ final SourceElement localTable,
+ final SourceElement reference)
{
{
String localColumnName = (String)
@@ -779,8 +761,8 @@ public class OMForeignKeyTransformer
}
private void setForeignKeyAttributes(
- SourceElement foreignKey,
- ControllerState controllerState)
+ final SourceElement foreignKey,
+ final ControllerState controllerState)
{
SourceElement foreignTable = foreignKey.getChild(
TorqueSchemaElementName.TABLE);
@@ -831,8 +813,8 @@ public class OMForeignKeyTransformer
}
private void getParentPath(
- SourceElement sourceElement,
- StringBuilder result)
+ final SourceElement sourceElement,
+ final StringBuilder result)
{
SourceElement parent = sourceElement.getParent();
if (parent == null)
Added: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMJoinGetterTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMJoinGetterTransformer.java?rev=1517382&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMJoinGetterTransformer.java (added)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMJoinGetterTransformer.java Sun Aug 25 21:01:05 2013
@@ -0,0 +1,174 @@
+package org.apache.torque.templates.transformer.om;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.apache.torque.templates.TemplateOptionName.OM_GENERATE_JOIN_GETTERS;
+import static org.apache.torque.templates.TemplateOptionName.OM_JOIN_GETTER_SEPARATOR;
+import static org.apache.torque.templates.TemplateOptionName.OM_JOIN_GETTER_VISIBILITY;
+
+import org.apache.torque.generator.control.ControllerState;
+import org.apache.torque.generator.source.SourceElement;
+import org.apache.torque.generator.source.transform.SourceTransformerException;
+import org.apache.torque.templates.TorqueSchemaElementName;
+
+/**
+ * Creates the joinGetter Elements on a table.
+ * The OMReferencingForeignKeyTableTransformer needs to be run
+ * before this transformation
+ * The structure before transformation is:
+ *
+ * table
+ * foreign-key
+ * ...
+ * table (the referenced table in the foreign key)
+ * foreign-key
+ * ...
+ * table
+ * ...
+ * referencing-foreign-keys
+ * foreign-key (a foreign key where the foreignTable is the current table)
+ * ...
+ * table (the referenced table in the foreign key, i.e this table.)
+ * foreign-key
+ * ...
+ * table
+ * ...
+ *
+ * The structure after transformation is
+ * table
+ * foreign-key
+ * ...
+ * table (the referenced table in the foreign key)
+ * foreign-key
+ * ...
+ * table
+ * ...
+ * referencing-foreign-keys
+ * foreign-key (a foreign key where the foreignTable is the current table)
+ * ...
+ * table (the referenced table in the foreign key, i.e this table.)
+ * foreign-key
+ * ...
+ * table
+ * ...
+ * joinGetter name=".."
+ * local
+ * foreign-key (a foreign key referencing the table)
+ * remote
+ * foreign-key (a foreign key of the referenced table)
+ *
+ * ...
+ */
+public class OMJoinGetterTransformer
+{
+ public void transform(
+ final SourceElement tableElement,
+ final ControllerState controllerState)
+ throws SourceTransformerException
+ {
+ if (!controllerState.getBooleanOption(OM_GENERATE_JOIN_GETTERS))
+ {
+ return;
+ }
+
+ checkElementName(tableElement);
+ SourceElement referencingForeignKeys = tableElement.getChild(
+ TableChildElementName.REFERENCING_FOREIGN_KEYS);
+ for (SourceElement foreignKey
+ : referencingForeignKeys.getChildren(
+ TorqueSchemaElementName.FOREIGN_KEY))
+ {
+ SourceElement foreignTable = foreignKey.getParent();
+ for (SourceElement remoteForeignKey
+ : foreignTable.getChildren(
+ TorqueSchemaElementName.FOREIGN_KEY))
+ {
+ if (remoteForeignKey == foreignKey)
+ {
+ continue;
+ }
+ SourceElement remoteForeignTable = remoteForeignKey.getChild(
+ TorqueSchemaElementName.TABLE);
+
+ String localReferencedBySuffix
+ = OMForeignKeyTransformer.getForeignReferencedBySuffix(
+ foreignKey, controllerState);
+ String localGetterSetterFieldName
+ = (String) foreignTable.getAttribute(
+ TableAttributeName.DB_OBJECT_CLASS_NAME)
+ + localReferencedBySuffix;
+ String foreignReferencedBySuffix
+ = OMForeignKeyTransformer.getForeignReferencedBySuffix(
+ remoteForeignKey, controllerState);
+ String foreignGetterSetterFieldName
+ = (String) remoteForeignTable.getAttribute(
+ TableAttributeName.DB_OBJECT_CLASS_NAME)
+ + foreignReferencedBySuffix;
+ String joinGetterFieldName = localGetterSetterFieldName
+ + controllerState.getStringOption(OM_JOIN_GETTER_SEPARATOR)
+ + foreignGetterSetterFieldName;
+ String joinGetterName = FieldHelper.getGetterName(
+ joinGetterFieldName,
+ null,
+ controllerState);
+ SourceElement joinGetterElement = new SourceElement(
+ TableChildElementName.JOIN_GETTER);
+ tableElement.getChildren().add(joinGetterElement);
+ joinGetterElement.setAttribute(
+ JavaFieldAttributeName.GETTER_NAME, joinGetterName);
+ joinGetterElement.setAttribute(
+ JavaFieldAttributeName.GETTER_ACCESS_MODIFIER,
+ controllerState.getStringOption(
+ OM_JOIN_GETTER_VISIBILITY));
+
+ SourceElement localElement = new SourceElement(
+ TableChildElementName.LOCAL);
+ joinGetterElement.getChildren().add(localElement);
+ localElement.getChildren().add(foreignKey);
+
+
+ SourceElement foreignElement = new SourceElement(
+ TableChildElementName.FOREIGN);
+ joinGetterElement.getChildren().add(foreignElement);
+ foreignElement.getChildren().add(remoteForeignKey);
+ }
+ }
+ }
+
+
+ /**
+ * Checks that the name of the table element is correct.
+ *
+ * @param columnElement the table element, not null.
+ *
+ * @throws IllegalArgumentException if the element name is wrong.
+ */
+ protected void checkElementName(final SourceElement tableElement)
+ {
+ if (!TorqueSchemaElementName.TABLE.getName().equals(
+ tableElement.getName())
+ && !TorqueSchemaElementName.VIEW.getName().equals(
+ tableElement.getName()))
+ {
+ throw new IllegalArgumentException("Illegal element Name "
+ + tableElement.getName());
+ }
+ }
+}
Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/OMTransformer.java Sun Aug 25 21:01:05 2013
@@ -99,6 +99,10 @@ public class OMTransformer implements So
private static final SourceTransformer includeSchemaTransformer
= new IncludeSchemaTransformer();
+ /** The transformer which creates the joinGetters. */
+ private static OMJoinGetterTransformer joinGetterTransformer
+ = new OMJoinGetterTransformer();
+
static
{
try
@@ -185,6 +189,13 @@ public class OMTransformer implements So
}
}
+ for (final SourceElement tableOrViewElement : allTablesAndViews)
+ {
+ joinGetterTransformer.transform(
+ tableOrViewElement,
+ controllerState);
+ }
+
return root;
}
Modified: db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableChildElementName.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableChildElementName.java?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableChildElementName.java (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/transformer/om/TableChildElementName.java Sun Aug 25 21:01:05 2013
@@ -41,7 +41,22 @@ public enum TableChildElementName implem
/**
* Contains all primary key columns of the table.
*/
- PRIMARY_KEYS("primary-keys");
+ PRIMARY_KEYS("primary-keys"),
+
+ /**
+ * A getter to join a table remote by two foreign key relations.
+ */
+ JOIN_GETTER("join-getter"),
+
+ /**
+ * The local elements of the JOIN_GETTER.
+ */
+ LOCAL("local"),
+
+ /**
+ * The foreign elements of the JOIN_GETTER.
+ */
+ FOREIGN("foreign");
/** The name of the source element, not null. */
private String name;
@@ -51,7 +66,7 @@ public enum TableChildElementName implem
*
* @param name the name of the source element, not null.
*/
- private TableChildElementName(String name)
+ private TableChildElementName(final String name)
{
this.name = name;
}
Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/options.properties
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/options.properties?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/options.properties (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/options.properties Sun Aug 25 21:01:05 2013
@@ -165,10 +165,18 @@ torque.om.complexObjectModel.foreignFiel
# initialized with in the init method
torque.om.complexObjectModel.foreignFieldInitType = ArrayList
-# Whether doSelectJoin methods are generated which fetch related objects
-# in one database query
+# Whether doSelectJoin methods are generated in the Peer classes
+# which fetch related objects in one database query
torque.om.complexObjectModel.generateDoSelectJoin = true
+# Whether joinGetter methods are generated in the data object classes
+# which fetch related objects in one database query
+torque.om.complexObjectModel.generateJoinGetters = true
+# The separator in the joinGetter Methods between the two name parts
+torque.om.complexObjectModel.joinGetterSeparator = sJoin
+# The visibility of the joinGetter methods
+torque.om.complexObjectModel.joinGetterVisibility = protected
+
# Whether filler methods are generated which can efficiently read
# data objects related by a foreign key relation for a list of other
# data objects.
Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/dbObject.xml
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/dbObject.xml?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/dbObject.xml (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/dbObject.xml Sun Aug 25 21:01:05 2013
@@ -112,6 +112,9 @@
<action xsi:type="traverseAllAction"
element="referencing-foreign-keys/foreign-key/foreign-field"
outlet="torque.om.dbObject.base.referencingObjectMethods"/>
+ <action xsi:type="traverseAllAction"
+ element="join-getter"
+ outlet="torque.om.dbObject.base.joinGettersReferencingObject"/>
</mergepoint>
<mergepoint name="getByNameMethods">
<action xsi:type="applyAction"
@@ -357,10 +360,6 @@
<action xsi:type="applyAction"
outlet="torque.om.dbObject.base.isInitializedReferencingObject"/>
</mergepoint>
- <mergepoint name="referencingJoinGetters">
- <action xsi:type="applyAction"
- outlet="torque.om.dbObject.base.joinGettersReferencingObject"/>
- </mergepoint>
<mergepoint name="setter" />
</outlet>
Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/joinGetterReferencingObject.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/joinGetterReferencingObject.vm?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/joinGetterReferencingObject.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/dbObject/base/joinGetterReferencingObject.vm Sun Aug 25 21:01:05 2013
@@ -27,7 +27,12 @@
## by the OMTransformer.
##
#set ( $silentDbFetch = $torqueGen.booleanOption("torque.om.silentDbFetch") )
-#set ( $foreignKeyElement = $torqueGen.getParent() )
+#set ( $foreignKeyElement = $torqueGen.getChild("local").getChild("foreign-key") )
+#set ( $foreignField = $foreignKeyElement.getChild("foreign-field") )
+#set ( $field = $foreignField.getAttribute("field") )
+#set ( $fieldType = $foreignField.getAttribute("fieldType") )
+#set ( $criteriaCacheField = $foreignField.getAttribute("criteriaCacheField") )
+#set ( $initializer = $foreignField.getAttribute("initializer") )
#set ( $otherTable = $foreignKeyElement.getParent() )
#set ( $otherTablePeerClass = $otherTable.getAttribute("peerClassName") )
#set ( $otherTablePeerPackage = $otherTable.getAttribute("peerPackage") )
@@ -35,6 +40,8 @@
#set ( $thisTableElement = $foreignKeyElement.getChild("table") )
#set ( $thisObjectClassName = $thisTableElement.getAttribute("baseDbObjectClassName") )
#set ( $referenceElements = $foreignKeyElement.getChildren("reference") )
+#set ( $otherForeignField = $torqueGen.getChild("foreign").getChild("foreign-key").getChild("foreign-field") )
+#set ( $otherPeerJoinSelectMethod = $otherForeignField.getAttribute("peerJoinSelectMethod") )
#if ($silentDbFetch)
/**
* If this collection has already been initialized with
@@ -46,10 +53,29 @@
* This method is protected by default in order to keep the public
* api reasonable. You can change the access modifier to public
* by overriding this method in the child class.
+ *
+ * @param criteria the criteria to use when filling the collection.
*/
- protected $fieldType ${joinGetter}(Criteria criteria) throws TorqueException
+ ${getterAccessModifier} $fieldType ${getter}(Criteria criteria) throws TorqueException
{
- return ${joinGetter}(criteria, null);
+ Connection connection = null;
+ try
+ {
+ connection = Transaction.begin(criteria.getDbName());
+
+ $fieldType result = ${getter}(criteria, connection);
+
+ Transaction.commit(connection);
+ connection = null;
+ return result;
+ }
+ finally
+ {
+ if (connection != null)
+ {
+ Transaction.safeRollback(connection);
+ }
+ }
}
#end
@@ -64,7 +90,7 @@
* api reasonable. You can change the access modifier to public
* by overriding this method in the child class.
*/
- protected $fieldType ${joinGetter}(Criteria criteria, Connection connection)
+ ${getterAccessModifier} $fieldType ${getter}(Criteria criteria, Connection connection)
throws TorqueException
{
if ($field == null)
@@ -80,9 +106,9 @@
#set ( $thisTableColumnElement = $referenceElement.getChild("foreign-column").getChild("column") )
#set ( $otherTablePeerColumnName = $otherTableColumnElement.getAttribute("peerColumnName") )
#set ( $thisTableColumnGetter = $thisTableColumnElement.getAttribute("getter") )
- criteria.and(${otherTablePeerName}.${otherTablePeerColumnName}, ${thisTableColumnGetter}() );
+ criteria.and(${otherTablePeerName}.${otherTablePeerColumnName}, ${thisTableColumnGetter}());
#end
- $field = ${otherTablePeerName}.${peerJoinSelectMethod}(criteria, connection);
+ $field = ${otherTablePeerName}.${otherPeerJoinSelectMethod}(criteria, connection);
}
}
else
@@ -95,14 +121,15 @@
#set ( $thisTableColumnElement = $referenceElement.getChild("foreign-column").getChild("column") )
#set ( $otherTablePeerColumnName = $otherTableColumnElement.getAttribute("peerColumnName") )
#set ( $thisTableColumnGetter = $thisTableColumnElement.getAttribute("getter") )
- criteria.and(${otherTablePeerName}.${otherTablePeerColumnName}, ${thisTableColumnGetter}() );
+ criteria.and(${otherTablePeerName}.${otherTablePeerColumnName}, ${thisTableColumnGetter}());
#end
if (!${criteriaCacheField}.equals(criteria))
{
- $field = ${otherTablePeerName}.${peerJoinSelectMethod}(criteria, connection);
+ $field = ${otherTablePeerName}.${otherPeerJoinSelectMethod}(criteria, connection);
}
}
$criteriaCacheField = criteria;
return $field;
}
+
Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/general/getter.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/general/getter.vm?rev=1517382&r1=1517381&r2=1517382&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/general/getter.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/general/getter.vm Sun Aug 25 21:01:05 2013
@@ -37,7 +37,7 @@
*
* @return $fieldType
*/
- $getterAccessModifer $fieldType ${getter}()$getterThrows
+ $getterAccessModifier $fieldType ${getter}()$getterThrows
{
$torqueGen.mergepoint("methodStart")
return $field;
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org