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 2014/04/12 10:06:58 UTC
svn commit: r1586832 - in /cayenne/main/trunk:
cayenne-project/src/main/java/org/apache/cayenne/project/validation/
cayenne-server/src/main/java/org/apache/cayenne/validation/
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/
modeler/ca...
Author: aadamchik
Date: Sat Apr 12 08:06:57 2014
New Revision: 1586832
URL: http://svn.apache.org/r1586832
Log:
CAY-1795 "Invisible" ObjAttribute in subclass
patch by Oleg Artyukevich - ModelerObjAttribute_4.patch
Added:
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/AttributeValidationFailure.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/ObjAttributeWrapperValidator.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/ObjAttributeWrapper.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/Wrapper.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveEvent.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveListener.java
Modified:
cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ConfigurationNodeValidator.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/validation/ValidationResult.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/UnsavedChangesDialog.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java
Modified: cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ConfigurationNodeValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ConfigurationNodeValidator.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ConfigurationNodeValidator.java (original)
+++ cayenne/main/trunk/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ConfigurationNodeValidator.java Sat Apr 12 08:06:57 2014
@@ -26,9 +26,9 @@ import org.apache.cayenne.validation.Val
*
* @since 3.1
*/
-abstract class ConfigurationNodeValidator {
+public abstract class ConfigurationNodeValidator {
- void addFailure(
+ public void addFailure(
ValidationResult validationResult,
Object source,
String messageFormat,
@@ -37,4 +37,10 @@ abstract class ConfigurationNodeValidato
String message = String.format(messageFormat, messageParameters);
validationResult.addFailure(new SimpleValidationFailure(source, message));
}
+
+ public void addFailure(
+ ValidationResult validationResult,
+ SimpleValidationFailure failure) {
+ validationResult.addFailure(failure);
+ }
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/validation/ValidationResult.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/validation/ValidationResult.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/validation/ValidationResult.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/validation/ValidationResult.java Sat Apr 12 08:06:57 2014
@@ -102,6 +102,10 @@ public class ValidationResult implements
return false;
}
+
+ public void clear() {
+ failures.clear();
+ }
@Override
public String toString() {
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectController.java Sat Apr 12 08:06:57 2014
@@ -79,6 +79,7 @@ import org.apache.cayenne.modeler.action
import org.apache.cayenne.modeler.action.NavigateForwardAction;
import org.apache.cayenne.modeler.action.RevertAction;
import org.apache.cayenne.modeler.action.SaveAction;
+import org.apache.cayenne.modeler.action.SaveAsAction;
import org.apache.cayenne.modeler.editor.CallbackType;
import org.apache.cayenne.modeler.editor.ObjCallbackMethod;
import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
@@ -110,6 +111,8 @@ import org.apache.cayenne.modeler.event.
import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
import org.apache.cayenne.modeler.event.ProcedureParameterDisplayEvent;
import org.apache.cayenne.modeler.event.ProcedureParameterDisplayListener;
+import org.apache.cayenne.modeler.event.ProjectOnSaveEvent;
+import org.apache.cayenne.modeler.event.ProjectOnSaveListener;
import org.apache.cayenne.modeler.event.QueryDisplayEvent;
import org.apache.cayenne.modeler.event.QueryDisplayListener;
import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
@@ -233,7 +236,7 @@ public class ProjectController extends C
protected CircularArray controllerStateHistory;
protected int maxHistorySize = 20;
- private EntityResolver entityResolver;
+ private EntityResolver entityResolver;
/**
* Project files watcher. When project file is changed, user will be asked
@@ -574,7 +577,15 @@ public class ProjectController extends C
public void removeDbEntityListener(DbEntityListener listener) {
listenerList.remove(DbEntityListener.class, listener);
}
+
+ public void addProjectOnSaveListener(ProjectOnSaveListener listener) {
+ listenerList.add(ProjectOnSaveListener.class, listener);
+ }
+ public void removeProjectOnSaveListener(ProjectOnSaveListener listener) {
+ listenerList.remove(ProjectOnSaveListener.class, listener);
+ }
+
public void addObjEntityListener(ObjEntityListener listener) {
listenerList.add(ObjEntityListener.class, listener);
}
@@ -1491,7 +1502,7 @@ public class ProjectController extends C
if (this.dirty != dirty) {
this.dirty = dirty;
- application.getActionManager().getAction(SaveAction.class).setEnabled(dirty);
+ enableSave(dirty);
application.getActionManager().getAction(RevertAction.class).setEnabled(dirty);
if (dirty) {
@@ -1716,6 +1727,14 @@ public class ProjectController extends C
}
}
}
+
+ public void fireProjectOnSaveEvent(ProjectOnSaveEvent e){
+ for(EventListener listener : listenerList.getListeners(ProjectOnSaveListener.class)){
+ ProjectOnSaveListener temp = (ProjectOnSaveListener) listener;
+ temp.beforeSaveChanges(e);
+ }
+
+ }
public ArrayList<Embeddable> getEmbeddableNamesInCurRentDataDomain() {
DataChannelDescriptor dataChannelDescriptor = (DataChannelDescriptor) getProject().getRootNode();
@@ -1758,5 +1777,14 @@ public class ProjectController extends C
*/
public void setEntityTabSelection(int entityTabSelection) {
this.entityTabSelection = entityTabSelection;
+ }
+
+ /**
+ * If true, all save buttons become available.
+ * @param enable
+ */
+ public void enableSave(boolean enable) {
+ application.getActionManager().getAction(SaveAction.class).setEnabled(enable);
+ application.getActionManager().getAction(SaveAsAction.class).setEnabled(enable);
}
}
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/SaveAsAction.java Sat Apr 12 08:06:57 2014
@@ -34,6 +34,7 @@ import org.apache.cayenne.configuration.
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.dialog.validator.ValidationDisplayHandler;
import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
+import org.apache.cayenne.modeler.event.ProjectOnSaveEvent;
import org.apache.cayenne.modeler.util.CayenneAction;
import org.apache.cayenne.pref.RenamedPreferences;
import org.apache.cayenne.project.Project;
@@ -161,7 +162,9 @@ public class SaveAsAction extends Cayenn
ProjectValidator projectValidator = getApplication().getInjector().getInstance(ProjectValidator.class);
ValidationResult validationResult = projectValidator.validate(getCurrentProject().getRootNode());
-
+
+ getProjectController().fireProjectOnSaveEvent(new ProjectOnSaveEvent(SaveAsAction.class));
+
try {
if (!saveAll()) {
return;
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/UnsavedChangesDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/UnsavedChangesDialog.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/UnsavedChangesDialog.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/UnsavedChangesDialog.java Sat Apr 12 08:06:57 2014
@@ -20,7 +20,11 @@
package org.apache.cayenne.modeler.dialog;
import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JButton;
+import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
@@ -32,39 +36,62 @@ public class UnsavedChangesDialog {
private static final String CLOSE_WITHOUT_SAVE = "Discard Changes";
private static final String CANCEL = "Cancel";
- private static final String[] OPTIONS = new String[] {
- SAVE_AND_CLOSE, CLOSE_WITHOUT_SAVE, CANCEL
- };
-
+ private JButton saveButton = new JButton(SAVE_AND_CLOSE);
+ private JButton withoutSaveButton = new JButton(CLOSE_WITHOUT_SAVE);
+ private JButton cancelButton = new JButton(CANCEL);
+
protected Component parent;
protected String result = CANCEL;
public UnsavedChangesDialog(Component parent) {
this.parent = parent;
+ initButtons();
}
-
+
public void show() {
JOptionPane pane = new JOptionPane(
"You have unsaved changes. Do you want to save them?",
JOptionPane.QUESTION_MESSAGE);
- pane.setOptions(OPTIONS);
-
+ pane.setOptions(new Object[] {saveButton, withoutSaveButton, cancelButton});
+
JDialog dialog = pane.createDialog(parent, "Unsaved Changes");
dialog.setVisible(true);
-
Object selectedValue = pane.getValue();
// need to do an if..else chain, since
// sometimes values are unexpected
if (SAVE_AND_CLOSE.equals(selectedValue)) {
result = SAVE_AND_CLOSE;
- }
- else if (CLOSE_WITHOUT_SAVE.equals(selectedValue)) {
+ } else if (CLOSE_WITHOUT_SAVE.equals(selectedValue)) {
result = CLOSE_WITHOUT_SAVE;
- }
- else {
+ } else {
result = CANCEL;
}
}
+
+ private void initButtons(){
+ ActionListener listener = new ActionListener(){
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ JOptionPane pane = getOptionPane((JComponent)e.getSource());
+ pane.setValue(e.getActionCommand());
+ }
+ };
+
+ saveButton.addActionListener(listener);
+ withoutSaveButton.addActionListener(listener);
+ cancelButton.addActionListener(listener);
+ }
+
+ private JOptionPane getOptionPane(JComponent parent) {
+ JOptionPane pane = null;
+ if (!(parent instanceof JOptionPane)) {
+ pane = getOptionPane((JComponent)parent.getParent());
+ } else {
+ pane = (JOptionPane) parent;
+ }
+ return pane;
+ }
public boolean shouldSave() {
return SAVE_AND_CLOSE.equals(result);
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/objentity/ObjAttributeInfoDialog.java Sat Apr 12 08:06:57 2014
@@ -103,7 +103,7 @@ public class ObjAttributeInfoDialog exte
stringToEmbeddables.put(emb.getClassName(), emb);
embeddableNames.add(emb.getClassName());
}
- initController(model.getAttribute(row));
+ initController(model.getAttribute(row).getValue());
}
@Override
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java Sat Apr 12 08:06:57 2014
@@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
+import java.util.List;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
@@ -46,13 +47,13 @@ import org.apache.cayenne.map.event.Enti
import org.apache.cayenne.map.event.MapEvent;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.editor.wrapper.ObjAttributeWrapper;
import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
import org.apache.cayenne.modeler.event.EntityDisplayEvent;
import org.apache.cayenne.modeler.util.CayenneTable;
import org.apache.cayenne.modeler.util.CayenneTableModel;
import org.apache.cayenne.modeler.util.CellEditorForAttributeTable;
import org.apache.cayenne.modeler.util.ModelerUtil;
-import org.apache.cayenne.modeler.util.ProjectUtil;
import org.apache.cayenne.util.Util;
/**
@@ -60,24 +61,32 @@ import org.apache.cayenne.util.Util;
* Allows adding/removing attributes, modifying the types and the names.
*
*/
-public class ObjAttributeTableModel extends CayenneTableModel {
+public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrapper> {
// 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 DB_ATTRIBUTE_TYPE = 4;
- static final int LOCKING = 5;
+ public static final int INHERITED = 0;
+ public static final int OBJ_ATTRIBUTE = 1;
+ public static final int OBJ_ATTRIBUTE_TYPE = 2;
+ public static final int DB_ATTRIBUTE = 3;
+ public static final int DB_ATTRIBUTE_TYPE = 4;
+ public static final int LOCKING = 5;
protected ObjEntity entity;
protected DbEntity dbEntity;
private CellEditorForAttributeTable cellEditor;
private CayenneTable table;
+ private static List<ObjAttributeWrapper> wrapObjAttributes(Collection<ObjAttribute> attributes) {
+ List<ObjAttributeWrapper> wrappedAttributes = new ArrayList<ObjAttributeWrapper>();
+ for(ObjAttribute attr : attributes) {
+ wrappedAttributes.add(new ObjAttributeWrapper(attr));
+ }
+ return wrappedAttributes;
+ }
+
public ObjAttributeTableModel(ObjEntity entity, ProjectController mediator,
Object eventSource) {
- super(mediator, eventSource, new ArrayList<Attribute>(entity.getAttributes()));
+ super(mediator, eventSource, wrapObjAttributes(entity.getAttributes()));
// take a copy
this.entity = entity;
this.dbEntity = entity.getDbEntity();
@@ -85,7 +94,7 @@ public class ObjAttributeTableModel exte
// order using local comparator
Collections.sort(objectList, new AttributeComparator());
}
-
+
protected void orderList() {
// NOOP
}
@@ -108,16 +117,16 @@ public class ObjAttributeTableModel exte
*/
@Override
public Class<?> getElementsClass() {
- return ObjAttribute.class;
+ return ObjAttributeWrapper.class;
}
public DbEntity getDbEntity() {
return dbEntity;
}
- public ObjAttribute getAttribute(int row) {
+ public ObjAttributeWrapper getAttribute(int row) {
return (row >= 0 && row < objectList.size())
- ? (ObjAttribute) objectList.get(row)
+ ? objectList.get(row)
: null;
}
@@ -166,8 +175,7 @@ public class ObjAttributeTableModel exte
}
public Object getValueAt(int row, int column) {
- ObjAttribute attribute = getAttribute(row);
-
+ ObjAttributeWrapper attribute = getAttribute(row);
if (column == INHERITED) {
return attribute.isInherited();
}
@@ -194,7 +202,7 @@ public class ObjAttributeTableModel exte
}
}
- private String getDBAttribute(ObjAttribute attribute, DbAttribute dbAttribute) {
+ private String getDBAttribute(ObjAttributeWrapper attribute, DbAttribute dbAttribute) {
if (dbAttribute == null) {
if (!attribute.isInherited()
&& ((ObjEntity) attribute.getEntity()).isAbstract()) {
@@ -211,10 +219,10 @@ public class ObjAttributeTableModel exte
return dbAttribute.getName();
}
- private String getDBAttributeType(ObjAttribute attribute, DbAttribute dbAttribute) {
+ private String getDBAttributeType(ObjAttributeWrapper attribute, DbAttribute dbAttribute) {
int type;
if (dbAttribute == null) {
- if (!(attribute instanceof EmbeddedAttribute)) {
+ if (!(attribute.getValue() instanceof EmbeddedAttribute)) {
try {
type = TypesMapping.getSqlTypeByJava(attribute.getJavaClass());
// have to catch the exception here to make sure that
@@ -249,19 +257,47 @@ public class ObjAttributeTableModel exte
public CellEditorForAttributeTable getCellEditor() {
return cellEditor;
}
+
+ /**
+ * Correct errors that attributes have.
+ */
+ @Override
+ public void resetModel() {
+ for(ObjAttributeWrapper attribute : objectList) {
+ attribute.resetEdits();
+ }
+ }
+
+ /**
+ * @return false, if one or more attributes in model are not valid.
+ */
+ @Override
+ public boolean isValid() {
+ for(ObjAttributeWrapper attribute : getObjectList()) {
+ if (!attribute.isValid()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public void setUpdatedValueAt(Object value, int row, int column) {
-
- ObjAttribute attribute = getAttribute(row);
- AttributeEvent event = new AttributeEvent(eventSource, attribute, entity);
+
+ ObjAttributeWrapper attribute = getAttribute(row);
+ attribute.resetEdits();
+ AttributeEvent event = new AttributeEvent(eventSource, attribute.getValue(), entity);
String path = null;
Collection<String> nameAttr = null;
if (column == OBJ_ATTRIBUTE) {
event.setOldName(attribute.getName());
- ProjectUtil.setAttributeName(attribute, value != null ? value
- .toString()
- .trim() : null);
+
+ attribute.setName(value != null ? value.toString().trim() : null);
+
+ if (attribute.isValid()) {
+ attribute.commitEdits();
+ }
fireTableCellUpdated(row, column);
}
else if (column == OBJ_ATTRIBUTE_TYPE) {
@@ -449,8 +485,8 @@ public class ObjAttributeTableModel exte
final class AttributeComparator implements Comparator {
public int compare(Object o1, Object o2) {
- Attribute a1 = (Attribute) o1;
- Attribute a2 = (Attribute) o2;
+ Attribute a1 = ((ObjAttributeWrapper) o1).getValue();
+ Attribute a2 = ((ObjAttributeWrapper) o2).getValue();
int delta = getWeight(a1) - getWeight(a2);
@@ -480,9 +516,9 @@ public class ObjAttributeTableModel exte
break;
case DB_ATTRIBUTE:
case DB_ATTRIBUTE_TYPE:
- Collections.sort(objectList, new Comparator<ObjAttribute>() {
+ Collections.sort(objectList, new Comparator<ObjAttributeWrapper>() {
- public int compare(ObjAttribute o1, ObjAttribute o2) {
+ public int compare(ObjAttributeWrapper o1, ObjAttributeWrapper o2) {
Integer compareObjAttributesVal = compareObjAttributes(o1, o2);
if (compareObjAttributesVal != null) {
return compareObjAttributesVal;
@@ -521,7 +557,7 @@ public class ObjAttributeTableModel exte
return true;
}
- private Integer compareObjAttributes(ObjAttribute o1, ObjAttribute o2) {
+ private Integer compareObjAttributes(ObjAttributeWrapper o1, ObjAttributeWrapper o2) {
if ((o1 == null && o2 == null) || o1 == o2) {
return 0;
}
@@ -533,5 +569,4 @@ public class ObjAttributeTableModel exte
}
return null;
}
-
}
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributeTab.java Sat Apr 12 08:06:57 2014
@@ -36,7 +36,9 @@ import java.util.Map;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
+import javax.swing.JCheckBox;
import javax.swing.JComboBox;
+import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
@@ -46,11 +48,12 @@ import javax.swing.event.ListSelectionEv
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.event.AttributeEvent;
@@ -68,12 +71,17 @@ import org.apache.cayenne.modeler.action
import org.apache.cayenne.modeler.action.PasteAction;
import org.apache.cayenne.modeler.action.RemoveAttributeAction;
import org.apache.cayenne.modeler.dialog.objentity.ObjAttributeInfoDialog;
+import org.apache.cayenne.modeler.dialog.validator.ValidatorDialog;
+import org.apache.cayenne.modeler.editor.wrapper.ObjAttributeWrapper;
import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
import org.apache.cayenne.modeler.event.EntityDisplayEvent;
import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
+import org.apache.cayenne.modeler.event.ProjectOnSaveEvent;
+import org.apache.cayenne.modeler.event.ProjectOnSaveListener;
import org.apache.cayenne.modeler.event.TablePopupHandler;
import org.apache.cayenne.modeler.pref.TableColumnPreferences;
import org.apache.cayenne.modeler.util.CayenneTable;
+import org.apache.cayenne.modeler.util.CayenneTableModel;
import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.PanelFactory;
import org.apache.cayenne.modeler.util.UIUtil;
@@ -84,7 +92,7 @@ import org.apache.cayenne.modeler.util.c
*
*/
public class ObjEntityAttributeTab extends JPanel implements ObjEntityDisplayListener,
- ObjEntityListener, ObjAttributeListener, ExistingSelectionProcessor {
+ ObjEntityListener, ObjAttributeListener, ExistingSelectionProcessor, ProjectOnSaveListener {
protected ProjectController mediator;
protected CayenneTable table;
@@ -128,7 +136,8 @@ public class ObjEntityAttributeTab exten
table = new CayenneTable();
table.setDefaultRenderer(String.class, new CellRenderer());
-
+ table.setDefaultRenderer(Boolean.class, new CheckBoxRenderer());
+
tablePreferences = new TableColumnPreferences(
ObjAttributeTableModel.class,
"objEntity/attributeTable");
@@ -151,7 +160,8 @@ public class ObjEntityAttributeTab exten
mediator.addObjEntityDisplayListener(this);
mediator.addObjEntityListener(this);
mediator.addObjAttributeListener(this);
-
+ mediator.addProjectOnSaveListener(this);
+
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
@@ -250,11 +260,18 @@ public class ObjEntityAttributeTab exten
ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
- List listAttrs = model.getObjectList();
+ List<ObjAttributeWrapper> listAttrs = model.getObjectList();
+
+ // newSel - indexes of attributes to be selected from model
int[] newSel = new int[attrs.length];
-
+
+ // search for attributes to select from attributes that model has
for (int i = 0; i < attrs.length; i++) {
- newSel[i] = listAttrs.indexOf(attrs[i]);
+ for (int j = 0; j < listAttrs.size(); j++) {
+ if (listAttrs.get(j).getValue() == attrs[i]) {
+ newSel[i] = j;
+ }
+ }
}
table.select(newSel);
@@ -279,7 +296,7 @@ public class ObjEntityAttributeTab exten
attrs = new ObjAttribute[sel.length];
for (int i = 0; i < sel.length; i++) {
- attrs[i] = model.getAttribute(sel[i]);
+ attrs[i] = model.getAttribute(sel[i]).getValue();
}
if (sel.length == 1) {
@@ -306,19 +323,40 @@ public class ObjEntityAttributeTab exten
}
public void objAttributeChanged(AttributeEvent e) {
- rebuildTable((ObjEntity) e.getEntity());
+ ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
+ model.fireTableDataChanged();
table.select(e.getAttribute());
}
public void objAttributeAdded(AttributeEvent e) {
- rebuildTable((ObjEntity) e.getEntity());
+ ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
+
+ if(!model.isValid()){
+ model.resetModel();
+ }
+
+ model.addRow(new ObjAttributeWrapper((ObjAttribute)e.getAttribute()));
+ model.fireTableDataChanged();
table.select(e.getAttribute());
}
public void objAttributeRemoved(AttributeEvent e) {
ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
- int ind = model.getObjectList().indexOf(e.getAttribute());
- model.removeRow(e.getAttribute());
+ int ind = -1;
+ List<ObjAttributeWrapper> list = model.getObjectList();
+
+ for (int i = 0; i < list.size(); i++) {
+ if (list.get(i).getValue() == e.getAttribute()) {
+ ind = i;
+ }
+ }
+
+ if(!model.isValid()){
+ model.resetModel();
+ }
+
+ model.removeRow(list.get(ind));
+ model.fireTableDataChanged();
table.select(ind);
}
@@ -332,6 +370,9 @@ public class ObjEntityAttributeTab exten
// Important: process event even if this is the same entity,
// since the inheritance structure might have changed
if (entity != null) {
+
+ // reset model before change ObjEntity
+ resetTableModel();
rebuildTable(entity);
}
@@ -342,6 +383,15 @@ public class ObjEntityAttributeTab exten
}
}
+
+ private void resetTableModel() {
+ CayenneTableModel model = table.getCayenneModel();
+ if (model != null && !model.isValid()) {
+ model.resetModel();
+ model.fireTableDataChanged();
+ }
+ }
+
protected void rebuildTable(ObjEntity entity) {
if (table.getEditingRow() != -1 && table.getEditingColumn() != -1) {
TableCellEditor cellEditor = table.getCellEditor(table.getEditingRow(), table.getEditingColumn());
@@ -428,7 +478,7 @@ public class ObjEntityAttributeTab exten
ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
column = table.getColumnModel().getColumn(column).getModelIndex();
- ObjAttribute attribute = model.getAttribute(row);
+ ObjAttributeWrapper attribute = model.getAttribute(row);
if (column != ObjAttributeTableModel.INHERITED) {
if (!model.isCellEditable(row, column)) {
@@ -453,12 +503,67 @@ public class ObjEntityAttributeTab exten
}
setText("");
}
- setBackground(isSelected && !hasFocus
- ? table.getSelectionBackground()
- : table.getBackground());
+ if (!attribute.isValid()) {
+ setBackground(ValidatorDialog.WARNING_COLOR);
+ setToolTipText(attribute.getFailureDescription(column));
+ } else {
+ setBackground(isSelected && !hasFocus ? table
+ .getSelectionBackground() : table.getBackground());
+ setToolTipText(null);
+ }
return this;
}
}
+
+ final class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
+
+ public CheckBoxRenderer() {
+ super();
+ setHorizontalAlignment(JLabel.CENTER);
+ setOpaque(true);
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(
+ JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ int row,
+ int column) {
+
+ ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
+ column = table.getColumnModel().getColumn(column).getModelIndex();
+ ObjAttributeWrapper attribute = model.getAttribute(row);
+ setSelected((value != null && ((Boolean) value)));
+
+ if (!model.isCellEditable(row, column)) {
+ setForeground(Color.GRAY);
+ }
+ else {
+ setForeground(isSelected && !hasFocus ? table
+ .getSelectionForeground() : table.getForeground());
+ }
+
+ if (!attribute.isValid()) {
+ setBackground(ValidatorDialog.WARNING_COLOR);
+ setToolTipText(attribute.getFailureDescription(column));
+ }
+ else {
+ setBackground(isSelected ? table.getSelectionBackground()
+ : table.getBackground());
+ setToolTipText(null);
+ }
+
+ return this;
+ }
+
+ }
+
+ @Override
+ public void beforeSaveChanges(ProjectOnSaveEvent e) {
+ resetTableModel();
+ }
}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/AttributeValidationFailure.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/AttributeValidationFailure.java?rev=1586832&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/AttributeValidationFailure.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/AttributeValidationFailure.java Sat Apr 12 08:06:57 2014
@@ -0,0 +1,17 @@
+package org.apache.cayenne.modeler.editor.validation;
+
+import org.apache.cayenne.validation.SimpleValidationFailure;
+
+/**
+ * ValidationFailure implementation that described a failure of attribute.
+ */
+public class AttributeValidationFailure extends SimpleValidationFailure {
+
+ public AttributeValidationFailure(int columnIndex, String error) {
+ super(columnIndex, error);
+ }
+
+ public int getColumnIndex() {
+ return (Integer)source;
+ }
+}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/ObjAttributeWrapperValidator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/ObjAttributeWrapperValidator.java?rev=1586832&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/ObjAttributeWrapperValidator.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/validation/ObjAttributeWrapperValidator.java Sat Apr 12 08:06:57 2014
@@ -0,0 +1,31 @@
+package org.apache.cayenne.modeler.editor.validation;
+
+import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.modeler.editor.ObjAttributeTableModel;
+import org.apache.cayenne.modeler.editor.wrapper.ObjAttributeWrapper;
+import org.apache.cayenne.project.validation.ConfigurationNodeValidator;
+import org.apache.cayenne.validation.ValidationResult;
+
+public class ObjAttributeWrapperValidator extends ConfigurationNodeValidator {
+
+ public boolean validate(ObjAttributeWrapper wrapper, ValidationResult validationResult) {
+ if (isAttributeNameOverlapped(wrapper)) {
+ addFailure(validationResult, new AttributeValidationFailure(
+ ObjAttributeTableModel.OBJ_ATTRIBUTE,
+ "Duplicate attribute name."));
+ }
+
+ return wrapper.isValid();
+ }
+
+ /**
+ * @return false if entity has attribute with the same name.
+ */
+ private boolean isAttributeNameOverlapped(ObjAttributeWrapper attr) {
+ ObjAttribute temp = attr.getEntity().getAttributeMap().get(attr.getName());
+ if (temp != null && attr.getValue() != temp ){
+ return true;
+ }
+ return false;
+ }
+}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/ObjAttributeWrapper.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/ObjAttributeWrapper.java?rev=1586832&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/ObjAttributeWrapper.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/ObjAttributeWrapper.java Sat Apr 12 08:06:57 2014
@@ -0,0 +1,143 @@
+package org.apache.cayenne.modeler.editor.wrapper;
+
+import java.util.List;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.modeler.editor.validation.ObjAttributeWrapperValidator;
+import org.apache.cayenne.modeler.util.ProjectUtil;
+import org.apache.cayenne.validation.ValidationFailure;
+import org.apache.cayenne.validation.ValidationResult;
+
+/**
+ * A wrapper for a ObjAttribute instance. Allows to add failures, that connected
+ * with attribute.
+ */
+public class ObjAttributeWrapper implements Wrapper<ObjAttribute> {
+
+ private ObjAttribute objAttribute;
+ private ValidationResult validationResult;
+
+ private ObjAttributeWrapperValidator validator = new ObjAttributeWrapperValidator();
+
+ // TODO: for now name is only wrapped attribute we validating but this
+ // can be extended to other ObjAttribute fields as well
+ private String name;
+
+ public ObjAttributeWrapper(ObjAttribute objAttribute) {
+ if (objAttribute == null) {
+ throw new IllegalArgumentException("Attribute cannot be null.");
+ }
+ this.objAttribute = objAttribute;
+ validationResult = new ValidationResult();
+ }
+
+ @Override
+ public ObjAttribute getValue() {
+ return objAttribute;
+ }
+
+ @Override
+ public boolean isValid() {
+ return !validationResult.hasFailures();
+ }
+
+ /**
+ * @param column Index of column.
+ * @return String failure description, null if there is no such failure.
+ */
+ public String getFailureDescription(int column) {
+ String result = null;
+ if (validationResult.hasFailures(column)) {
+ List<ValidationFailure> failures= validationResult.getFailures(column);
+
+ // there is only one failure for each column
+ result = failures.get(0).getDescription();
+ }
+ return result;
+ }
+
+ @Override
+ public void commitEdits() {
+ if (isValid()) {
+ ProjectUtil.setAttributeName(this.getValue(), name);
+ }
+ }
+
+ /**
+ * Correct ObjAttributeWrapper failures.
+ */
+ @Override
+ public void resetEdits() {
+ this.name = null;
+ validationResult.clear();
+ }
+
+ public ObjEntity getEntity() {
+ return objAttribute.getEntity();
+ }
+
+ public void setEntity(Entity entity) {
+ objAttribute.setEntity(entity);
+ }
+
+ public String getName() {
+ return name == null ? objAttribute.getName() : name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ validator.validate(this, validationResult);
+ }
+
+ public Object getParent() {
+ return objAttribute.getEntity();
+ }
+
+ public void setParent(Object parent) {
+ objAttribute.setParent(parent);
+ }
+
+ public Class<?> getJavaClass() {
+ return objAttribute.getClass();
+ }
+
+ public String getType() {
+ return objAttribute.getType();
+ }
+
+ public void setType(String type) {
+ objAttribute.setType(type);
+ }
+
+ public boolean isUsedForLocking() {
+ return objAttribute.isUsedForLocking();
+ }
+
+ public void setUsedForLocking(boolean usedForLocking) {
+ objAttribute.setUsedForLocking(usedForLocking);
+ }
+
+ public DbAttribute getDbAttribute() {
+ return objAttribute.getDbAttribute();
+ }
+
+ public boolean isInherited() {
+ return objAttribute.isInherited();
+ }
+
+ public String getDbAttributeName() {
+ return objAttribute.getDbAttributeName();
+ }
+
+ public void setDbAttributePath(String dbAttributePath) {
+ objAttribute.setDbAttributePath(dbAttributePath);
+ }
+
+ public String getDbAttributePath() {
+ return objAttribute.getDbAttributePath();
+ }
+
+}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/Wrapper.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/Wrapper.java?rev=1586832&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/Wrapper.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/wrapper/Wrapper.java Sat Apr 12 08:06:57 2014
@@ -0,0 +1,12 @@
+package org.apache.cayenne.modeler.editor.wrapper;
+
+public interface Wrapper<T> {
+
+ T getValue();
+
+ boolean isValid();
+
+ void commitEdits();
+
+ void resetEdits();
+}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveEvent.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveEvent.java?rev=1586832&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveEvent.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveEvent.java Sat Apr 12 08:06:57 2014
@@ -0,0 +1,13 @@
+package org.apache.cayenne.modeler.event;
+
+import org.apache.cayenne.event.CayenneEvent;
+
+/**
+ * Triggered while project is saved.
+ */
+public class ProjectOnSaveEvent extends CayenneEvent{
+
+ public ProjectOnSaveEvent(Object source) {
+ super(source);
+ }
+}
Added: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveListener.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveListener.java?rev=1586832&view=auto
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveListener.java (added)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/ProjectOnSaveListener.java Sat Apr 12 08:06:57 2014
@@ -0,0 +1,12 @@
+package org.apache.cayenne.modeler.event;
+
+import java.util.EventListener;
+
+/**
+ * Interface for classes that are interested in ProjectOnSave events.
+ */
+public interface ProjectOnSaveListener extends EventListener{
+
+ /** Changes made before saving project */
+ public void beforeSaveChanges(ProjectOnSaveEvent e);
+}
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java Sat Apr 12 08:06:57 2014
@@ -87,8 +87,15 @@ public class CayenneTable extends JTable
setDefaultEditor(String.class, textEditor);
}
+ /**
+ * @return CayenneTableModel, or null if model can't be casted to CayenneTableModel.
+ */
public CayenneTableModel getCayenneModel() {
- return (CayenneTableModel) getModel();
+ TableModel model = getModel();
+ if(model instanceof CayenneTableModel) {
+ return (CayenneTableModel) model;
+ }
+ return null;
}
/**
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java Sat Apr 12 08:06:57 2014
@@ -43,11 +43,11 @@ import org.apache.commons.logging.LogFac
* Superclass of CayenneModeler table model classes.
*
*/
-public abstract class CayenneTableModel extends AbstractTableModel {
+public abstract class CayenneTableModel<T> extends AbstractTableModel {
protected ProjectController mediator;
protected Object eventSource;
- protected List objectList;
+ protected List<T> objectList;
private static Log logObj = LogFactory.getLog(CayenneTableModel.class);
@@ -55,7 +55,7 @@ public abstract class CayenneTableModel
* Constructor for CayenneTableModel.
*/
public CayenneTableModel(ProjectController mediator, Object eventSource,
- java.util.List objectList) {
+ java.util.List<T> objectList) {
super();
this.eventSource = eventSource;
@@ -143,11 +143,11 @@ public abstract class CayenneTableModel
/**
* Returns internal object list.
*/
- public java.util.List getObjectList() {
+ public java.util.List<T> getObjectList() {
return objectList;
}
- public void addRow(Object row) {
+ public void addRow(T row) {
objectList.add(row);
fireTableDataChanged();
}
@@ -205,6 +205,20 @@ public abstract class CayenneTableModel
Collections.swap(objectList, i, j);
fireTableDataChanged();
}
+
+ /**
+ * Correct errors that model has.
+ */
+ public void resetModel() {
+ // do nothing by default
+ }
+
+ /**
+ * @return false, if model is not valid.
+ */
+ public boolean isValid() {
+ return true;
+ }
protected class PropertyComparator implements Comparator {
Modified: cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java?rev=1586832&r1=1586831&r2=1586832&view=diff
==============================================================================
--- cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java (original)
+++ cayenne/main/trunk/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectUtil.java Sat Apr 12 08:06:57 2014
@@ -197,7 +197,7 @@ public class ProjectUtil {
entity.addAttribute(attribute);
}
}
-
+
/**
* Changes the name of the embeddable attribute and all references to this embeddable attribute.