You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by km...@apache.org on 2007/12/11 16:20:48 UTC
svn commit: r603268 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main:
java/org/apache/cayenne/gen/EntityUtils.java
resources/dotemplates/v1_2/client-superclass.vm
resources/dotemplates/v1_2/superclass.vm
Author: kmenard
Date: Tue Dec 11 07:20:48 2007
New Revision: 603268
URL: http://svn.apache.org/viewvc?rev=603268&view=rev
Log:
Fixed CAY-936: Update Velocity templates for generics.
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java?rev=603268&r1=603267&r2=603268&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java Tue Dec 11 07:20:48 2007
@@ -19,10 +19,8 @@
package org.apache.cayenne.gen;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.MappingNamespace;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.Relationship;
+import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.map.*;
/**
* Attributes and Methods for working with ObjEntities.
@@ -260,5 +258,34 @@
}
return false;
+ }
+
+ /**
+ * Returns the map key type for a collection relationship of type java.util.Map.
+ *
+ * @param relationship The relationship to look up type information for.
+ *
+ * @return The type of the attribute keyed on.
+ */
+ public String getMapKeyType(final ObjRelationship relationship) {
+
+ // If the map key is null, then we're doing look-ups by actual object key.
+ if (relationship.getMapKey() == null) {
+
+ // If it's a multi-column key, then the return type is always ObjectId.
+ DbEntity dbEntity = objEntity.getDbEntity();
+ if ((dbEntity != null) && (dbEntity.getPrimaryKeys().size() > 1)) {
+ return ObjectId.class.getName();
+ }
+
+ // If it's a single column key or no key exists at all, then we really don't know what the key type is,
+ // so default to Object.
+ return Object.class.getName();
+ }
+
+ // If the map key is a non-default attribute, then fetch the attributue and return its type.
+ final ObjAttribute attribute = (ObjAttribute) objEntity.getAttribute(relationship.getMapKey());
+
+ return attribute.getType();
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm?rev=603268&r1=603267&r2=603268&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm Tue Dec 11 07:20:48 2007
@@ -30,7 +30,7 @@
## subClassName
## subPackageName
## baseClassName
-## basePackageName
+## basePackageName
##
##
${importUtils.setPackage($superPackageName)}##
@@ -69,7 +69,11 @@
#end
#foreach( $rel in ${object.DeclaredRelationships} )
#if( $rel.ToMany )
- protected $importUtils.formatJavaType($rel.CollectionType) ${rel.Name};
+#if ( ${rel.CollectionType} == "java.util.Map")
+ protected $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($entityUtils.getMapKeyType($rel)), $importUtils.formatJavaType($rel.TargetEntity.ClientClassName)> ${rel.Name};
+#else
+ protected $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($rel.TargetEntity.ClientClassName)> ${rel.Name};
+#end
#else
protected ValueHolder ${rel.Name};
#end
@@ -81,7 +85,7 @@
if(objectContext != null) {
objectContext.prepareForAccess(this, "${attr.Name}", false);
}
-
+
return ${attr.Name};
}
#if ("true" != "${object.isReadOnly()}")
@@ -89,29 +93,33 @@
if(objectContext != null) {
objectContext.prepareForAccess(this, "${attr.Name}", false);
}
-
+
Object oldValue = this.${stringUtils.formatVariableName($attr.Name)};
this.${stringUtils.formatVariableName($attr.Name)} = ${stringUtils.formatVariableName($attr.Name)};
-
+
// notify objectContext about simple property change
if(objectContext != null) {
objectContext.propertyChanged(this, "${attr.Name}", oldValue, ${stringUtils.formatVariableName($attr.Name)});
}
}
#end
-
-
+
+
#end
##
##
## Create list add/remove/get methods
#foreach( $rel in ${object.DeclaredRelationships} )
#if( $rel.ToMany )
- public $importUtils.formatJavaType($rel.CollectionType) get${stringUtils.capitalized($rel.Name)}() {
+#if ( ${rel.CollectionType} == "java.util.Map")
+ public $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($entityUtils.getMapKeyType($rel)), $importUtils.formatJavaType($rel.TargetEntity.ClientClassName)> get${stringUtils.capitalized($rel.Name)}() {
+#else
+ public $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($rel.TargetEntity.ClientClassName)> get${stringUtils.capitalized($rel.Name)}() {
+#end
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
return ${rel.Name};
}
#if ( ! $rel.ReadOnly )
@@ -120,14 +128,14 @@
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
this.${rel.Name}.put(getMapKey("${rel.Name}", object), object);
}
public void removeFrom${stringUtils.capitalized($rel.Name)}($importUtils.formatJavaType(${rel.TargetEntity.ClientClassName}) object) {
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
this.${rel.Name}.remove(getMapKey("${rel.Name}", object));
}
#else
@@ -135,14 +143,14 @@
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
this.${rel.Name}.add(object);
}
public void removeFrom${stringUtils.capitalized($rel.Name)}($importUtils.formatJavaType(${rel.TargetEntity.ClientClassName}) object) {
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
this.${rel.Name}.remove(object);
}
#end
@@ -152,7 +160,7 @@
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
return ($importUtils.formatJavaType(${rel.TargetEntity.ClientClassName})) ${rel.Name}.getValue();
}
#if ( !${object.isReadOnly()} && !$rel.ReadOnly )
@@ -160,11 +168,11 @@
if(objectContext != null) {
objectContext.prepareForAccess(this, "${rel.Name}", true);
}
-
+
this.${stringUtils.formatVariableName($rel.Name)}.setValue(${stringUtils.formatVariableName($rel.Name)});
}
#end
#end
-
+
#end
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm?rev=603268&r1=603267&r2=603268&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm Tue Dec 11 07:20:48 2007
@@ -30,7 +30,7 @@
## subClassName
## subPackageName
## baseClassName
-## basePackageName
+## basePackageName
##
${importUtils.setPackage($superPackageName)}##
${importUtils.addReservedType("${superPackageName}.${superClassName}")}##
@@ -44,11 +44,11 @@
#end
${importUtils.generate()}
-/**
+/**
* Class ${superClassName} was generated by Cayenne.
- * It is probably a good idea to avoid changing this class manually,
- * since it may be overwritten next time code is regenerated.
- * If you need to make any customizations, please use subclass.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
*/
public abstract class ${superClassName} extends ${baseClassName} {
@@ -81,7 +81,7 @@
#elseif ( $importUtils.isNonBooleanPrimitive(${attr.Type}) )
public $classGen.formatJavaType(${attr.Type}) get${stringUtils.capitalized($attr.Name)}() {
Object value = readProperty("${attr.Name}");
- return (value != null) ? ($importUtils.formatJavaTypeAsNonBooleanPrimitive(${attr.Type})) value : 0;
+ return (value != null) ? ($importUtils.formatJavaTypeAsNonBooleanPrimitive(${attr.Type})) value : 0;
}
#else
public $importUtils.formatJavaType(${attr.Type}) get${stringUtils.capitalized($attr.Name)}() {
@@ -102,10 +102,16 @@
removeToManyTarget("${rel.name}", obj, true);
}
#end
- public $importUtils.formatJavaType($rel.CollectionType) get${stringUtils.capitalized($rel.Name)}() {
- return ($importUtils.formatJavaType($rel.CollectionType))readProperty("${rel.name}");
+#if ( ${rel.CollectionType} == "java.util.Map")
+ public $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($entityUtils.getMapKeyType($rel)), $importUtils.formatJavaType($rel.TargetEntity.ClassName)> get${stringUtils.capitalized($rel.Name)}() {
+ return ($importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($entityUtils.getMapKeyType($rel)), $importUtils.formatJavaType($rel.TargetEntity.ClassName)>)readProperty("${rel.name}");
}
#else
+ public $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($rel.TargetEntity.ClassName)> get${stringUtils.capitalized($rel.Name)}() {
+ return ($importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($rel.TargetEntity.ClassName)>)readProperty("${rel.name}");
+ }
+#end
+#else
#if ( !${object.isReadOnly()} && !$rel.ReadOnly )
public void set${stringUtils.capitalized($rel.Name)}($importUtils.formatJavaType(${rel.TargetEntity.ClassName}) $stringUtils.formatVariableName(${rel.name})) {
setToOneTarget("${rel.name}", $stringUtils.formatVariableName(${rel.name}), true);
@@ -114,9 +120,9 @@
public $importUtils.formatJavaType(${rel.TargetEntity.ClassName}) get${stringUtils.capitalized($rel.Name)}() {
return ($importUtils.formatJavaType(${rel.TargetEntity.ClassName}))readProperty("${rel.name}");
- }
+ }
#end
-
-
+
+
#end
}