You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/12/09 23:29:13 UTC

svn commit: r602742 - in /cayenne/main/trunk/framework: cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/ cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/ cayenne-modeler/src/main/java/org/apache/cayenne...

Author: aadamchik
Date: Sun Dec  9 14:29:12 2007
New Revision: 602742

URL: http://svn.apache.org/viewvc?rev=602742&view=rev
Log:
CAY-933 Embeddable classes - support class generation

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/embeddable-superclass.vm
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_Embeddable1.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/embeddable-superclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/embeddable-superclass.vm?rev=602742&r1=602741&r2=602742&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/embeddable-superclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/embeddable-superclass.vm Sun Dec  9 14:29:12 2007
@@ -85,17 +85,15 @@
     }
 #if ( $importUtils.isBoolean(${attr.Type}) )
 	public boolean is${stringUtils.capitalized($attr.Name)}() {
-        Boolean value = (Boolean)readProperty("${attr.Name}");
-        return (value != null) ? value.booleanValue() : false;
+        return $stringUtils.formatVariableName(${attr.Name});
     }
 #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 $stringUtils.formatVariableName(${attr.Name});
     }
 #else
     public $importUtils.formatJavaType(${attr.Type}) get${stringUtils.capitalized($attr.Name)}() {
-        return ($importUtils.formatJavaType(${attr.Type}))readProperty("${attr.Name}");
+        return $stringUtils.formatVariableName(${attr.Name});
     }
 #end
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java?rev=602742&r1=602741&r2=602742&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java Sun Dec  9 14:29:12 2007
@@ -1,13 +1,15 @@
 package org.apache.cayenne.testdo.embeddable.auto;
 
+import org.apache.cayenne.CayenneDataObject;
 import org.apache.cayenne.testdo.embeddable.Embeddable1;
 
