Author: andrey
Date: Mon Nov 17 09:46:24 2008
New Revision: 718292

URL: http://svn.apache.org/viewvc?rev=718292&view=rev
Log:
CAY-1077 ObjRelationship Mapping Dialog Improvements
Fourth dialog edition

Added:
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetController.java
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetDialog.java
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetModel.java
Modified:
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoController.java
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoDialog.java
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoModel.java
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/EntityTreeModel.java
    
cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties

Added: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetController.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetController.java?rev=718292&view=auto
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetController.java
 (added)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetController.java
 Mon Nov 17 09:46:24 2008
@@ -0,0 +1,112 @@
+/*****************************************************************
+ *   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.dialog.objentity;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JOptionPane;
+
+import org.apache.cayenne.map.DbEntity;
+import org.scopemvc.controller.basic.BasicController;
+import org.scopemvc.core.Control;
+import org.scopemvc.core.ControlException;
+
+/**
+ * Controller of a dialog to select source, target and cardinality for 
DbRelationship  
+ */
+public class DbRelationshipTargetController extends BasicController {
+    public static final String SAVE_CONTROL = 
"cayenne.modeler.mapObjRelationship.save.button";
+    public static final String CANCEL_CONTROL = 
"cayenne.modeler.mapObjRelationship.cancel.button";
+    
+    public static final String TOMANY_CONTROL = 
"cayenne.modeler.mapObjRelationship.tomany.checkbox";
+    
+    public static final String SOURCE1_CONTROL = 
"cayenne.modeler.mapObjRelationship.source1.button";
+    public static final String SOURCE2_CONTROL = 
"cayenne.modeler.mapObjRelationship.source2.button";
+    
+    DbEntity source1;
+    DbEntity source2;
+    
+    boolean savePressed;
+    
+    public DbRelationshipTargetController(DbEntity source1, DbEntity source2) {
+        this.source1 = source1;
+        this.source2 = source2;
+        
+        DbRelationshipTargetModel model = new 
DbRelationshipTargetModel(source1, source2);
+        setModel(model);
+    }
+    
+    @Override
+    protected void doHandleControl(Control control) throws ControlException {
+        if (control.matchesID(CANCEL_CONTROL)) {
+            shutdown();
+        }
+        else if (control.matchesID(SAVE_CONTROL)) {
+            save();
+        }
+    }
+    
+    protected void save() {
+        DbRelationshipTargetModel model = (DbRelationshipTargetModel) 
getModel();
+        
+        DbEntity target = model.getTarget();        
+        if (target == null) {
+            JOptionPane.showMessageDialog((Component) getView(), "Please 
select target entity first.",
+                    "Warning", JOptionPane.WARNING_MESSAGE);
+            return;
+        }
+        
+        savePressed = true;
+        shutdown();
+    }
+    
+    /**
+     * Creates and runs the dialog.
+     */
+    @Override
+    public void startup() {
+        DbRelationshipTargetDialog view = new 
DbRelationshipTargetDialog(source1, source2);
+        setView(view);
+        
+        view.getSource1Button().addActionListener(
+           new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                ((DbRelationshipTargetModel) getModel()).setSource(source1, 
true);
+            }
+           });
+        
+        view.getSource2Button().addActionListener(
+           new ActionListener() {
+             public void actionPerformed(ActionEvent e) {
+                ((DbRelationshipTargetModel) getModel()).setSource(source2, 
false);
+             }
+           });
+        
+        view.getSource1Button().setSelected(true);
+        ((DbRelationshipTargetModel) getModel()).setSource(source1, true);
+        
+        super.startup();
+    }
+    
+    boolean isSavePressed() {
+        return savePressed;
+    }
+}

Added: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetDialog.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetDialog.java?rev=718292&view=auto
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetDialog.java
 (added)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetDialog.java
 Mon Nov 17 09:46:24 2008
