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