-/** Class _EmbedEntity1 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. 
-  */
-public class _EmbedEntity1 extends org.apache.cayenne.CayenneDataObject {
+/** 
+ * Class _EmbedEntity1 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. 
+ */
+public abstract class _EmbedEntity1 extends CayenneDataObject {
 
     public static final String EMBEDDED1_PROPERTY = "embedded1";
     public static final String EMBEDDED2_PROPERTY = "embedded2";
@@ -15,28 +17,25 @@
 
     public static final String ID_PK_COLUMN = "ID";
 
-    public void setEmbedded1(Embeddable1 e) {
-        writeProperty("embedded1", e);
+    public void setEmbedded1(Embeddable1 embedded1) {
+        writeProperty("embedded1", embedded1);
     }
     public Embeddable1 getEmbedded1() {
         return (Embeddable1)readProperty("embedded1");
     }
-    
-    
-    public void setEmbedded2(Embeddable1 e) {
-        writeProperty("embedded2", e);
+
+    public void setEmbedded2(Embeddable1 embedded2) {
+        writeProperty("embedded2", embedded2);
     }
     public Embeddable1 getEmbedded2() {
         return (Embeddable1)readProperty("embedded2");
     }
-    
-    
+
     public void setName(String name) {
         writeProperty("name", name);
     }
     public String getName() {
         return (String)readProperty("name");
     }
-    
-    
+
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_Embeddable1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_Embeddable1.java?rev=602742&r1=602741&r2=602742&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_Embeddable1.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/embeddable/auto/_Embeddable1.java Sun Dec  9 14:29:12 2007
@@ -1,58 +1,52 @@
-/*****************************************************************
- *   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.
- ****************************************************************/
 package org.apache.cayenne.testdo.embeddable.auto;
 
 import org.apache.cayenne.Persistent;
 
-public class _Embeddable1 {
+/** 
+ * Embeddable class _Embeddable1 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. 
+ */
+public abstract class _Embeddable1 extends Object {
 
+    public static final String EMBEDDED10_PROPERTY = "embedded10";
+    public static final String EMBEDDED20_PROPERTY = "embedded20";
+
+    // special properties injected by Cayenne
     private Persistent owner;
     private String embeddedProperty;
-
+    
+    // declared properties
     protected String embedded10;
     protected String embedded20;
 
-    public String getEmbedded10() {
-        return embedded10;
+    // lifecycle methods
+    protected void propertyWillChange(String property, Object oldValue, Object newValue) {
+        if (owner != null && owner.getObjectContext() != null) {
+            owner.getObjectContext().propertyChanged(
+                    owner,
+                    embeddedProperty + "." + property,
+                    oldValue,
+                    newValue);
+        }
     }
 
+    // declared getters and setters
     public void setEmbedded10(String embedded10) {
-        propertyWillChange("embdedded10", this.embedded10, embedded10);
+        propertyWillChange("embedded10", this.embedded10, embedded10);
         this.embedded10 = embedded10;
     }
-
-    public String getEmbedded20() {
-        return embedded20;
+    public String getEmbedded10() {
+        return embedded10;
     }
 
     public void setEmbedded20(String embedded20) {
-        propertyWillChange("embdedded20", this.embedded20, embedded20);
+        propertyWillChange("embedded20", this.embedded20, embedded20);
         this.embedded20 = embedded20;
     }
-
-    protected void propertyWillChange(String property, Object oldValue, Object newValue) {
-        if (owner != null && owner.getObjectContext() != null) {
-            owner.getObjectContext().propertyChanged(
-                    owner,
-                    embeddedProperty + "." + property,
-                    oldValue,
-                    newValue);
-        }
+    public String getEmbedded20() {
+        return embedded20;
     }
+
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java?rev=602742&r1=602741&r2=602742&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java Sun Dec  9 14:29:12 2007
@@ -21,17 +21,19 @@
 
 import java.awt.Component;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.commons.collections.Predicate;
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.validation.ValidationFailure;
 import org.apache.cayenne.validation.ValidationResult;
+import org.apache.commons.collections.Predicate;
 
 /**
  * A base superclass of a top controller for the code generator. Defines all common model
@@ -103,6 +105,12 @@
         }
 
         return modified;
+    }
+
+    public Collection<Embeddable> getSelectedEmbeddables() {
+        // TODO: andrus, 12/9/2007 - until Modeler filtering of embeddables is
+        // implemented, show all embeddables we have
+        return dataMap.getEmbeddables();
     }
 
     public List<ObjEntity> getSelectedEntities() {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java?rev=602742&r1=602741&r2=602742&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java Sun Dec  9 14:29:12 2007
@@ -31,6 +31,9 @@
 import javax.swing.JTextField;
 
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.map.Attribute;
+import org.apache.cayenne.map.EmbeddableAttribute;
+import org.apache.cayenne.map.EmbeddedAttribute;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
@@ -147,6 +150,7 @@
         ClassGenerationAction generator = newGenerator();
         generator.setDataMap(getParentController().getDataMap());
         generator.addEntities(entities);
+        generator.addEmbeddables(getParentController().getSelectedEmbeddables());
 
         // configure encoding from preferences
         Domain generatorPrefs = Application
@@ -187,10 +191,20 @@
             return;
         }
 
-        {
-            Iterator it = entity.getAttributes().iterator();
-            while (it.hasNext()) {
-                ValidationFailure failure = validateAttribute((ObjAttribute) it.next());
+        for (Attribute attribute : entity.getAttributes()) {
+            if (attribute instanceof EmbeddedAttribute) {
+                EmbeddedAttribute embeddedAttribute = (EmbeddedAttribute) attribute;
+                for (ObjAttribute subAttribute : embeddedAttribute.getAttributes()) {
+                    ValidationFailure failure = validateAttribute(subAttribute);
+                    if (failure != null) {
+                        validationBuffer.addFailure(failure);
+                        return;
+                    }
+                }
+            }
+            else {
+
+                ValidationFailure failure = validateAttribute((ObjAttribute) attribute);
                 if (failure != null) {
                     validationBuffer.addFailure(failure);
                     return;

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java?rev=602742&r1=602741&r2=602742&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java Sun Dec  9 14:29:12 2007
@@ -24,6 +24,7 @@
 import java.util.Comparator;
 
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.ObjAttribute;
@@ -231,8 +232,8 @@
 
     final class AttributeComparator implements Comparator {
         public int compare(Object o1, Object o2) {
-            ObjAttribute a1 = (ObjAttribute) o1;
-            ObjAttribute a2 = (ObjAttribute) o2;
+            Attribute a1 = (Attribute) o1;
+            Attribute a2 = (Attribute) o2;
 
             int delta = getWeight(a1) - getWeight(a2);
 
@@ -241,7 +242,7 @@
                 : Util.nullSafeCompare(true, a1.getName(), a2.getName());
         }
 
-        private int getWeight(ObjAttribute a) {
+        private int getWeight(Attribute a) {
             return a.getEntity() == entity ? 1 : -1;
         }
     }