Author: johnthuss Date: Sun Jul 15 20:16:43 2012 New Revision: 1361783 URL: http://svn.apache.org/viewvc?rev=1361783&view=rev Log: CAY-1647 Easily switch to/from ObjEntity and DbEntity in Modeler
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntityCounterpartAction.java Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipTab.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeTab.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipTab.java cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original) +++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Sun Jul 15 20:16:43 2012 @@ -17,6 +17,7 @@ CAY-1717 [PATCH] Implement JDBC compatib CAY-1718 Remove everything deprecated in 3.1 CAY-1724 Add 'Property' class for easier and better Expression creation CAY-1646 Synchronize tabs in Modeler between ObjEntity and DbEntity editor panes +CAY-1647 Easily switch to/from ObjEntity and DbEntity in Modeler Bug Fixes: Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java?rev=1361783&view=auto ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java (added) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DbEntityCounterpartAction.java Sun Jul 15 20:16:43 2012 @@ -0,0 +1,126 @@ +/***************************************************************** + * 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.modeler.action; + +import java.awt.event.ActionEvent; +import java.util.Iterator; + +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreePath; + +import org.apache.cayenne.configuration.ConfigurationNode; +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.map.Entity; +import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.CayenneModelerFrame; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.ProjectTreeModel; +import org.apache.cayenne.modeler.editor.EditorView; +import org.apache.cayenne.modeler.event.EntityDisplayEvent; +import org.apache.cayenne.modeler.util.CayenneAction; + +public class DbEntityCounterpartAction extends CayenneAction { + + public static String getActionName() { + return "View related ObjEntity"; + } + + public DbEntityCounterpartAction(Application application) { + super(getActionName(), application); + } + + public String getIconName() { + return "icon-move_up.gif"; + } + + /** + * @see org.apache.cayenne.modeler.util.CayenneAction#performAction(ActionEvent) + */ + public void performAction(ActionEvent e) { + viewCounterpartEntity(); + } + + protected void viewCounterpartEntity() { + ProjectController mediator = getProjectController(); + + DbEntity dbEntity = mediator.getCurrentDbEntity(); + + if (dbEntity == null) { + return; + } + + Iterator<ObjEntity> it = dbEntity.getDataMap().getMappedEntities(dbEntity).iterator(); + if (!it.hasNext()) { + return; + } + + ObjEntity entity = it.next(); + + TreePath path = buildTreePath(entity); + editor().getProjectTreeView().getSelectionModel().setSelectionPath(path); + + EntityDisplayEvent event = new EntityDisplayEvent( + editor().getProjectTreeView(), + entity, + entity.getDataMap(), + (DataChannelDescriptor) getProjectController().getProject().getRootNode()); + getProjectController().fireObjEntityDisplayEvent(event); + } + + public static EditorView editor() { + return ((CayenneModelerFrame) Application + .getInstance() + .getFrameController() + .getView()).getView(); + } + + /** + * Builds a tree path for a given path. Urgent for later selection. + * + * @param path + * @return tree path + */ + public static TreePath buildTreePath(Entity entity) { + DataChannelDescriptor domain = (DataChannelDescriptor) Application + .getInstance() + .getProject() + .getRootNode(); + + Object[] path = new Object[] {domain, entity.getDataMap(), entity}; + + Object[] mutableTreeNodes = new Object[path.length]; + mutableTreeNodes[0] = ((ProjectTreeModel) editor().getProjectTreeView().getModel()) + .getRootNode(); + + Object[] helper; + for (int i = 1; i < path.length; i++) { + helper = new Object[i]; + for (int j = 0; j < i;) { + helper[j] = path[++j]; + } + mutableTreeNodes[i] = ((ProjectTreeModel) editor() + .getProjectTreeView() + .getModel()).getNodeForObjectPath(helper); + } + return new TreePath(mutableTreeNodes); + } +} Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java Sun Jul 15 20:16:43 2012 @@ -94,6 +94,8 @@ public class DefaultActionManager implem // end callback-related actions registerAction(new DbEntitySyncAction(application)); registerAction(new ObjEntitySyncAction(application)); + registerAction(new DbEntityCounterpartAction(application)); + registerAction(new ObjEntityCounterpartAction(application)); registerAction(new ImportDBAction(application)); registerAction(new InferRelationshipsAction(application)); registerAction(new ImportEOModelAction(application)); @@ -178,6 +180,7 @@ public class DefaultActionManager implem ObjEntitySyncAction.class.getName(), CreateAttributeAction.class.getName(), CreateRelationshipAction.class.getName(), + ObjEntityCounterpartAction.class.getName(), ShowGraphEntityAction.class.getName())); DB_ENTITY_ACTIONS = new HashSet<String>(DATA_MAP_ACTIONS); @@ -186,6 +189,7 @@ public class DefaultActionManager implem CreateAttributeAction.class.getName(), CreateRelationshipAction.class.getName(), DbEntitySyncAction.class.getName(), + DbEntityCounterpartAction.class.getName(), ShowGraphEntityAction.class.getName())); EMBEDDABLE_ACTIONS = new HashSet<String>(DATA_MAP_ACTIONS); Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntityCounterpartAction.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntityCounterpartAction.java?rev=1361783&view=auto ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntityCounterpartAction.java (added) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ObjEntityCounterpartAction.java Sun Jul 15 20:16:43 2012 @@ -0,0 +1,84 @@ +/***************************************************************** + * 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.modeler.action; + +import java.awt.event.ActionEvent; +import java.util.Iterator; + +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreePath; + +import org.apache.cayenne.configuration.ConfigurationNode; +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.map.Entity; +import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.CayenneModelerFrame; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.ProjectTreeModel; +import org.apache.cayenne.modeler.editor.EditorView; +import org.apache.cayenne.modeler.event.EntityDisplayEvent; +import org.apache.cayenne.modeler.util.CayenneAction; + +public class ObjEntityCounterpartAction extends CayenneAction { + + public static String getActionName() { + return "View related DbEntity"; + } + + public ObjEntityCounterpartAction(Application application) { + super(getActionName(), application); + } + + public String getIconName() { + return "icon-move_down.gif"; + } + + /** + * @see org.apache.cayenne.modeler.util.CayenneAction#performAction(ActionEvent) + */ + public void performAction(ActionEvent e) { + viewCounterpartEntity(); + } + + protected void viewCounterpartEntity() { + ProjectController mediator = getProjectController(); + + ObjEntity objEntity = mediator.getCurrentObjEntity(); + + if (objEntity == null) { + return; + } + + DbEntity entity = objEntity.getDbEntity(); + + TreePath path = DbEntityCounterpartAction.buildTreePath(entity); + DbEntityCounterpartAction.editor().getProjectTreeView().getSelectionModel().setSelectionPath(path); + + EntityDisplayEvent event = new EntityDisplayEvent( + DbEntityCounterpartAction.editor().getProjectTreeView(), + entity, + entity.getDataMap(), + (DataChannelDescriptor) getProjectController().getProject().getRootNode()); + getProjectController().fireDbEntityDisplayEvent(event); + } + +} Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java Sun Jul 15 20:16:43 2012 @@ -63,6 +63,7 @@ import org.apache.cayenne.modeler.action import org.apache.cayenne.modeler.action.CopyAttributeAction; import org.apache.cayenne.modeler.action.CreateAttributeAction; import org.apache.cayenne.modeler.action.CutAttributeAction; +import org.apache.cayenne.modeler.action.ObjEntityCounterpartAction; import org.apache.cayenne.modeler.action.ObjEntitySyncAction; import org.apache.cayenne.modeler.action.PasteAction; import org.apache.cayenne.modeler.action.RemoveAttributeAction; @@ -105,6 +106,7 @@ public class ObjEntityAttributeTab exten toolBar.add(actionManager.getAction(CreateAttributeAction.class).buildButton()); toolBar.add(actionManager.getAction(ObjEntitySyncAction.class).buildButton()); + toolBar.add(actionManager.getAction(ObjEntityCounterpartAction.class).buildButton()); toolBar.addSeparator(); Icon ico = ModelerUtil.buildIcon("icon-info.gif"); Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipTab.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipTab.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipTab.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipTab.java Sun Jul 15 20:16:43 2012 @@ -62,6 +62,7 @@ import org.apache.cayenne.modeler.action import org.apache.cayenne.modeler.action.CopyRelationshipAction; import org.apache.cayenne.modeler.action.CreateRelationshipAction; import org.apache.cayenne.modeler.action.CutRelationshipAction; +import org.apache.cayenne.modeler.action.ObjEntityCounterpartAction; import org.apache.cayenne.modeler.action.ObjEntitySyncAction; import org.apache.cayenne.modeler.action.PasteAction; import org.apache.cayenne.modeler.action.RemoveRelationshipAction; @@ -125,6 +126,7 @@ public class ObjEntityRelationshipTab ex .getAction(CreateRelationshipAction.class) .buildButton()); toolBar.add(actionManager.getAction(ObjEntitySyncAction.class).buildButton()); + toolBar.add(actionManager.getAction(ObjEntityCounterpartAction.class).buildButton()); toolBar.addSeparator(); Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityTab.java Sun Jul 15 20:16:43 2012 @@ -53,6 +53,7 @@ import org.apache.cayenne.modeler.Projec import org.apache.cayenne.modeler.action.ActionManager; import org.apache.cayenne.modeler.action.CreateAttributeAction; import org.apache.cayenne.modeler.action.CreateRelationshipAction; +import org.apache.cayenne.modeler.action.ObjEntityCounterpartAction; import org.apache.cayenne.modeler.action.ObjEntitySyncAction; import org.apache.cayenne.modeler.dialog.objentity.ClassNameUpdater; import org.apache.cayenne.modeler.dialog.validator.DuplicatedAttributesDialog; @@ -141,6 +142,7 @@ public class ObjEntityTab extends JPanel .buildButton()); toolBar.addSeparator(); toolBar.add(actionManager.getAction(ShowGraphEntityAction.class).buildButton()); + toolBar.add(actionManager.getAction(ObjEntityCounterpartAction.class).buildButton()); add(toolBar, BorderLayout.NORTH); // create widgets Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeTab.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeTab.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeTab.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeTab.java Sun Jul 15 20:16:43 2012 @@ -45,6 +45,7 @@ import org.apache.cayenne.modeler.action import org.apache.cayenne.modeler.action.CreateAttributeAction; import org.apache.cayenne.modeler.action.CreateObjEntityAction; import org.apache.cayenne.modeler.action.CutAttributeAction; +import org.apache.cayenne.modeler.action.DbEntityCounterpartAction; import org.apache.cayenne.modeler.action.DbEntitySyncAction; import org.apache.cayenne.modeler.action.PasteAction; import org.apache.cayenne.modeler.action.RemoveAttributeAction; @@ -55,7 +56,6 @@ import org.apache.cayenne.modeler.event. import org.apache.cayenne.modeler.event.TablePopupHandler; import org.apache.cayenne.modeler.pref.TableColumnPreferences; import org.apache.cayenne.modeler.util.CayenneTable; -import org.apache.cayenne.modeler.util.WidgetFactory; import org.apache.cayenne.modeler.util.ModelerUtil; import org.apache.cayenne.modeler.util.PanelFactory; import org.apache.cayenne.modeler.util.UIUtil; @@ -99,7 +99,10 @@ public class DbEntityAttributeTab extend .getActionManager() .getAction(DbEntitySyncAction.class) .buildButton()); - + toolBar.add(app + .getActionManager() + .getAction(DbEntityCounterpartAction.class) + .buildButton()); toolBar.addSeparator(); toolBar.addSeparator(); Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipTab.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipTab.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipTab.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipTab.java Sun Jul 15 20:16:43 2012 @@ -57,6 +57,7 @@ import org.apache.cayenne.modeler.action import org.apache.cayenne.modeler.action.CreateObjEntityAction; import org.apache.cayenne.modeler.action.CreateRelationshipAction; import org.apache.cayenne.modeler.action.CutRelationshipAction; +import org.apache.cayenne.modeler.action.DbEntityCounterpartAction; import org.apache.cayenne.modeler.action.DbEntitySyncAction; import org.apache.cayenne.modeler.action.PasteAction; import org.apache.cayenne.modeler.action.RemoveRelationshipAction; @@ -129,6 +130,7 @@ public class DbEntityRelationshipTab ext .getAction(CreateRelationshipAction.class) .buildButton()); toolBar.add(actionManager.getAction(DbEntitySyncAction.class).buildButton()); + toolBar.add(actionManager.getAction(DbEntityCounterpartAction.class).buildButton()); toolBar.addSeparator(); Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java?rev=1361783&r1=1361782&r2=1361783&view=diff ============================================================================== --- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java (original) +++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java Sun Jul 15 20:16:43 2012 @@ -43,6 +43,7 @@ import org.apache.cayenne.modeler.action import org.apache.cayenne.modeler.action.CreateAttributeAction; import org.apache.cayenne.modeler.action.CreateObjEntityAction; import org.apache.cayenne.modeler.action.CreateRelationshipAction; +import org.apache.cayenne.modeler.action.DbEntityCounterpartAction; import org.apache.cayenne.modeler.action.DbEntitySyncAction; import org.apache.cayenne.modeler.editor.ExistingSelectionProcessor; import org.apache.cayenne.modeler.event.DbEntityDisplayListener; @@ -105,6 +106,7 @@ public class DbEntityTab extends JPanel .buildButton()); toolBar.addSeparator(); toolBar.add(actionManager.getAction(ShowGraphEntityAction.class).buildButton()); + toolBar.add(actionManager.getAction(DbEntityCounterpartAction.class).buildButton()); // create widgets name = new TextAdapter(new JTextField()) {