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/25 11:06:53 UTC
svn commit: r829522 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/
framework...
Author: aadamchik
Date: Sun Oct 25 10:06:52 2009
New Revision: 829522
URL: http://svn.apache.org/viewvc?rev=829522&view=rev
Log:
CAY-1260 (Exerimental) Modeler support for embeddables and embedded attributes
patch from Olga Tkachova:
- rewrote the method of saving attribute in ObjAttribute inspector.
- remove In (editable) column for embeddable attributes
- rename the close button in ObjAttribute inspector to cancel
- validation for missing Java type of embeddables
- validation for DbAttribute mapping in EmdeddebleAttribute.
- when changing java package for the DataMap, it update embeddables.
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableAttributeValidator.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/ProjectTraversal.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/ObjAttributeValidator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/AbstractCallbackListenersTab.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTableModel.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=829522&r1=829521&r2=829522&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 Oct 25 10:06:52 2009
@@ -25,6 +25,7 @@
CAY-1236 Allow providing custom INSERT, UPDATE, DELETE query builders
CAY-1241 Add method to ExpressionFactory to match against the primary key of an object or list of objects
CAY-1254 filtering an inExp(a, b) does not work when the path (a) refers to a collection of objects
+CAY-1260 (Exerimental) Modeler support for embeddables and embedded attributes
CAY-1261 Auto-inject values in NEW objects with declared qualifiers
CAY-1263 Cayenne Oracle adapter should automatically strip IN clauses with more than 1000 elements
CAY-1268 Implement 'setStatementFetchSize' for RelationshipQuery
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/ProjectTraversal.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/ProjectTraversal.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/ProjectTraversal.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/ProjectTraversal.java Sun Oct 25 10:06:52 2009
@@ -28,6 +28,7 @@
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;
import org.apache.cayenne.map.Relationship;
@@ -94,6 +95,9 @@
else if (rootNode instanceof Embeddable) {
this.traverseEmbeddable(Collections.singletonList(rootNode).iterator(), path);
}
+ else if (rootNode instanceof EmbeddableAttribute) {
+ this.traverseEmbeddableAttributes(Collections.singletonList(rootNode).iterator(), path);
+ }
else if (rootNode instanceof Attribute) {
this.traverseAttributes(Collections.singletonList(rootNode).iterator(), path);
}
@@ -198,7 +202,7 @@
handler.projectNode(entPath);
if (handler.shouldReadChildren(emd, path)) {
- this.traverseAttributes(emd.getAttributes().iterator(), entPath);
+ this.traverseEmbeddableAttributes(emd.getAttributes().iterator(), entPath);
}
}
}
@@ -270,6 +274,18 @@
handler.projectNode(path.appendToPath(attributes.next()));
}
}
+
+ public void traverseEmbeddableAttributes(Iterator emAttributes, ProjectPath path) {
+ if (sort) {
+ emAttributes = Util.sortedIterator(
+ emAttributes,
+ ProjectTraversal.mapObjectComparator);
+ }
+
+ while (emAttributes.hasNext()) {
+ handler.projectNode(path.appendToPath(emAttributes.next()));
+ }
+ }
public void traverseRelationships(Iterator relationships, ProjectPath path) {
if (sort) {
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableAttributeValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableAttributeValidator.java?rev=829522&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableAttributeValidator.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/EmbeddableAttributeValidator.java Sun Oct 25 10:06:52 2009
@@ -0,0 +1,52 @@
+/*****************************************************************
+ * 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.map.EmbeddableAttribute;
+import org.apache.cayenne.project.ProjectPath;
+import org.apache.cayenne.util.Util;
+
+
+public class EmbeddableAttributeValidator extends TreeNodeValidator {
+
+ public EmbeddableAttributeValidator() {
+ super();
+ }
+
+ @Override
+ public void validateObject(ProjectPath path, Validator validator) {
+ EmbeddableAttribute emAttribute = (EmbeddableAttribute) path.getObject();
+
+ // Must have name
+ if (Util.isEmptyString(emAttribute.getName())) {
+ validator.registerError("Unnamed ObjAttribute.", path);
+ }
+
+ // skip validation of inherited attributes
+ if (path.getObjectParent() != null
+ && path.getObjectParent() != emAttribute.getEmbeddable()) {
+ return;
+ }
+
+ // all attributes must have type
+ if (Util.isEmptyString(emAttribute.getType())) {
+ validator.registerWarning("EmbeddableAttribute has no type.", path);
+ }
+ }
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/ObjAttributeValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/ObjAttributeValidator.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/ObjAttributeValidator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/ObjAttributeValidator.java Sun Oct 25 10:06:52 2009
@@ -19,6 +19,13 @@
package org.apache.cayenne.project.validator;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.EmbeddableAttribute;
+import org.apache.cayenne.map.EmbeddedAttribute;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.project.ProjectPath;
@@ -70,9 +77,55 @@
validator.registerWarning("ObjAttribute has no type.", path);
}
- if (attribute.getEntity() instanceof ObjEntity && ((ObjEntity)attribute.getEntity()).isAbstract()) {
- //nothing, abstract entity does not have to define a dbAttribute
- } else if (attribute.getDbAttribute() == null) {
+ if (attribute.getEntity() instanceof ObjEntity
+ && ((ObjEntity) attribute.getEntity()).isAbstract()) {
+ // nothing, abstract entity does not have to define a dbAttribute
+ }
+ else if (attribute instanceof EmbeddedAttribute) {
+ Map<String, String> attrOverrides = ((EmbeddedAttribute) attribute)
+ .getAttributeOverrides();
+ Embeddable emb = ((EmbeddedAttribute) attribute).getEmbeddable();
+ if (emb == null && ((EmbeddedAttribute) attribute).getType() != null) {
+ validator.registerWarning(
+ "EmbeddedAttribute has incorrect Embeddable.",
+ path);
+ }
+ else if (emb == null && ((EmbeddedAttribute) attribute).getType() == null) {
+ validator.registerWarning("EmbeddedAttribute has no Embeddable.", path);
+ }
+
+ if (emb != null) {
+ Collection<EmbeddableAttribute> embAttributes = emb.getAttributes();
+
+ Iterator<EmbeddableAttribute> it = embAttributes.iterator();
+ while (it.hasNext()) {
+ EmbeddableAttribute embAttr = (EmbeddableAttribute) it.next();
+ String dbAttributeName;
+ if (attrOverrides.size() > 0
+ && attrOverrides.containsKey(embAttr.getName())) {
+ dbAttributeName = attrOverrides.get(embAttr.getName());
+ }
+ else {
+ dbAttributeName = embAttr.getDbAttributeName();
+ }
+
+ if (dbAttributeName == "" || dbAttributeName == null) {
+ validator.registerWarning(
+ "EmbeddedAttribute has no DbAttribute mapping.",
+ path);
+ }
+ else if (((ObjEntity) attribute.getEntity())
+ .getDbEntity()
+ .getAttribute(dbAttributeName) == null) {
+ validator.registerWarning(
+ "EmbeddedAttribute has incorrect DbAttribute mapping.",
+ path);
+ }
+ }
+ }
+
+ }
+ else if (attribute.getDbAttribute() == null) {
validator.registerWarning("ObjAttribute has no DbAttribute mapping.", path);
}
// can't support generated meaningful attributes for now; besides they don't make
@@ -82,5 +135,6 @@
validator.registerWarning("ObjAttribute is mapped to a generated PK: "
+ attribute.getDbAttributeName(), path);
}
+
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/project/validator/TreeNodeValidator.java Sun Oct 25 10:06:52 2009
@@ -25,7 +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.EmbeddedAttribute;
+import org.apache.cayenne.map.EmbeddableAttribute;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
@@ -40,7 +40,6 @@
/**
* Validator of a single node in a project object tree. <i>Do not confuse with
* org.apache.cayenne.access.DataNode. </i>
- *
*/
public abstract class TreeNodeValidator {
@@ -54,6 +53,7 @@
protected static final DbEntityValidator dbEntityValidator = new DbEntityValidator();
protected static final DbAttributeValidator dbAttrValidator = new DbAttributeValidator();
protected static final DbRelationshipValidator dbRelValidator = new DbRelationshipValidator();
+ protected static final EmbeddableAttributeValidator embeddableAttributeValidator = new EmbeddableAttributeValidator();
protected static final ProcedureValidator procedureValidator = new ProcedureValidator();
@@ -71,11 +71,11 @@
public static void validate(ProjectPath path, Validator validator) {
Object validatedObj = path.getObject();
TreeNodeValidator validatorObj = null;
- if (validatedObj instanceof EmbeddedAttribute) {
- //TODO
- return;
+
+ if (validatedObj instanceof EmbeddableAttribute) {
+ validatorObj = embeddableAttributeValidator;
}
- if (validatedObj instanceof ObjAttribute) {
+ else if (validatedObj instanceof ObjAttribute) {
validatorObj = objAttrValidator;
}
else if (validatedObj instanceof ObjRelationship) {
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/datamap/PackageUpdateController.java Sun Oct 25 10:06:52 2009
@@ -19,10 +19,17 @@
package org.apache.cayenne.modeler.dialog.datamap;
-import java.util.Iterator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.EmbeddedAttribute;
+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.map.event.EntityEvent;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.util.Util;
@@ -74,6 +81,25 @@
defaultPackage = defaultPackage + '.';
}
+ Map<String, String> oldNameEmbeddableToNewName = new HashMap<String,String>();
+
+ for (Embeddable embeddable : dataMap.getEmbeddables()) {
+
+ String oldName = embeddable.getClassName();
+
+ Pattern p = Pattern.compile("[.]");
+ String[] tokens = p.split(oldName);
+ String className = tokens[tokens.length-1];
+
+ if (doAll || Util.isEmptyString(oldName) || oldName.indexOf('.') < 0) {
+ EmbeddableEvent e = new EmbeddableEvent(this, embeddable, embeddable.getClassName());
+ String newClassName = defaultPackage + className;
+ oldNameEmbeddableToNewName.put(oldName, newClassName);
+ embeddable.setClassName(newClassName);
+ mediator.fireEmbeddableEvent(e, mediator.getCurrentDataMap());
+ }
+ }
+
for (ObjEntity entity : dataMap.getObjEntities()) {
String oldName = getClassName(entity);
@@ -82,6 +108,16 @@
.getName() : oldName);
setClassName(entity, defaultPackage + className);
}
+
+ for(ObjAttribute attribute: entity.getAttributes()){
+ if(attribute instanceof EmbeddedAttribute){
+ if(oldNameEmbeddableToNewName.size()>0 && oldNameEmbeddableToNewName.containsKey(attribute.getType())){
+ attribute.setType(oldNameEmbeddableToNewName.get(attribute.getType()));
+ AttributeEvent ev = new AttributeEvent(this, attribute, entity);
+ mediator.fireObjAttributeEvent(ev);
+ }
+ }
+ }
}
shutdown();
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java Sun Oct 25 10:06:52 2009
@@ -424,91 +424,91 @@
}
public boolean setPath(boolean isChange) {
- StringBuilder attributePath = new StringBuilder();
- StringBuilder pathStr = new StringBuilder();
- if (((ObjEntity) attribute.getEntity()).getDbEntity() != null) {
- TreePath path = view.getPathBrowser().getSelectionPath();
-
- if (path.getLastPathComponent() instanceof DbAttribute) {
- Object[] pathComponents = path.getPath();
- for (int i = 0; i < pathComponents.length; i++) {
- boolean attrOrRel = true;
- if (pathComponents[i] instanceof DbAttribute) {
- pathStr.append(((DbAttribute) pathComponents[i]).getName());
- attributePath.append(((DbAttribute) pathComponents[i]).getName());
- }
- else if (pathComponents[i] instanceof DbRelationship) {
- pathStr.append(((DbRelationship) pathComponents[i]).getName());
- attributePath.append(((DbRelationship) pathComponents[i])
- .getName());
- }
- else {
- attrOrRel = false;
- }
- if (i != pathComponents.length - 1 && attrOrRel) {
- pathStr.append(" -> ");
- attributePath.append(".");
+ if (isChange()) {
+ attributeSaved.setType(view.getType().getSelectedItem().toString());
+ attributeSaved.setName(view.getAttributeName().getText());
+ }
+
+ if (!(attributeSaved instanceof EmbeddedAttribute)
+ || isRegistredType(attributeSaved.getType())) {
+
+ StringBuilder attributePath = new StringBuilder();
+ StringBuilder pathStr = new StringBuilder();
+ if (((ObjEntity) attribute.getEntity()).getDbEntity() != null) {
+ TreePath path = view.getPathBrowser().getSelectionPath();
+
+ if (path.getLastPathComponent() instanceof DbAttribute) {
+ Object[] pathComponents = path.getPath();
+ for (int i = 0; i < pathComponents.length; i++) {
+ boolean attrOrRel = true;
+ if (pathComponents[i] instanceof DbAttribute) {
+ pathStr.append(((DbAttribute) pathComponents[i]).getName());
+ attributePath.append(((DbAttribute) pathComponents[i])
+ .getName());
+ }
+ else if (pathComponents[i] instanceof DbRelationship) {
+ pathStr
+ .append(((DbRelationship) pathComponents[i])
+ .getName());
+ attributePath.append(((DbRelationship) pathComponents[i])
+ .getName());
+ }
+ else {
+ attrOrRel = false;
+ }
+
+ if (i != pathComponents.length - 1 && attrOrRel) {
+ pathStr.append(" -> ");
+ attributePath.append(".");
+ }
}
}
}
- }
- else {
- view.getCurrentPathLabel().setText("");
- }
+ else {
+ view.getCurrentPathLabel().setText("");
+ }
- view.getCurrentPathLabel().setText(pathStr.toString());
+ view.getCurrentPathLabel().setText(pathStr.toString());
- if (attribute.getDbAttributePath() != null
- && !embeddableNames.contains(view.getType().getSelectedItem().toString())) {
- if (!attribute.getDbAttributePath().equals(attributePath.toString())
- || isChange()) {
+ if (attribute.getDbAttributePath() != null
+ && !embeddableNames.contains(view
+ .getType()
+ .getSelectedItem()
+ .toString())) {
+ if (!attribute.getDbAttributePath().equals(attributePath.toString())) {
- if (isRegistredType(attributeSaved.getType())) {
- attributeSaved.setDbAttributePath(attributePath.toString());
- }
- else {
- attributeSaved.setDbAttributePath("");
- }
- attributeSaved.setName(view.getAttributeName().getText());
- attributeSaved.setType(view.getType().getSelectedItem().toString());
+ if (isRegistredType(attributeSaved.getType())) {
+ attributeSaved.setDbAttributePath(attributePath.toString());
+ }
+ else {
+ attributeSaved.setDbAttributePath("");
+ }
- if (!attribute.getDbAttributePath().equals(attributePath.toString())
- && isChange) {
- model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+ if (!attribute.getDbAttributePath().equals(attributePath.toString())
+ && isChange) {
+ model.setUpdatedValueAt(
+ attributeSaved.getDbAttributePath(),
+ row,
+ 3);
+ }
+ return true;
}
-
- return true;
}
- }
- else {
- if (attributePath.length() > 0 || isChange()) {
- if (isRegistredType(attributeSaved.getType())) {
- attributeSaved.setDbAttributePath(attributePath.toString());
- }
- else {
- attributeSaved.setDbAttributePath("");
-
- if (attributeSaved instanceof EmbeddedAttribute) {
+ else {
+ if (attributePath.length() > 0
+ || (attribute instanceof EmbeddedAttribute && !(attributeSaved instanceof EmbeddedAttribute))) {
- if (embeddableModel.isAttributeOverrideChange()) {
- Map<String, String> overrides = ((EmbeddedAttribute) attributeSaved)
- .getAttributeOverrides();
- Map<String, String> currentOverrAttr = getCurrentOverrideAttribute();
- compareAndSetOverrideInEmbeddedAttribute(
- attributeSaved,
- overrides,
- currentOverrAttr);
- }
+ attributeSaved.setDbAttributePath(attributePath.toString());
+ if (attributePath.length() == 0) {
+ model.setUpdatedValueAt(
+ attributeSaved.getDbAttributePath(),
+ row,
+ 3);
+ return false;
}
-
+ return true;
}
- attributeSaved.setType(view.getType().getSelectedItem().toString());
- attributeSaved.setName(view.getAttributeName().getText());
- if (attributePath.length() > 0 && isChange) {
- model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
- }
- return true;
}
}
return false;
@@ -532,75 +532,119 @@
public void saveMapping() {
if (setPath(false)) {
+
if (JOptionPane.showConfirmDialog(
(Component) getView(),
"You have changed Db Attribute path. Do you want it to be saved?",
"Save ObjAttribute",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
- if ((attributeSaved instanceof EmbeddedAttribute && !(attribute instanceof EmbeddedAttribute))
- || (!(attributeSaved instanceof EmbeddedAttribute) && attribute instanceof EmbeddedAttribute)) {
- model.getEntity().removeAttribute(attribute.getName());
- model.getEntity().addAttribute(attributeSaved);
-
- mediator.fireObjEntityEvent(new EntityEvent(
- this,
- model.getEntity(),
- MapEvent.CHANGE));
-
- EntityDisplayEvent event = new EntityDisplayEvent(
- this,
- mediator.getCurrentObjEntity(),
- mediator.getCurrentDataMap(),
- mediator.getCurrentDataDomain());
-
- mediator.fireObjEntityDisplayEvent(event);
+ if (attribute instanceof EmbeddedAttribute) {
+ changeAttributeObject();
+ }
+ else {
+ model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
+ model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
+ }
- mediator.fireObjAttributeEvent(new AttributeEvent(
- this,
- attributeSaved,
- model.getEntity(),
- MapEvent.CHANGE));
+ model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+ }
+ else {
+ model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
+ model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
+ }
+ }
+ else {
- AttributeDisplayEvent eventAttr = new AttributeDisplayEvent(
- this,
- attributeSaved,
- mediator.getCurrentObjEntity(),
- mediator.getCurrentDataMap(),
- mediator.getCurrentDataDomain());
+ if ((attributeSaved instanceof EmbeddedAttribute && !(attribute instanceof EmbeddedAttribute))
+ || (!(attributeSaved instanceof EmbeddedAttribute) && attribute instanceof EmbeddedAttribute)) {
+ changeAttributeObject();
+ }
+ else if ((attributeSaved instanceof EmbeddedAttribute && attribute instanceof EmbeddedAttribute)
+ || (!(attributeSaved instanceof EmbeddedAttribute) && !(attribute instanceof EmbeddedAttribute))) {
- mediator.fireObjAttributeDisplayEvent(eventAttr);
+ if (attributeSaved instanceof EmbeddedAttribute
+ && embeddableModel.isAttributeOverrideChange()) {
+ Map<String, String> overrides = ((EmbeddedAttribute) attributeSaved)
+ .getAttributeOverrides();
+ Map<String, String> currentOverrAttr = getCurrentOverrideAttribute();
+ compareAndSetOverrideInEmbeddedAttribute(
+ attributeSaved,
+ overrides,
+ currentOverrAttr);
}
- if ((attributeSaved instanceof EmbeddedAttribute && attribute instanceof EmbeddedAttribute)
- || (!(attributeSaved instanceof EmbeddedAttribute) && !(attribute instanceof EmbeddedAttribute))) {
- model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
- model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
- model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
- }
+ model.setUpdatedValueAt(attributeSaved.getName(), row, 1);
+ model.setUpdatedValueAt(attributeSaved.getType(), row, 2);
+ model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+ }
- if (attributeSaved instanceof EmbeddedAttribute
- && attribute instanceof EmbeddedAttribute) {
+ if (attributeSaved instanceof EmbeddedAttribute
+ && attribute instanceof EmbeddedAttribute) {
- if (embeddableModel.isAttributeOverrideChange()) {
- Map<String, String> overrides;
- overrides = ((EmbeddedAttribute) attribute)
- .getAttributeOverrides();
- Map<String, String> currentOverrAttr = ((EmbeddedAttribute) attributeSaved)
- .getAttributeOverrides();
-
- compareAndSetOverrideInEmbeddedAttribute(
- attribute,
- overrides,
- currentOverrAttr);
- }
+ model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+ if (embeddableModel.isAttributeOverrideChange()) {
+ Map<String, String> overrides;
+ overrides = ((EmbeddedAttribute) attribute).getAttributeOverrides();
+ Map<String, String> currentOverrAttr = ((EmbeddedAttribute) attributeSaved)
+ .getAttributeOverrides();
+
+ compareAndSetOverrideInEmbeddedAttribute(
+ attribute,
+ overrides,
+ currentOverrAttr);
}
}
}
closeAction();
}
+ private void changeAttributeObject() {
+
+ if (attributeSaved instanceof EmbeddedAttribute
+ && embeddableModel.isAttributeOverrideChange()) {
+ Map<String, String> overrides = ((EmbeddedAttribute) attributeSaved)
+ .getAttributeOverrides();
+ Map<String, String> currentOverrAttr = getCurrentOverrideAttribute();
+ compareAndSetOverrideInEmbeddedAttribute(
+ attributeSaved,
+ overrides,
+ currentOverrAttr);
+ }
+ if (attributeSaved instanceof EmbeddedAttribute) {
+ attributeSaved.setDbAttributePath(null);
+ model.setUpdatedValueAt(attributeSaved.getDbAttributePath(), row, 3);
+ }
+
+ model.getEntity().removeAttribute(attribute.getName());
+ model.getEntity().addAttribute(attributeSaved);
+
+ mediator.fireObjEntityEvent(new EntityEvent(
+ this,
+ model.getEntity(),
+ MapEvent.CHANGE));
+
+ EntityDisplayEvent event = new EntityDisplayEvent(this, mediator
+ .getCurrentObjEntity(), mediator.getCurrentDataMap(), mediator
+ .getCurrentDataDomain());
+
+ mediator.fireObjEntityDisplayEvent(event);
+
+ mediator.fireObjAttributeEvent(new AttributeEvent(this, attributeSaved, model
+ .getEntity(), MapEvent.CHANGE));
+
+ AttributeDisplayEvent eventAttr = new AttributeDisplayEvent(
+ this,
+ attributeSaved,
+ mediator.getCurrentObjEntity(),
+ mediator.getCurrentDataMap(),
+ mediator.getCurrentDataDomain());
+
+ mediator.fireObjAttributeDisplayEvent(eventAttr);
+
+ }
+
public Map<String, String> getCurrentOverrideAttribute() {
Map<String, String> currentEmbeddableOverrite = new HashMap<String, String>();
Collection<EmbeddableAttribute> embList = embeddableModel.getEmbeddableList();
@@ -857,7 +901,5 @@
((EmbeddedAttribute) attribute).addAttributeOverride(key, currentOverrAttr
.get(key));
}
-
}
-
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialogView.java Sun Oct 25 10:06:52 2009
@@ -81,7 +81,7 @@
this.mediator = mediator;
// create widgets
- this.cancelButton = new JButton("Close");
+ this.cancelButton = new JButton("Cancel");
this.saveButton = new JButton("Done");
this.selectPathButton = new JButton("Select path");
Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java?rev=829522&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/EmbeddableAttributeErrorMsg.java Sun Oct 25 10:06:52 2009
@@ -0,0 +1,72 @@
+/*****************************************************************
+ * 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.map.EmbeddableAttribute;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent;
+import org.apache.cayenne.project.validator.ValidationInfo;
+
+public class EmbeddableAttributeErrorMsg extends ValidationDisplayHandler {
+
+ protected DataMap map;
+ protected Embeddable embeddable;
+ protected EmbeddableAttribute embeddableAttribute;
+
+ public EmbeddableAttributeErrorMsg(ValidationInfo result) {
+ super(result);
+ Object[] path = result.getPath().getPath();
+ int len = path.length;
+
+ if (len >= 1) {
+ embeddableAttribute = (EmbeddableAttribute) path[len - 1];
+ }
+
+ if (len >= 2) {
+ embeddable = (Embeddable) path[len - 2];
+ }
+
+ if (len >= 3) {
+ map = (DataMap) path[len - 3];
+ }
+
+ if (len >= 4) {
+ domain = (DataDomain) path[len - 4];
+ }
+ }
+
+ @Override
+ public void displayField(ProjectController mediator, JFrame frame) {
+ EmbeddableAttributeDisplayEvent event = new EmbeddableAttributeDisplayEvent(
+ frame,
+ embeddable,
+ embeddableAttribute,
+ map,
+ domain);
+
+ mediator.fireEmbeddableDisplayEvent(event);
+ mediator.fireEmbeddableAttributeDisplayEvent(event);
+ }
+
+}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/validator/ValidationDisplayHandler.java Sun Oct 25 10:06:52 2009
@@ -17,7 +17,6 @@
* under the License.
****************************************************************/
-
package org.apache.cayenne.modeler.dialog.validator;
import javax.swing.JFrame;
@@ -26,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.EmbeddableAttribute;
import org.apache.cayenne.map.Entity;
import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.map.ProcedureParameter;
@@ -37,11 +37,12 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-/**
+/**
* Superclass of CayenneModeler validation messages.
*
*/
public abstract class ValidationDisplayHandler {
+
private static Log logObj = LogFactory.getLog(ValidationDisplayHandler.class);
public static final int NO_ERROR = ValidationInfo.VALID;
@@ -58,6 +59,9 @@
if (validatedObj instanceof Attribute) {
msg = new AttributeErrorMsg(result);
}
+ else if (validatedObj instanceof EmbeddableAttribute) {
+ msg = new EmbeddableAttributeErrorMsg(result);
+ }
else if (validatedObj instanceof Relationship) {
msg = new RelationshipErrorMsg(result);
}
@@ -95,8 +99,8 @@
this.validationInfo = validationInfo;
}
- /**
- * Fires event to display the screen where error should be corrected.
+ /**
+ * Fires event to display the screen where error should be corrected.
*/
public abstract void displayField(ProjectController mediator, JFrame frame);
@@ -105,7 +109,7 @@
return validationInfo.getMessage();
}
- /** Returns the severity of the error message.*/
+ /** Returns the severity of the error message. */
public int getSeverity() {
return validationInfo.getSeverity();
}
@@ -131,6 +135,7 @@
}
private static final class NullHanlder extends ValidationDisplayHandler {
+
NullHanlder(ValidationInfo info) {
super(info);
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/AbstractCallbackListenersTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/AbstractCallbackListenersTab.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/AbstractCallbackListenersTab.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/AbstractCallbackListenersTab.java Sun Oct 25 10:06:52 2009
@@ -23,7 +23,6 @@
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTab.java Sun Oct 25 10:06:52 2009
@@ -171,10 +171,6 @@
}
private void setUpTableStructure(EmbeddableAttributeTableModel model) {
- TableColumn inheritanceColumn = table.getColumnModel().getColumn(
- EmbeddableAttributeTableModel.INHERITED);
- inheritanceColumn.setMinWidth(20);
- inheritanceColumn.setMaxWidth(20);
TableColumn nameColumn = table.getColumnModel().getColumn(
EmbeddableAttributeTableModel.OBJ_ATTRIBUTE);
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTableModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTableModel.java?rev=829522&r1=829521&r2=829522&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTableModel.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EmbeddableAttributeTableModel.java Sun Oct 25 10:06:52 2009
@@ -39,10 +39,9 @@
private Embeddable embeddable;
// Columns
- static final int INHERITED = 0;
- static final int OBJ_ATTRIBUTE = 1;
- static final int OBJ_ATTRIBUTE_TYPE = 2;
- static final int DB_ATTRIBUTE = 3;
+ static final int OBJ_ATTRIBUTE = 0;
+ static final int OBJ_ATTRIBUTE_TYPE = 1;
+ static final int DB_ATTRIBUTE = 2;
private CellEditorForAttributeTable cellEditor;
@@ -94,13 +93,11 @@
}
public int getColumnCount() {
- return 4;
+ return 3;
}
public String getColumnName(int column) {
switch (column) {
- case INHERITED:
- return "In";
case OBJ_ATTRIBUTE:
return "ObjAttribute";
case OBJ_ATTRIBUTE_TYPE:
@@ -115,10 +112,7 @@
public Object getValueAt(int row, int column) {
EmbeddableAttribute attribute = getEmbeddableAttribute(row);
- if (column == INHERITED) {
- return null;
- }
- else if (column == OBJ_ATTRIBUTE) {
+ if (column == OBJ_ATTRIBUTE) {
return attribute.getName();
}
else if (column == OBJ_ATTRIBUTE_TYPE) {