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/23 11:56:21 UTC

svn commit: r606548 - in /cayenne/main/trunk/framework: cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ ...

Author: aadamchik
Date: Sun Dec 23 02:56:20 2007
New Revision: 606548

URL: http://svn.apache.org/viewvc?rev=606548&view=rev
Log:
CAY-948 Implement flattened attributes in Cayenne
(preliminary cleanup and deprecation of API that worked only for non-flattened attributes)

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjAttribute.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjAttributeTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjEntityInheritanceTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/MergerFactoryTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ObjAttributeValidatorTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ValidatorTestBase.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjAttribute.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjAttribute.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjAttribute.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjAttribute.java Sun Dec 23 02:56:20 2007
@@ -26,7 +26,6 @@
 import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.lang.StringUtils;
 
 /**
  * An ObjAttribute is a mapping descriptor of a Java class property.
@@ -176,54 +175,55 @@
 
     /**
      * Set mapped DbAttribute.
+     * 
+     * @deprecated since 3.0 - this method only works for non-flattened attributes.
+     *             'setDbAttributePath' should be used instead.
      */
     public void setDbAttribute(DbAttribute dbAttribute) {
         if (dbAttribute == null) {
-            this.setDbAttributePath(null);
+            setDbAttributePath(null);
         }
         else {
-            this.setDbAttributePath(dbAttribute.getName());
+            setDbAttributePath(dbAttribute.getName());
         }
     }
 
     /**
-     * Returns the dbAttributeName.
-     * 
-     * @return String
+     * Returns the the name of the mapped DbAttribute. This value is the same as
+     * "dbAttributePath" for regular attributes mapped to columns. It is equql to the last
+     * path component for the flattened attributes.
      */
     public String getDbAttributeName() {
-        if (dbAttributePath == null)
+        if (dbAttributePath == null) {
             return null;
-        int lastPartStart = dbAttributePath.lastIndexOf('.');
-        String lastPart = StringUtils.substring(
-                dbAttributePath,
-                lastPartStart + 1,
-                dbAttributePath.length());
-        return lastPart;
+        }
+
+        int lastDot = dbAttributePath.lastIndexOf('.');
+        if (lastDot < 0) {
+            return dbAttributePath;
+        }
+
+        return dbAttributePath.substring(lastDot + 1);
     }
 
     /**
-     * Sets the dbAttributeName.
+     * Sets the name of the mapped DbAttribute.
      * 
-     * @param dbAttributeName The dbAttributeName to set
+     * @deprecated since 3.0 use {@link #setDbAttributePath(String)}.
      */
-    public void setDbAttributeName(String dbAttributeName) {
-        if (dbAttributePath == null || dbAttributeName == null) {
-            dbAttributePath = dbAttributeName;
-            return;
-        }
-        int lastPartStart = dbAttributePath.lastIndexOf('.');
-        String newPath = (lastPartStart > 0
-                ? StringUtils.chomp(dbAttributePath, ".")
-                : "");
-        newPath += (newPath.length() > 0 ? "." : "") + dbAttributeName;
-        this.dbAttributePath = newPath;
+    public void setDbAttributeName(String name) {
+        setDbAttributePath(name);
     }
 
     public void setDbAttributePath(String dbAttributePath) {
         this.dbAttributePath = dbAttributePath;
     }
 
+    /**
+     * Returns a dot-separated path that starts in the root DbEntity that maps to this
+     * attribute's ObjEntity and spans zero or more relationships, always ending in a
+     * DbAttribute name.
+     */
     public String getDbAttributePath() {
         return dbAttributePath;
     }
@@ -241,7 +241,7 @@
     public ObjAttribute getClientAttribute() {
         ClientObjAttribute attribute = new ClientObjAttribute(getName());
         attribute.setType(getType());
-        
+
         DbAttribute dbAttribute = getDbAttribute();
         if (dbAttribute != null) {
             attribute.setMandatory(dbAttribute.isMandatory());

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjEntity.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjEntity.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ObjEntity.java Sun Dec 23 02:56:20 2007
@@ -764,7 +764,7 @@
             ObjAttribute objAttr = (ObjAttribute) attribute;
             DbAttribute dbAttr = objAttr.getDbAttribute();
             if (null != dbAttr) {
-                objAttr.setDbAttribute(null);
+                objAttr.setDbAttributePath(null);
             }
         }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java Sun Dec 23 02:56:20 2007
@@ -121,7 +121,7 @@
                 String type = TypesMapping.getJavaBySqlType(da.getType());
 
                 ObjAttribute oa = new ObjAttribute(attrName, type, entity);
-                oa.setDbAttribute(da);
+                oa.setDbAttributePath(da.getName());
                 entity.addAttribute(oa);
                 changed = true;
             }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjAttributeTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjAttributeTest.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjAttributeTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjAttributeTest.java Sun Dec 23 02:56:20 2007
@@ -31,8 +31,19 @@
         ObjAttribute attribute = new ObjAttribute("a1");
 
         DbAttribute dbAttr = new DbAttribute("tst_name", Types.INTEGER, null);
-        attribute.setDbAttribute(dbAttr);
+        attribute.setDbAttributePath(dbAttr.getName());
         assertEquals(dbAttr.getName(), attribute.getDbAttributeName());
+    }
+    
+    public void testDbAttributePath() {
+        ObjAttribute attribute = new ObjAttribute("a1");
+        attribute.setDbAttributePath("a");
+        assertEquals("a", attribute.getDbAttributePath());
+        assertEquals("a", attribute.getDbAttributeName());
+        
+        attribute.setDbAttributePath("a.b");
+        assertEquals("a.b", attribute.getDbAttributePath());
+        assertEquals("b", attribute.getDbAttributeName());
     }
 
     public void testType() {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjEntityInheritanceTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjEntityInheritanceTest.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjEntityInheritanceTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ObjEntityInheritanceTest.java Sun Dec 23 02:56:20 2007
@@ -128,8 +128,8 @@
         entity1.setSuperEntityName("e2");
         entity2.setDbEntityName(dbEntity.getName());
 
-        attribute1.setDbAttribute(dbAttribute1);
-        attribute2.setDbAttribute(dbAttribute2);
+        attribute1.setDbAttributePath(dbAttribute1.getName());
+        attribute2.setDbAttributePath(dbAttribute2.getName());
 
         assertNull(entity2.getAttributeForDbAttribute(dbAttribute1));
         assertSame(attribute2, entity2.getAttributeForDbAttribute(dbAttribute2));

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/MergerFactoryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/MergerFactoryTest.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/MergerFactoryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/merge/MergerFactoryTest.java Sun Dec 23 02:56:20 2007
@@ -186,7 +186,7 @@
         ObjEntity objEntity = new ObjEntity("NewTable");
         objEntity.setDbEntity(dbEntity);
         ObjAttribute oatr1 = new ObjAttribute("name");
-        oatr1.setDbAttribute(column2);
+        oatr1.setDbAttributePath(column2.getName());
         oatr1.setType("java.lang.String");
         objEntity.addAttribute(oatr1);
         map.addObjEntity(objEntity);

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ObjAttributeValidatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ObjAttributeValidatorTest.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ObjAttributeValidatorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ObjAttributeValidatorTest.java Sun Dec 23 02:56:20 2007
@@ -41,7 +41,7 @@
             validator);
         assertValidator(ValidationInfo.VALID);
 