@@ -0,0 +1,116 @@
+/*****************************************************************
+ *   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.dialog.objentity;
+
+import java.awt.BorderLayout;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JRadioButton;
+
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.modeler.util.PanelFactory;
+import org.scopemvc.view.swing.SAction;
+import org.scopemvc.view.swing.SButton;
+import org.scopemvc.view.swing.SCheckBox;
+import org.scopemvc.view.swing.SComboBox;
+import org.scopemvc.view.swing.SListCellRenderer;
+import org.scopemvc.view.swing.SPanel;
+import org.scopemvc.view.swing.SwingView;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Dialog to select source, target and cardinality for DbRelationship  
+ */
+public class DbRelationshipTargetDialog extends SPanel {
+    JRadioButton source1Button;
+    
+    JRadioButton source2Button;
+    
+    public DbRelationshipTargetDialog(DbEntity source1, DbEntity source2) {
+        init(source1, source2);
+    }
+    
+    protected void init(DbEntity source1, DbEntity source2) {
+        // create widgets
+        SButton saveButton = new SButton(new SAction(
+                DbRelationshipTargetController.SAVE_CONTROL));
+        saveButton.setEnabled(true);
+
+        SButton cancelButton = new SButton(new SAction(
+                DbRelationshipTargetController.CANCEL_CONTROL));
+        cancelButton.setEnabled(true);
+        
+        SComboBox targetCombo = new SComboBox();
+        targetCombo.setSelector(DbRelationshipTargetModel.TARGETS_SELECTOR);
+        
targetCombo.setSelectionSelector(DbRelationshipTargetModel.TARGET_SELECTOR);
+        SListCellRenderer renderer = (SListCellRenderer) 
targetCombo.getRenderer();
+        renderer.setTextSelector("name");
+        
+        source1Button = new JRadioButton();
+        source2Button = new JRadioButton();
+        source2Button.setEnabled(source2 != null);
+        
+        ButtonGroup bg = new ButtonGroup();
+        bg.add(source1Button);
+        bg.add(source2Button);
+        
+        SCheckBox toManyCheckBox = new SCheckBox();
+        toManyCheckBox.setSelector(DbRelationshipTargetModel.TO_MANY_SELECTOR);
+        
+        setDisplayMode(SwingView.MODAL_DIALOG);
+        setTitle("Create New DbRelationship");
+        setLayout(new BorderLayout());
+
+        CellConstraints cc = new CellConstraints();
+        PanelBuilder builder = new PanelBuilder(
+                new FormLayout(
+                        "right:max(100dlu;pref), 3dlu, fill:min(150dlu;pref)",
+                        "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, top:p:grow"));
+        builder.setDefaultDialogBorder();
+        
+        builder.addLabel("Source: " + source1.getName(), cc.xy(1, 1));
+        builder.add(source1Button, cc.xy(3, 1));
+        
+        builder.addLabel("Source: " + (source2 == null ? "" : 
source2.getName()), cc.xy(1, 3));
+        builder.add(source2Button, cc.xy(3, 3));
+        
+        builder.addLabel("Target:", cc.xy(1, 5));
+        builder.add(targetCombo, cc.xywh(3, 5, 1, 1));
+        
+        builder.addLabel("To Many:", cc.xy(1, 7));
+        builder.add(toManyCheckBox, cc.xywh(3, 7, 1, 1));
+        
+        add(builder.getPanel(), BorderLayout.CENTER);
+        add(PanelFactory.createButtonPanel(new JButton[] {
+                saveButton, cancelButton
+            }), BorderLayout.SOUTH);
+    }
+    
+    JRadioButton getSource1Button() {
+        return source1Button;
+    }
+    
+    JRadioButton getSource2Button() {
+        return source2Button;
+    }
+}

Added: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetModel.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetModel.java?rev=718292&view=auto
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetModel.java
 (added)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/DbRelationshipTargetModel.java
 Mon Nov 17 09:46:24 2008
@@ -0,0 +1,91 @@
+/*****************************************************************
+ *   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.dialog.objentity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.modeler.util.Comparators;
+import org.scopemvc.core.ModelChangeTypes;
+import org.scopemvc.core.Selector;
+import org.scopemvc.model.basic.BasicModel;
+
+/**
+ * Model of a dialog to select source, target and cardinality for 
DbRelationship  
+ */
+public class DbRelationshipTargetModel extends BasicModel {
+    public static final Selector TARGET_SELECTOR = 
Selector.fromString("target");
+    
+    public static final Selector TARGETS_SELECTOR = 
Selector.fromString("targets");
+    
+    public static final Selector TO_MANY_SELECTOR = 
Selector.fromString("toMany");
+    
+    protected DbEntity relTarget;
+    protected List<DbEntity> relTargets;
+    
+    protected DbEntity source;
+    
+    protected boolean source1Selected;
+    
+    protected boolean toMany;
+    
+    @SuppressWarnings("unchecked")
+    public DbRelationshipTargetModel(DbEntity source1, DbEntity source2) {
+        this.relTargets = new 
ArrayList<DbEntity>(source1.getDataMap().getDbEntities());
+        Collections.sort(relTargets, Comparators.getNamedObjectComparator());
+        
+        // this sets the right enabled state
+        fireModelChange(ModelChangeTypes.VALUE_CHANGED, TARGETS_SELECTOR);
+    }
+    
+    public List<DbEntity> getTargets() {
+        return relTargets;
+    }
+    
+    public DbEntity getTarget() {
+        return relTarget;
+    }
+    
+    public void setTarget(DbEntity newRelTarget) {
+        this.relTarget = newRelTarget;
+    }
+    
+    public boolean isSource1Selected() {
+        return source1Selected;
+    }
+    
+    public DbEntity getSource() {
+        return source;
+    }
+    
+    public void setSource(DbEntity source, boolean source1) {
+        this.source = source;
+        this.source1Selected = source1;
+    }
+    
+    public boolean isToMany() {
+        return toMany;
+    }
+    
+    public void setToMany(boolean b) {
+        this.toMany = b;
+    }
+}

