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 2013/01/12 15:26:38 UTC

svn commit: r1432430 - in /cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler: action/PasteAction.java undo/PasteUndoableEdit.java

Author: aadamchik
Date: Sat Jan 12 14:26:38 2013
New Revision: 1432430

URL: http://svn.apache.org/viewvc?rev=1432430&view=rev
Log:
CAY-1701 Modeler cannot undo pasting of obj (db) entity

patch by Ilya Drabenia

Modified:
    cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java
    cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/PasteUndoableEdit.java

Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java?rev=1432430&r1=1432429&r2=1432430&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/PasteAction.java Sat Jan 12 14:26:38 2013
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Map;
 
 import javax.swing.KeyStroke;
+import javax.swing.undo.UndoableEdit;
 
 import org.apache.cayenne.configuration.ConfigurationNode;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
@@ -39,6 +40,8 @@ import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.EmbeddableAttribute;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.map.MappingNamespace;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
@@ -102,15 +105,15 @@ public class PasteAction extends Cayenne
             Object currentObject = getProjectController().getCurrentObject();
 
             if (content != null && currentObject != null) {
-
-                PasteCompoundUndoableEdit undoableEdit = new PasteCompoundUndoableEdit();
-
                 DataChannelDescriptor domain = (DataChannelDescriptor) getProjectController()
                         .getProject()
                         .getRootNode();
                 DataMap map = getProjectController().getCurrentDataMap();
 
+                UndoableEdit undoableEdit;
                 if (content instanceof List) {
+                    undoableEdit = new PasteCompoundUndoableEdit();
+
                     for (Object o : (List) content) {
                         paste(currentObject, o);
                         undoableEdit.addEdit(new PasteUndoableEdit(
@@ -122,11 +125,7 @@ public class PasteAction extends Cayenne
                 }
                 else {
                     paste(currentObject, content);
-                    undoableEdit.addEdit(new PasteUndoableEdit(
-                            domain,
-                            map,
-                            currentObject,
-                            content));
+                    undoableEdit = new PasteUndoableEdit(domain, map, currentObject, content);
                 }
 
                 application.getUndoManager().addEdit(undoableEdit);
@@ -259,6 +258,9 @@ public class PasteAction extends Cayenne
             // paste DbEntity to DataMap
             final DataMap dataMap = ((DataMap) where);
 
+            // clear data map parent cache
+            clearDataMapCache(dataMap);
+
             if (content instanceof DbEntity) {
                 DbEntity dbEntity = (DbEntity) content;
                 dbEntity.setName(getFreeName(new DbEntityNameChecker(domain), dbEntity
@@ -449,6 +451,13 @@ public class PasteAction extends Cayenne
         }
     }
 
+    private void clearDataMapCache(DataMap dataMap) {
+        MappingNamespace ns = dataMap.getNamespace();
+        if (ns instanceof EntityResolver) {
+            ((EntityResolver) ns).clearCache();
+        }
+    }
+
     /**
      * Finds avaliable name for an object
      */

Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/PasteUndoableEdit.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/PasteUndoableEdit.java?rev=1432430&r1=1432429&r2=1432430&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/PasteUndoableEdit.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/PasteUndoableEdit.java Sat Jan 12 14:26:38 2013
@@ -102,6 +102,9 @@ public class PasteUndoableEdit extends C
             else if (content instanceof ObjEntity) {
                 rAction.removeObjEntity(map, (ObjEntity) content);
             }
+            else if (content instanceof Embeddable) {
+                rAction.removeEmbeddable(map, (Embeddable) content);
+            }
             else if (content instanceof Query) {
                 rAction.removeQuery(map, (Query) content);
             }