-        oa1.setDbAttribute(null);
+        oa1.setDbAttributePath(null);
         validator.reset();
         new ObjAttributeValidator().validateObject(
             new ProjectPath(new Object[] { project, d1, m1, oa1.getEntity(), oa1 }),

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ValidatorTestBase.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ValidatorTestBase.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ValidatorTestBase.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/project/validator/ValidatorTestBase.java Sun Dec 23 02:56:20 2007
@@ -101,7 +101,7 @@
 
         ObjAttribute oa1 = new ObjAttribute(name, "java.lang.Integer", oe1);
         oe1.addAttribute(oa1);
-        oa1.setDbAttribute(a1);
+        oa1.setDbAttributePath(a1.getName());
 
         return oa1;
     }

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=606548&r1=606547&r2=606548&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 23 02:56:20 2007
@@ -35,15 +35,15 @@
 import org.apache.cayenne.modeler.util.ProjectUtil;
 import org.apache.cayenne.util.Util;
 
-/** 
- * Model for the Object Entity attributes and for Obj to 
- * DB Attribute Mapping tables. Allows adding/removing attributes,
- * modifying the types and the names.
+/**
+ * Model for the Object Entity attributes and for Obj to DB Attribute Mapping tables.
+ * Allows adding/removing attributes, modifying the types and the names.
  * 
- * @author Michael Misha Shengaout. 
+ * @author Michael Misha Shengaout.
  * @author Andrus Adamchik
  */
 public class ObjAttributeTableModel extends CayenneTableModel {
+
     // Columns
     static final int OBJ_ATTRIBUTE = 0;
     static final int OBJ_ATTRIBUTE_TYPE = 1;
@@ -51,15 +51,12 @@
     static final int DB_ATTRIBUTE_TYPE = 3;
     static final int LOCKING = 4;
 
-
     protected ObjEntity entity;
     protected DbEntity dbEntity;
 
-    public ObjAttributeTableModel(
-        ObjEntity entity,
-        ProjectController mediator,
-        Object eventSource) {
-        super(mediator, eventSource, new ArrayList(entity.getAttributes()));
+    public ObjAttributeTableModel(ObjEntity entity, ProjectController mediator,
+            Object eventSource) {
+        super(mediator, eventSource, new ArrayList<Attribute>(entity.getAttributes()));
         // take a copy
         this.entity = entity;
         this.dbEntity = entity.getDbEntity();
@@ -74,9 +71,9 @@
 
     public Class getColumnClass(int col) {
         switch (col) {
-            case LOCKING :
+            case LOCKING:
                 return Boolean.class;
-            default :
+            default:
                 return String.class;
         }
     }
@@ -84,7 +81,8 @@
     /**
      * Returns ObjAttribute class.
      */
-    public Class getElementsClass() {
+    @Override
+    public Class<?> getElementsClass() {
         return ObjAttribute.class;
     }
 
@@ -94,11 +92,11 @@
 
     public ObjAttribute getAttribute(int row) {
         return (row >= 0 && row < objectList.size())
-            ? (ObjAttribute) objectList.get(row)
-            : null;
+                ? (ObjAttribute) objectList.get(row)
+                : null;
     }
 
-    /** Refreshes DbEntity to current db entity within ObjEntity.*/
+    /** Refreshes DbEntity to current db entity within ObjEntity. */
     public void resetDbEntity() {
         if (dbEntity == entity.getDbEntity()) {
             return;
@@ -125,17 +123,17 @@
 
     public String getColumnName(int column) {
         switch (column) {
-            case OBJ_ATTRIBUTE :
+            case OBJ_ATTRIBUTE:
                 return "ObjAttribute";
-            case OBJ_ATTRIBUTE_TYPE :
+            case OBJ_ATTRIBUTE_TYPE:
                 return "Java Type";
-            case DB_ATTRIBUTE :
+            case DB_ATTRIBUTE:
                 return "DbAttribute";
-            case DB_ATTRIBUTE_TYPE :
+            case DB_ATTRIBUTE_TYPE:
                 return "DB Type";
-            case LOCKING :
+            case LOCKING:
                 return "Used for Locking";
-            default :
+            default:
                 return "";
         }
     }
@@ -175,9 +173,9 @@
 
         if (column == OBJ_ATTRIBUTE) {
             event.setOldName(attribute.getName());
-            ProjectUtil.setAttributeName(
-                attribute,
-                value != null ? value.toString().trim() : null);
+            ProjectUtil.setAttributeName(attribute, value != null ? value
+                    .toString()
+                    .trim() : null);
             fireTableCellUpdated(row, column);
         }
         else if (column == OBJ_ATTRIBUTE_TYPE) {
@@ -185,21 +183,22 @@
             fireTableCellUpdated(row, column);
         }
         else if (column == LOCKING) {
-            attribute.setUsedForLocking(
-                (value instanceof Boolean) && ((Boolean) value).booleanValue());
+            attribute.setUsedForLocking((value instanceof Boolean)
+                    && ((Boolean) value).booleanValue());
             fireTableCellUpdated(row, column);
         }
         else {
-            DbAttribute dbAttribute = attribute.getDbAttribute();
             if (column == DB_ATTRIBUTE) {
                 // If db attrib exist, associate it with obj attribute
                 if (value != null) {
-                    dbAttribute = (DbAttribute) dbEntity.getAttribute(value.toString());
-                    attribute.setDbAttribute(dbAttribute);
+                    DbAttribute dbAttribute = (DbAttribute) dbEntity.getAttribute(value
+                            .toString());
+                    String path = dbAttribute != null ? dbAttribute.getName() : null;
+                    attribute.setDbAttributePath(path);
                 }
                 // If name is erased, remove db attribute from obj attribute.
-                else if (dbAttribute != null) {
-                    attribute.setDbAttribute(null);
+                else if (attribute.getDbAttribute() != null) {
+                    attribute.setDbAttributePath(null);
                 }
             }
 
@@ -231,15 +230,15 @@
     }
 
     final class AttributeComparator implements Comparator {
+
         public int compare(Object o1, Object o2) {
             Attribute a1 = (Attribute) o1;
             Attribute a2 = (Attribute) o2;
 
             int delta = getWeight(a1) - getWeight(a2);
 
-            return (delta != 0)
-                ? delta
-                : Util.nullSafeCompare(true, a1.getName(), a2.getName());
+            return (delta != 0) ? delta : Util.nullSafeCompare(true, a1.getName(), a2
+                    .getName());
         }
 
         private int getWeight(Attribute a) {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java Sun Dec 23 02:56:20 2007
@@ -102,7 +102,7 @@
     /**
      * Returns Java class of the internal list elements.
      */
-    public abstract Class getElementsClass();
+    public abstract Class<?> getElementsClass();
 
     /**
      * Returns the key by which to order elements in the object list. Default value is

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java?rev=606548&r1=606547&r2=606548&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java Sun Dec 23 02:56:20 2007
@@ -256,7 +256,7 @@
                 DbAttribute dbAtt = att.getDbAttribute();
                 if (dbAtt != null) {
                     if (dbEnt.getAttribute(dbAtt.getName()) != dbAtt) {
-                        att.setDbAttribute(null);
+                        att.setDbAttributePath(null);
                     }
                 }
             }
@@ -295,7 +295,7 @@
             ObjAttribute objAttr = (ObjAttribute) it.next();
             DbAttribute dbAttr = objAttr.getDbAttribute();
             if (null != dbAttr) {
-                objAttr.setDbAttribute(null);
+                objAttr.setDbAttributePath(null);
             }
         }