Modified: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoController.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoController.java?rev=718292&r1=718291&r2=718292&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoController.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoController.java
 Mon Nov 17 09:46:24 2008
@@ -53,8 +53,7 @@
 
     public static final String SAVE_CONTROL = 
"cayenne.modeler.mapObjRelationship.save.button";
     public static final String CANCEL_CONTROL = 
"cayenne.modeler.mapObjRelationship.cancel.button";
-    public static final String NEW_TOONE_CONTROL = 
"cayenne.modeler.mapObjRelationship.newtoone.button";
-    public static final String NEW_TOMANY_CONTROL = 
"cayenne.modeler.mapObjRelationship.newtomany.button";
+    public static final String NEW_REL_CONTROL = 
"cayenne.modeler.mapObjRelationship.newrel.button";
     
     public static final String SELECT_PATH_CONTROL = 
"cayenne.modeler.mapObjRelationship.select.path.button";
     public static final String REVERT_PATH_CONTROL = 
"cayenne.modeler.mapObjRelationship.revert.path.button";
@@ -105,11 +104,8 @@
         else if (control.matchesID(SAVE_CONTROL)) {
             saveMapping();
         }
-        else if (control.matchesID(NEW_TOONE_CONTROL)) {
-            createRelationship(false);
-        }
-        else if (control.matchesID(NEW_TOMANY_CONTROL)) {
-            createRelationship(true);
+        else if (control.matchesID(NEW_REL_CONTROL)) {
+            createRelationship();
         }
         else if (control.matchesID(SELECT_PATH_CONTROL)) {
             selectPath();
@@ -175,29 +171,30 @@
      * ObjRelationship target entity. User is allowed to edit the 
relationship, change its
      * name, and create joins.
      */
-    protected void createRelationship(boolean toMany) {
+    protected void createRelationship() {
         ObjRelationshipInfoModel model = (ObjRelationshipInfoModel) getModel();
         
-        DbEntity target = model.getNewRelTarget();        
-        if (target == null) {
-            JOptionPane.showMessageDialog((Component) getView(), "Please 
select target entity first.",
-                    "Warning", JOptionPane.WARNING_MESSAGE);
+        DbRelationship dbRel = model.getLastRelationship();
+        DbEntity source = dbRel != null ? (DbEntity) dbRel.getTargetEntity() : 
null; 
+        
+        DbRelationshipTargetController targetController = 
+            new DbRelationshipTargetController(model.getStartEntity(), source);
+        targetController.startup();
+        
+        if (!targetController.isSavePressed()) {
             return;
         }
         
-        DbEntity source = model.getStartEntity();
-        DbRelationship dbRel = model.getLastRelationship();
-        if (dbRel != null) {
-            source = (DbEntity) dbRel.getTargetEntity();
-        }
-
-        DbRelationship dbRelationship = (DbRelationship) NamedObjectFactory
-                .createRelationship(source, target, toMany);
+        DbRelationshipTargetModel targetModel = (DbRelationshipTargetModel) 
targetController.getModel();
+        
+        DbRelationship dbRelationship = (DbRelationship) 
NamedObjectFactory.createRelationship(
+                targetModel.getSource(), targetModel.getTarget(), 
targetModel.isToMany());
+        
         // note: NamedObjectFactory doesn't set source or target, just the name
-        dbRelationship.setSourceEntity(source);
-        dbRelationship.setTargetEntity(target);
-        dbRelationship.setToMany(toMany);
-        source.addRelationship(dbRelationship);
+        dbRelationship.setSourceEntity(targetModel.getSource());
+        dbRelationship.setTargetEntity(targetModel.getTarget());
+        dbRelationship.setToMany(targetModel.isToMany());
+        targetModel.getSource().addRelationship(dbRelationship);
 
         // TODO: creating relationship outside of ResolveDbRelationshipDialog 
confuses it
         // to send incorrect event - CHANGE instead of ADD
@@ -206,19 +203,21 @@
 
         dialog.setVisible(true);
         if (dialog.isCancelPressed()) {
-            source.removeRelationship(dbRelationship.getName());
+            
targetModel.getSource().removeRelationship(dbRelationship.getName());
         }
         else {
             MultiColumnBrowser pathBrowser = ((ObjRelationshipInfoDialog) 
getView()).getPathBrowser();
-            Object[] oldPath = pathBrowser.getSelectionPath() == null ?
-                    new Object[0] : pathBrowser.getSelectionPath().getPath();
+            Object[] oldPath = targetModel.isSource1Selected() ?
+                    new Object[] { model.getStartEntity() } : 
pathBrowser.getSelectionPath().getPath();
             
             /**
              * Update the view
              */
             EntityTreeModel treeModel = (EntityTreeModel) 
pathBrowser.getModel();
-            treeModel.invalidateChildren(source);
-            treeModel.invalidateChildren(target);
+            treeModel.invalidate();
+            
+            pathBrowser.setSelectionPath(new TreePath(new Object[] { 
model.getStartEntity() }));
+            pathBrowser.repaint();
             
             Object[] path = new Object[oldPath.length + 1];
             System.arraycopy(oldPath, 0, path, 0, path.length - 1);

Modified: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoDialog.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoDialog.java?rev=718292&r1=718291&r2=718292&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoDialog.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoDialog.java
 Mon Nov 17 09:46:24 2008
@@ -21,7 +21,6 @@
 
 import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.ComponentOrientation;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
@@ -86,22 +85,13 @@
                 ObjRelationshipInfoController.CANCEL_CONTROL));
         cancelButton.setEnabled(true);
 
-        SButton newToOneButton = new SButton(new SAction(
-                ObjRelationshipInfoController.NEW_TOONE_CONTROL));
-        newToOneButton.setEnabled(true);
-        SButton newToManyButton = new SButton(new SAction(
-                ObjRelationshipInfoController.NEW_TOMANY_CONTROL));
-        newToManyButton.setEnabled(true);
+        SButton newRelButton = new SButton(new SAction(
+                ObjRelationshipInfoController.NEW_REL_CONTROL));
+        newRelButton.setEnabled(true);
         
         SButton selectPathButton = new SButton(new SAction(
                 ObjRelationshipInfoController.SELECT_PATH_CONTROL));
         selectPathButton.setEnabled(true);
-        SButton revertPathButton = new SButton(new SAction(
-                ObjRelationshipInfoController.REVERT_PATH_CONTROL));
-        revertPathButton.setEnabled(true);
-        SButton clearPathButton = new SButton(new SAction(
-                ObjRelationshipInfoController.CLEAR_PATH_CONTROL));
-        clearPathButton.setEnabled(true);
         
         STextField relationshipName = new STextField(25);
         
relationshipName.setSelector(ObjRelationshipInfoModel.RELATIONSHIP_NAME_SELECTOR);
@@ -133,12 +123,6 @@
         pathBrowser.setPreferredColumnSize(BROWSER_CELL_DIM);
         pathBrowser.setDefaultRenderer();
         
-        SComboBox newRelCombo = new SComboBox();
-        
newRelCombo.setSelector(ObjRelationshipInfoModel.NEW_REL_TARGETS_SELECTOR);
-        
newRelCombo.setSelectionSelector(ObjRelationshipInfoModel.NEW_REL_TARGET_SELECTOR);
-        renderer = (SListCellRenderer) newRelCombo.getRenderer();
-        renderer.setTextSelector("name");
-        
         // enable/disable map keys for collection type selection
         collectionTypeCombo.addActionListener(new ActionListener() {
 
@@ -156,7 +140,7 @@
         PanelBuilder builder = new PanelBuilder(
                 new FormLayout(
                         "right:max(50dlu;pref), 3dlu, fill:min(150dlu;pref), 
3dlu, 300dlu, 3dlu, fill:min(120dlu;pref)",
-                        "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, 
p, 3dlu, p, 3dlu, top:14dlu, 3dlu, top:p:grow"));
+                        "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, 
p, 3dlu, p, 3dlu, p, 3dlu, top:14dlu, 3dlu, top:p:grow"));
         builder.setDefaultDialogBorder();
 
         builder.addSeparator("ObjRelationship Information", cc.xywh(1, 1, 5, 
1));
@@ -176,45 +160,21 @@
         builder.add(mapKeysCombo, cc.xywh(3, 13, 1, 1));
 
         builder.addSeparator("Mapping to DbRelationships", cc.xywh(1, 15, 5, 
1));
+        
+        JPanel buttonsPane = new JPanel(new FlowLayout(FlowLayout.LEADING));
+        buttonsPane.add(selectPathButton);
+        buttonsPane.add(newRelButton);
+        
+        builder.add(buttonsPane, cc.xywh(1, 17, 5, 1));
         builder.add(new JScrollPane(
                 pathBrowser,
                 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), cc.xywh(1, 17, 5, 
3));
-        
-        PanelBuilder newRelPanelBuilder = new PanelBuilder(
-                new FormLayout(
-                        "right:max(50dlu;pref), 3dlu, fill:150dlu, 3dlu, 
300dlu",
-                        "p, 3dlu, p, 3dlu, p, 3dlu"));
-        newRelPanelBuilder.setDefaultDialogBorder();
-        newRelPanelBuilder.addSeparator("Creating New Db Relationships", 
cc.xywh(1, 1, 5, 1));
-        newRelPanelBuilder.addLabel("Target:", cc.xy(1, 3));
-        newRelPanelBuilder.add(newRelCombo, cc.xywh(3, 3, 1, 1));
-        
-        JPanel buttonsPanel = new JPanel(new BorderLayout());
-
-        JPanel newRelationshipsButtons = new JPanel(new 
FlowLayout(FlowLayout.CENTER));
-        
newRelationshipsButtons.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
-        newRelationshipsButtons.add(newToManyButton);
-        newRelationshipsButtons.add(newToOneButton);
-        
-        JPanel newRelPanel = new JPanel(new BorderLayout());
-        JPanel selectButtonPanel = new JPanel(new 
FlowLayout(FlowLayout.CENTER));
-        
-        selectButtonPanel.add(selectPathButton);
-        selectButtonPanel.add(revertPathButton);
-        selectButtonPanel.add(clearPathButton);
-        newRelPanel.add(selectButtonPanel, BorderLayout.NORTH);
-        newRelPanel.add(newRelPanelBuilder.getPanel(), BorderLayout.CENTER); 
-        
-        buttonsPanel.add(newRelPanel, BorderLayout.NORTH);
-        buttonsPanel.add(newRelationshipsButtons);
-        buttonsPanel.add(PanelFactory.createButtonPanel(new JButton[] {
-                saveButton, cancelButton
-        }), BorderLayout.SOUTH);
-
-
+                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), cc.xywh(1, 19, 5, 
3));
+                
         add(builder.getPanel(), BorderLayout.CENTER);
-        add(buttonsPanel, BorderLayout.SOUTH);
+        add(PanelFactory.createButtonPanel(new JButton[] {
+                saveButton, cancelButton
+            }), BorderLayout.SOUTH);
     }
 
     /**
@@ -250,12 +210,8 @@
                             /**
                              * We do not allow A->B->A chains, where 
relationships are to-one
                              */
-                            Relationship prev = (Relationship) node;
-                            
-                            return !(!prev.isToMany() && !rel.isToMany() &&
-                                    rel.getTargetEntity() != null &&
-                                    prev.getSourceEntity() == 
rel.getTargetEntity() &&
-                                    prev.getSourceEntity() != 
prev.getTargetEntity());
+                            DbRelationship prev = (DbRelationship) node;
+                            return !(!prev.isToMany() && 
prev.getReverseRelationship() == rel);
                         }
                         
                     });

Modified: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoModel.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoModel.java?rev=718292&r1=718291&r2=718292&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoModel.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjRelationshipInfoModel.java
 Mon Nov 17 09:46:24 2008
@@ -62,10 +62,6 @@
     public static final Selector OBJECT_TARGETS_SELECTOR = Selector
             .fromString("objectTargets");
     
-    public static final Selector NEW_REL_TARGET_SELECTOR = 
Selector.fromString("newRelTarget");
-    
-    public static final Selector NEW_REL_TARGETS_SELECTOR = 
Selector.fromString("newRelTargets");
-    
     public static final Selector RELATIONSHIP_NAME_SELECTOR = Selector
             .fromString("relationshipName");
     public static final Selector TARGET_COLLECTIONS_SELECTOR = Selector
@@ -98,8 +94,6 @@
     protected String mapKey;
     
     protected String currentPath;
-    protected DbEntity newRelTarget;
-    protected List<DbEntity> newRelTargets;
 
     @SuppressWarnings("unchecked")
     public ObjRelationshipInfoModel(ObjRelationship relationship) {
@@ -129,9 +123,6 @@
         targetCollections.add(COLLECTION_TYPE_MAP);
         targetCollections.add(COLLECTION_TYPE_SET);
         
-        this.newRelTargets = new 
ArrayList<DbEntity>(relationship.getSourceEntity().getDataMap().getDbEntities());
-        Collections.sort(newRelTargets, 
Comparators.getNamedObjectComparator());
-
         this.mapKeys = new ArrayList<String>();
         initMapKeys();
 
@@ -511,16 +502,4 @@
     public List<String> getTargetCollections() {
         return targetCollections;
     }
-    
-    public List<DbEntity> getNewRelTargets() {
-        return newRelTargets;
-    }
-    
-    public DbEntity getNewRelTarget() {
-        return newRelTarget;
-    }
-    
-    public void setNewRelTarget(DbEntity newRelTarget) {
-        this.newRelTarget = newRelTarget;
-    }
 }

Modified: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/EntityTreeModel.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/EntityTreeModel.java?rev=718292&r1=718291&r2=718292&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/EntityTreeModel.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/EntityTreeModel.java
 Mon Nov 17 09:46:24 2008
@@ -105,7 +105,7 @@
         }
 
         synchronized (sortedChildren) {
-            Object key = entity;
+            Object key = node;
             Object[] sortedForNode = sortedChildren.get(key);
 
             if (sortedForNode == null) {
@@ -146,9 +146,22 @@
     /**
      * Removes children cache for specified entity.
      */
+    public void invalidate() {
+        synchronized (sortedChildren) {
+            sortedChildren.clear();
+        }
+    }
+    
+    /**
+     * Removes children cache for specified entity.
+     */
     public void invalidateChildren(Entity entity) {
         synchronized (sortedChildren) {
             sortedChildren.remove(entity);
+            
+            for (Relationship rel : entity.getRelationships()) {
+                sortedChildren.remove(rel);
+            }
         }
     }
 

Modified: 
cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties?rev=718292&r1=718291&r2=718292&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/cayennemodeler-strings.properties
 Mon Nov 17 09:46:24 2008
@@ -95,19 +95,19 @@
 cayenne.modeler.mapObjRelationship.cancel.button = Cancel
 cayenne.modeler.mapObjRelationship.cancel.button.ShortDescription = Cancel
 
-cayenne.modeler.mapObjRelationship.newtoone.button = New To-One DbRelationship
-cayenne.modeler.mapObjRelationship.newtoone.button.ShortDescription = New 
To-One DbRelationship
+cayenne.modeler.mapObjRelationship.newrel.button = New DbRelationship
+cayenne.modeler.mapObjRelationship.newrel.button.ShortDescription = New 
DbRelationship
 
-cayenne.modeler.mapObjRelationship.newtomany.button = New To-Many 
DbRelationship
-cayenne.modeler.mapObjRelationship.newtomany.button.ShortDescription = New 
To-Many DbRelationship
-
-cayenne.modeler.mapObjRelationship.select.path.button = Save Path
-cayenne.modeler.mapObjRelationship.select.path.button.ShortDescription = Save 
Path
+cayenne.modeler.mapObjRelationship.select.path.button = Select Path
+cayenne.modeler.mapObjRelationship.select.path.button.ShortDescription = 
Select Path
 cayenne.modeler.mapObjRelationship.revert.path.button = Revert Path
 cayenne.modeler.mapObjRelationship.revert.path.button.ShortDescription = 
Revert Path
 cayenne.modeler.mapObjRelationship.clear.path.button = Clear Path
 cayenne.modeler.mapObjRelationship.clear.path.button.ShortDescription = Clear 
Path
 
+cayenne.modeler.mapObjRelationship.source1.button = 
+cayenne.modeler.mapObjRelationship.source2.button =
+
 // QueryType Dialog
 cayenne.modeler.queryType.create.button = Create
 cayenne.modeler.queryType.create.button.ShortDescription = Create


Reply via email to