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 2009/10/27 11:03:43 UTC

svn commit: r830113 - in /cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main: java/org/apache/cayenne/modeler/dialog/datamap/ java/org/apache/cayenne/modeler/dialog/objentity/ java/org/apache/cayenne/modeler/editor/ resources/org/apach...

Author: aadamchik
Date: Tue Oct 27 10:03:42 2009
New Revision: 830113

URL: http://svn.apache.org/viewvc?rev=830113&view=rev
Log:
CAY-1295  Finish modeler support for embeddables and embedded attributes

2 merged patches by Olga Tkachova

(cherry picked from commit 00678b3c4a405ed04ee455d44cfb446e540366e8)

Modified:
    cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java?rev=830113&r1=830112&r2=830113&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java Tue Oct 27 10:03:42 2009
@@ -57,7 +57,7 @@
      */
     public void startup() {
         SPanel view = new DefaultsPreferencesDialog(ALL_CONTROL, UNINIT_CONTROL);
-        view.setTitle("Update ObjEntities Java Package");
+        view.setTitle("Update ObjEntities and Embeddables Java Package");
         setView(view);
         super.startup();
     }

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java?rev=830113&r1=830112&r2=830113&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java Tue Oct 27 10:03:42 2009
@@ -376,7 +376,6 @@
 
     private void rebuildTable() {
         String typeName = null;
-
         Collection<EmbeddableAttribute> embAttrTempCopy = new ArrayList<EmbeddableAttribute>();
 
         if (attributeSaved.getType() != null) {

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java?rev=830113&r1=830112&r2=830113&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapView.java Tue Oct 27 10:03:42 2009
@@ -615,7 +615,7 @@
             return;
         }
 
-        if (dataMap.getObjEntities().size() > 0) {
+        if (dataMap.getObjEntities().size() > 0 || dataMap.getEmbeddables().size() > 0) {
             new PackageUpdateController(eventController, dataMap, false).startup();
         }
     }

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java?rev=830113&r1=830112&r2=830113&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java Tue Oct 27 10:03:42 2009
@@ -20,9 +20,12 @@
 package org.apache.cayenne.modeler.editor;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.List;
+
 import javax.swing.DefaultCellEditor;
 import javax.swing.JComboBox;
 import org.apache.cayenne.dba.TypesMapping;
@@ -30,11 +33,16 @@
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.EmbeddedAttribute;
 import org.apache.cayenne.map.event.AttributeEvent;
+import org.apache.cayenne.map.event.EntityEvent;
+import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
 import org.apache.cayenne.modeler.util.CayenneTable;
 import org.apache.cayenne.modeler.util.CayenneTableModel;
 import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
@@ -247,7 +255,53 @@
             fireTableCellUpdated(row, column);
         }
         else if (column == OBJ_ATTRIBUTE_TYPE) {
+            String oldType = attribute.getType();
             attribute.setType(value != null ? value.toString() : null);
+            String newType = attribute.getType();
+            String[] registeredTypes = ModelerUtil.getRegisteredTypeNames();
+            Collection<String> registeredTypesList =  Arrays.asList(registeredTypes); ;
+            if(oldType!=null && newType!=null && ! (registeredTypesList.contains(oldType) == registeredTypesList.contains(newType))){
+                ObjAttribute attributeNew;
+                if(registeredTypesList.contains(newType)){
+                    attributeNew = new ObjAttribute();
+                } else {
+                    attributeNew = new EmbeddedAttribute();
+                    attribute.setDbAttributePath(null);
+                }
+                
+                attributeNew.setDbAttributePath(attribute.getDbAttributePath());
+                attributeNew.setName(attribute.getName());
+                attributeNew.setEntity(attribute.getEntity());
+                attributeNew.setParent(attribute.getParent());
+                attributeNew.setType(attribute.getType());
+                attributeNew.setUsedForLocking(attribute.isUsedForLocking());
+                Entity ent = attribute.getEntity();
+                ent.removeAttribute(attribute.getName());
+                ent.addAttribute(attributeNew);
+                
+                mediator.fireObjEntityEvent(new EntityEvent(
+                        this,
+                        ent,
+                        MapEvent.CHANGE));
+
+                EntityDisplayEvent ev = new EntityDisplayEvent(this, mediator
+                        .getCurrentObjEntity(), mediator.getCurrentDataMap(), mediator
+                        .getCurrentDataDomain());
+
+                mediator.fireObjEntityDisplayEvent(ev);
+
+                mediator.fireObjAttributeEvent(new AttributeEvent(this, attributeNew, ent, MapEvent.CHANGE));
+
+                AttributeDisplayEvent eventAttr = new AttributeDisplayEvent(
+                        this,
+                        attributeNew,
+                        mediator.getCurrentObjEntity(),
+                        mediator.getCurrentDataMap(),
+                        mediator.getCurrentDataDomain());
+
+                mediator.fireObjAttributeDisplayEvent(eventAttr);
+            }
+            
             fireTableCellUpdated(row, column);
         }
         else if (column == LOCKING) {

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java?rev=830113&r1=830112&r2=830113&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java Tue Oct 27 10:03:42 2009
@@ -25,8 +25,10 @@
 import java.awt.Font;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.EventObject;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.swing.Icon;
@@ -43,6 +45,7 @@
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.TableColumn;
 
+import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.event.AttributeEvent;
@@ -68,6 +71,7 @@
 import org.apache.cayenne.modeler.util.PanelFactory;
 import org.apache.cayenne.modeler.util.UIUtil;
 import org.apache.cayenne.modeler.util.combo.AutoCompletion;
+import org.apache.cayenne.project.ProjectPath;
 
 /**
  * Detail view of the ObjEntity attributes.
@@ -178,6 +182,34 @@
     }
 
     public void initComboBoxes(ObjAttributeTableModel model) {
+
+        List<String> embeddableNames = new ArrayList<String>();
+        List<String> typeNames = new ArrayList<String>();
+
+        Iterator it = mediator.getProject().treeNodes();
+        while (it.hasNext()) {
+            ProjectPath path = (ProjectPath) it.next();
+            Object o = path.getObject();
+            Object[] p = path.getPath();
+            if (o instanceof Embeddable) {
+                Embeddable emb = (Embeddable) p[p.length - 1];
+                embeddableNames.add(emb.getClassName());
+            }
+        }
+        
+        String[] registeredTypes = ModelerUtil.getRegisteredTypeNames();
+        for(int i=0; i< registeredTypes.length; i++){
+            typeNames.add(registeredTypes[i]);
+        }
+        typeNames.addAll(embeddableNames);
+     
+        TableColumn typeColumn = table.getColumnModel().getColumn(
+                ObjAttributeTableModel.OBJ_ATTRIBUTE_TYPE);
+
+        JComboBox javaTypesCombo = CayenneWidgetFactory.createComboBox(typeNames.toArray(), false);
+        AutoCompletion.enable(javaTypesCombo, false, true);
+        typeColumn.setCellEditor(CayenneWidgetFactory.createCellEditor(javaTypesCombo));
+
         TableColumn dbNameColumn = table.getColumnModel().getColumn(
                 ObjAttributeTableModel.DB_ATTRIBUTE);
         dbNameColumn.setMinWidth(150);
@@ -190,6 +222,7 @@
             model.setCellEditor(nameAttr, table);
             model.setComboBoxes(nameAttr, ObjAttributeTableModel.DB_ATTRIBUTE);
         }
+
     }
 
     /**
@@ -308,11 +341,6 @@
                 ObjAttributeTableModel.OBJ_ATTRIBUTE_TYPE);
         typeColumn.setMinWidth(150);
 
-        JComboBox javaTypesCombo = CayenneWidgetFactory.createComboBox(ModelerUtil
-                .getRegisteredTypeNames(), false);
-        AutoCompletion.enable(javaTypesCombo, false, true);
-        typeColumn.setCellEditor(CayenneWidgetFactory.createCellEditor(javaTypesCombo));
-
         TableColumn lockColumn = table.getColumnModel().getColumn(
                 ObjAttributeTableModel.LOCKING);
         lockColumn.setMinWidth(100);

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties?rev=830113&r1=830112&r2=830113&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties Tue Oct 27 10:03:42 2009
@@ -140,7 +140,7 @@
 cayenne.modeler.datamap.defaultprefs.schema.radio = Set/update schema for all DbEntities
 cayenne.modeler.datamap.defaultprefs.schemanull.radio = Do not override existing non-empty schema
 
-cayenne.modeler.datamap.defaultprefs.package.radio = Set/update package for all ObjEntities (create default class names if missing)
+cayenne.modeler.datamap.defaultprefs.package.radio = Set/update package for all ObjEntities and Embeddables (create default class names if missing)
 cayenne.modeler.datamap.defaultprefs.packagenull.radio = Do not override class names with packages
 
 cayenne.modeler.datamap.defaultprefs.superclass.radio = Set/update superclass for all ObjEntities