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/30 16:35:11 UTC
svn commit: r831335 - in /cayenne/main/branches/STABLE-3.0/framework:
cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/
cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/
cayenne-modeler/src/main/jav...
Author: aadamchik
Date: Fri Oct 30 15:35:10 2009
New Revision: 831335
URL: http://svn.apache.org/viewvc?rev=831335&view=rev
Log:
CAY-1295 Finish modeler support for embeddables and embedded attributes
two more patches from Olga, combined into 1 commit
(cherry picked from commit 725056399c0c0bf52bf6c6c0b4686bca005b20de)
Added:
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableValidator.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java
Modified:
cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.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/dialog/objentity/ObjAttributeInfoDialogView.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java
cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java
Added: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableValidator.java?rev=831335&view=auto
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableValidator.java (added)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableValidator.java Fri Oct 30 15:35:10 2009
@@ -0,0 +1,87 @@
+/*****************************************************************
+ * 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.project.validator;
+
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.project.ProjectPath;
+import org.apache.cayenne.util.Util;
+
+public class EmbeddableValidator extends TreeNodeValidator {
+
+ public EmbeddableValidator() {
+ super();
+ }
+
+ @Override
+ public void validateObject(ProjectPath path, Validator validator) {
+ Embeddable emb = (Embeddable) path.getObject();
+ validateName(emb, path,validator);
+ }
+
+ protected void validateName(Embeddable emb, ProjectPath path, Validator validator) {
+ String name = emb.getClassName();
+
+ // Must have name
+ if (Util.isEmptyString(name)) {
+ validator.registerError("Unnamed Embeddable.", path);
+ return;
+ }
+
+ DataMap map = (DataMap) path.getObjectParent();
+ if (map == null) {
+ return;
+ }
+
+ // check for duplicate names in the parent context
+ for (Embeddable otherEmb : map.getEmbeddables()) {
+ if (otherEmb == emb) {
+ continue;
+ }
+
+ if (name.equals(otherEmb.getClassName())) {
+ validator.registerError("Duplicate Embeddable name: " + name + ".", path);
+ break;
+ }
+ }
+
+ // check for dupliucates in other DataMaps
+ DataDomain domain = path.firstInstanceOf(DataDomain.class);
+ if (domain != null) {
+ for (DataMap nextMap : domain.getDataMaps()) {
+ if (nextMap == map) {
+ continue;
+ }
+
+ Embeddable conflictingEmbeddable = nextMap.getEmbeddable(name);
+ if (conflictingEmbeddable != null) {
+
+ validator.registerWarning(
+ "Duplicate Embeddable name in another DataMap: "
+ + name
+ + ".",
+ path);
+ break;
+ }
+ }
+ }
+ }
+
+}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java?rev=831335&r1=831334&r2=831335&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java Fri Oct 30 15:35:10 2009
@@ -25,6 +25,7 @@
import org.apache.cayenne.map.DbAttribute;
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.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
@@ -54,6 +55,7 @@
protected static final DbAttributeValidator dbAttrValidator = new DbAttributeValidator();
protected static final DbRelationshipValidator dbRelValidator = new DbRelationshipValidator();
protected static final EmbeddableAttributeValidator embeddableAttributeValidator = new EmbeddableAttributeValidator();
+ protected static final EmbeddableValidator embeddableValidator = new EmbeddableValidator();
protected static final ProcedureValidator procedureValidator = new ProcedureValidator();
@@ -72,7 +74,10 @@
Object validatedObj = path.getObject();
TreeNodeValidator validatorObj = null;
- if (validatedObj instanceof EmbeddableAttribute) {
+ if (validatedObj instanceof Embeddable) {
+ validatorObj = embeddableValidator;
+ }
+ else if (validatedObj instanceof EmbeddableAttribute) {
validatorObj = embeddableAttributeValidator;
}
else if (validatedObj instanceof ObjAttribute) {
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=831335&r1=831334&r2=831335&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 Fri Oct 30 15:35:10 2009
@@ -44,6 +44,7 @@
import javax.swing.tree.TreePath;
import org.apache.cayenne.map.Attribute;
+import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
@@ -100,18 +101,18 @@
this.row = row;
this.stringToEmbeddables = new HashMap<String, Embeddable>();
this.embeddableNames = new ArrayList<String>();
- Iterator it = mediator.getProject().treeNodes();
+
+ Iterator it = mediator.getCurrentDataDomain().getDataMaps().iterator();
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];
+ DataMap dataMap = (DataMap) it.next();
+ Iterator<Embeddable> embs = dataMap.getEmbeddables().iterator();
+ while (embs.hasNext()) {
+ Embeddable emb = (Embeddable) embs.next();
stringToEmbeddables.put(emb.getClassName(), emb);
embeddableNames.add(emb.getClassName());
}
}
-
+
initController(model.getAttribute(row));
}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.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/ObjAttributeInfoDialogView.java?rev=831335&r1=831334&r2=831335&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java Fri Oct 30 15:35:10 2009
@@ -108,11 +108,10 @@
CellConstraints cc = new CellConstraints();
final PanelBuilder builder = new PanelBuilder(
new FormLayout(
- "right:max(50dlu;pref), 3dlu, fill:min(200dlu;pref), 15dlu, right:max(30dlu;pref), 3dlu, 185dlu, "
- + "3dlu, 20dlu, 3dlu, fill:min(70dlu;pref)",
+ "right:max(50dlu;pref), 3dlu, 200dlu, 15dlu, right:max(30dlu;pref), 3dlu, 200dlu",
"p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 6dlu, p, 6dlu, p, 3dlu, fill:p:grow"));
builder.setDefaultDialogBorder();
- builder.addSeparator("ObjAttribute Information", cc.xywh(1, 1, 11, 1));
+ builder.addSeparator("ObjAttribute Information", cc.xywh(1, 1, 7, 1));
builder.addLabel("Attribute:", cc.xy(1, 3));
builder.add(attributeName, cc.xywh(3, 3, 1, 1));
@@ -129,13 +128,13 @@
builder.addLabel("Type:", cc.xy(1, 11));
builder.add(type, cc.xywh(3, 11, 1, 1));
- builder.addSeparator("Mapping to Attributes", cc.xywh(1, 13, 10, 1));
+ builder.addSeparator("Mapping to Attributes", cc.xywh(1, 13, 7, 1));
typeManagerPane = new JPanel();
typeManagerPane.setLayout(new CardLayout());
final FormLayout fL = new FormLayout(
- "483dlu ",
+ "493dlu ",
"p, 3dlu, fill:min(128dlu;pref):grow");
// panel for Flattened attribute
@@ -155,7 +154,7 @@
// panel for embeddable attribute
final FormLayout fLEmb = new FormLayout(
- "483dlu ",
+ "493dlu ",
"fill:min(140dlu;pref):grow");
final PanelBuilder embeddablePane = new PanelBuilder(fLEmb);
@@ -168,7 +167,7 @@
typeManagerPane.add(builderPathPane.getPanel(), FLATTENED_PANEL);
typeManagerPane.add(embeddablePane.getPanel(), EMBEDDABLE_PANEL);
- builder.add(typeManagerPane, cc.xywh(1, 15, 11, 1));
+ builder.add(typeManagerPane, cc.xywh(1, 15, 7, 1));
add(builder.getPanel(), BorderLayout.CENTER);
Added: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java?rev=831335&view=auto
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java (added)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableErrorMsg.java Fri Oct 30 15:35:10 2009
@@ -0,0 +1,62 @@
+/*****************************************************************
+ * 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.validator;
+
+import javax.swing.JFrame;
+
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
+import org.apache.cayenne.project.validator.ValidationInfo;
+
+
+public class EmbeddableErrorMsg extends ValidationDisplayHandler {
+
+ protected DataMap map;
+ protected Embeddable embeddable;
+
+ public EmbeddableErrorMsg(ValidationInfo result) {
+ super(result);
+
+
+ Object[] path = result.getPath().getPath();
+ int len = path.length;
+
+ if (len >= 1) {
+ embeddable = (Embeddable) path[len - 1];
+ }
+
+ if (len >= 2) {
+ map = (DataMap) path[len - 2];
+ }
+
+ if (len >= 3) {
+ domain = (DataDomain) path[len - 3];
+ }
+ }
+
+ @Override
+ public void displayField(ProjectController mediator, JFrame frame) {
+ EmbeddableDisplayEvent event = new EmbeddableDisplayEvent(frame, embeddable, map, domain);
+ mediator.fireEmbeddableDisplayEvent(event);
+ }
+
+}
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java?rev=831335&r1=831334&r2=831335&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java Fri Oct 30 15:35:10 2009
@@ -25,6 +25,7 @@
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.map.Attribute;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.EmbeddableAttribute;
import org.apache.cayenne.map.Entity;
import org.apache.cayenne.map.Procedure;
@@ -56,7 +57,10 @@
Object validatedObj = result.getValidatedObject();
ValidationDisplayHandler msg = null;
- if (validatedObj instanceof Attribute) {
+ if (validatedObj instanceof Embeddable) {
+ msg = new EmbeddableErrorMsg(result);
+ }
+ else if (validatedObj instanceof Attribute) {
msg = new AttributeErrorMsg(result);
}
else if (validatedObj instanceof EmbeddableAttribute) {
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java?rev=831335&r1=831334&r2=831335&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableTab.java Fri Oct 30 15:35:10 2009
@@ -19,13 +19,20 @@
package org.apache.cayenne.modeler.editor;
import java.awt.BorderLayout;
+import java.util.Collection;
import java.util.EventObject;
+import java.util.Iterator;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.map.DataMap;
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;
import org.apache.cayenne.map.event.EmbeddableEvent;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
@@ -95,31 +102,77 @@
}
Embeddable embeddable = mediator.getCurrentEmbeddable();
-
+
if (embeddable == null) {
return;
}
-
+
if (Util.nullSafeEquals(newClassName, embeddable.getClassName())) {
return;
}
-
- if(newClassName == null){
- throw new ValidationException("Entity name is required.");
- } else if (embeddable.getDataMap().getEmbeddable(newClassName) == null) {
+
+ if (newClassName == null) {
+ throw new ValidationException("Embeddable name is required.");
+ }
+ else if (embeddable.getDataMap().getEmbeddable(newClassName) == null) {
+
+ // if newClassName dupliucates in other DataMaps
+ DataDomain domain = mediator.getCurrentDataDomain();
+ if (domain != null) {
+ for (DataMap nextMap : domain.getDataMaps()) {
+ if (nextMap == embeddable.getDataMap()) {
+ continue;
+ }
+
+ Embeddable conflictingEmbeddable = nextMap.getEmbeddable(newClassName);
+ if (conflictingEmbeddable != null) {
+ throw new ValidationException(
+ "Duplicate Embeddable name in another DataMap: "
+ + newClassName
+ + ".");
+ }
+ }
+ }
+
// completely new name, set new name for embeddable
- EmbeddableEvent e = new EmbeddableEvent(this, embeddable, embeddable.getClassName());
+ EmbeddableEvent e = new EmbeddableEvent(this, embeddable, embeddable
+ .getClassName());
+ String oldName = embeddable.getClassName();
embeddable.setClassName(newClassName);
-
+
mediator.fireEmbeddableEvent(e, mediator.getCurrentDataMap());
- } else {
+
+ Iterator it = mediator.getCurrentDataDomain().getDataMaps().iterator();
+ while (it.hasNext()) {
+ DataMap dataMap = (DataMap) it.next();
+ Iterator<ObjEntity> ent = dataMap.getObjEntities().iterator();
+
+ while (ent.hasNext()) {
+
+ Collection<ObjAttribute> attr = ent.next().getAttributes();
+ Iterator<ObjAttribute> attrIt = attr.iterator();
+
+ while (attrIt.hasNext()) {
+ ObjAttribute atribute = attrIt.next();
+ if (atribute.getType()==null || atribute.getType().equals(oldName)) {
+ atribute.setType(newClassName);
+ AttributeEvent ev = new AttributeEvent(this, atribute, atribute
+ .getEntity());
+ mediator.fireObjAttributeEvent(ev);
+ }
+ }
+
+ }
+ }
+
+ }
+ else {
// there is an embeddable with the same name
throw new ValidationException("There is another embeddable with name '"
+ newClassName
+ "'.");
}
-
}
public void currentEmbeddableChanged(EmbeddableDisplayEvent e) {
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=831335&r1=831334&r2=831335&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 Fri Oct 30 15:35:10 2009
@@ -45,6 +45,7 @@
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
+import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
@@ -186,13 +187,12 @@
List<String> embeddableNames = new ArrayList<String>();
List<String> typeNames = new ArrayList<String>();
- Iterator it = mediator.getProject().treeNodes();
+ Iterator it = mediator.getCurrentDataDomain().getDataMaps().iterator();
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];
+ DataMap dataMap = (DataMap) it.next();
+ Iterator<Embeddable> embs = dataMap.getEmbeddables().iterator();
+ while (embs.hasNext()) {
+ Embeddable emb = (Embeddable) embs.next();
embeddableNames.add(emb.getClassName());
}
}