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 2006/05/28 03:25:28 UTC

svn commit: r409905 - in /incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler: dialog/datamap/LockingUpdateController.java dialog/datamap/LockingUpdateDialog.java editor/DataMapView.java

Author: aadamchik
Date: Sat May 27 18:25:28 2006
New Revision: 409905

URL: http://svn.apache.org/viewvc?rev=409905&view=rev
Log:
CAY-363

Added:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateController.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateDialog.java
Modified:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/editor/DataMapView.java

Added: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateController.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateController.java?rev=409905&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateController.java (added)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateController.java Sat May 27 18:25:28 2006
@@ -0,0 +1,167 @@
+/* ====================================================================
+ * 
+ * The ObjectStyle Group Software License, version 1.1
+ * ObjectStyle Group - http://objectstyle.org/
+ * 
+ * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
+ * of the software. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 
+ * 3. The end-user documentation included with the redistribution, if any,
+ *    must include the following acknowlegement:
+ *    "This product includes software developed by independent contributors
+ *    and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ * 
+ * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
+ *    or promote products derived from this software without prior written
+ *    permission. For written permission, email
+ *    "andrus at objectstyle dot org".
+ * 
+ * 5. Products derived from this software may not be called "ObjectStyle"
+ *    or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
+ *    names without prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ * 
+ * This software consists of voluntary contributions made by many
+ * individuals and hosted on ObjectStyle Group web site.  For more
+ * information on the ObjectStyle Group, please see
+ * <http://objectstyle.org/>.
+ */
+package org.objectstyle.cayenne.modeler.dialog.datamap;
+
+import java.awt.Component;
+import java.util.Iterator;
+
+import org.objectstyle.cayenne.map.DataMap;
+import org.objectstyle.cayenne.map.ObjAttribute;
+import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.map.ObjRelationship;
+import org.objectstyle.cayenne.map.event.AttributeEvent;
+import org.objectstyle.cayenne.map.event.EntityEvent;
+import org.objectstyle.cayenne.map.event.RelationshipEvent;
+import org.objectstyle.cayenne.modeler.ProjectController;
+import org.objectstyle.cayenne.modeler.util.CayenneController;
+import org.objectstyle.cayenne.swing.BindingBuilder;
+
+public class LockingUpdateController extends CayenneController {
+
+    protected LockingUpdateDialog view;
+    protected DataMap dataMap;
+
+    public LockingUpdateController(ProjectController parent, DataMap dataMap) {
+        super(parent);
+        this.dataMap = dataMap;
+    }
+
+    public void startup() {
+
+        view = new LockingUpdateDialog();
+
+        boolean on = dataMap.getDefaultLockType() == ObjEntity.LOCK_TYPE_OPTIMISTIC;
+        view.setTitle(on ? "Enable Optimistic Locking" : "Disable Optimistic Locking");
+
+        initBindings();
+
+        view.pack();
+        view.setModal(true);
+        centerView();
+        makeCloseableOnEscape();
+        view.show();
+    }
+
+    public Component getView() {
+        return view;
+    }
+
+    protected void initBindings() {
+        BindingBuilder builder = new BindingBuilder(
+                getApplication().getBindingFactory(),
+                this);
+
+        builder.bindToAction(view.getCancelButton(), "cancelAction()");
+        builder.bindToAction(view.getUpdateButton(), "updateAction()");
+    }
+
+    public void cancelAction() {
+        if (view != null) {
+            view.dispose();
+        }
+    }
+
+    public void updateAction() {
+        int defaultLockType = dataMap.getDefaultLockType();
+        boolean on = defaultLockType == ObjEntity.LOCK_TYPE_OPTIMISTIC;
+
+        boolean updateEntities = view.getEntities().isSelected();
+        boolean updateAttributes = view.getAttributes().isSelected();
+        boolean updateRelationships = view.getRelationships().isSelected();
+        ProjectController parent = (ProjectController) getParent();
+
+        Iterator it = dataMap.getObjEntities().iterator();
+        while (it.hasNext()) {
+            ObjEntity entity = (ObjEntity) it.next();
+
+            if (updateEntities && defaultLockType != entity.getDeclaredLockType()) {
+                entity.setDeclaredLockType(defaultLockType);
+                parent.fireObjEntityEvent(new EntityEvent(this, entity));
+            }
+
+            if (updateAttributes) {
+                Iterator attributes = entity.getAttributes().iterator();
+                while (attributes.hasNext()) {
+
+                    ObjAttribute a = (ObjAttribute) attributes.next();
+                    if (a.isUsedForLocking() != on) {
+                        a.setUsedForLocking(on);
+                        parent.fireObjAttributeEvent(new AttributeEvent(this, a, entity));
+                    }
+                }
+            }
+
+            if (updateRelationships) {
+                Iterator relationships = entity.getRelationships().iterator();
+                while (relationships.hasNext()) {
+
+                    ObjRelationship r = (ObjRelationship) relationships.next();
+                    if (r.isUsedForLocking() != on) {
+                        r.setUsedForLocking(on);
+                        parent.fireObjRelationshipEvent(new RelationshipEvent(
+                                this,
+                                r,
+                                entity));
+                    }
+                }
+            }
+        }
+
+        if (view != null) {
+            view.dispose();
+        }
+    }
+}

Added: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateDialog.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateDialog.java?rev=409905&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateDialog.java (added)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/dialog/datamap/LockingUpdateDialog.java Sat May 27 18:25:28 2006
@@ -0,0 +1,136 @@
+/* ====================================================================
+ * 
+ * The ObjectStyle Group Software License, version 1.1
+ * ObjectStyle Group - http://objectstyle.org/
+ * 
+ * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
+ * of the software. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 
+ * 3. The end-user documentation included with the redistribution, if any,
+ *    must include the following acknowlegement:
+ *    "This product includes software developed by independent contributors
+ *    and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ * 
+ * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
+ *    or promote products derived from this software without prior written
+ *    permission. For written permission, email
+ *    "andrus at objectstyle dot org".
+ * 
+ * 5. Products derived from this software may not be called "ObjectStyle"
+ *    or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
+ *    names without prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ * 
+ * This software consists of voluntary contributions made by many
+ * individuals and hosted on ObjectStyle Group web site.  For more
+ * information on the ObjectStyle Group, please see
+ * <http://objectstyle.org/>.
+ */
+package org.objectstyle.cayenne.modeler.dialog.datamap;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.FlowLayout;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+public class LockingUpdateDialog extends JDialog {
+
+    protected JCheckBox entities;
+    protected JCheckBox attributes;
+    protected JCheckBox relationships;
+
+    protected JButton cancelButton;
+    protected JButton updateButton;
+
+    public LockingUpdateDialog() {
+
+        this.entities = new JCheckBox("Update all Entities");
+        this.attributes = new JCheckBox("Update all Attributes");
+        this.relationships = new JCheckBox("Update all Relationships");
+
+        this.cancelButton = new JButton("Cancel");
+        this.updateButton = new JButton("Update");
+
+        // check all by default until we start storing this in preferences.
+        entities.setSelected(true);
+        attributes.setSelected(true);
+        relationships.setSelected(true);
+
+        // do layout...
+
+        CellConstraints cc = new CellConstraints();
+        FormLayout layout = new FormLayout(
+                "left:max(180dlu;pref)",
+                "p, 3dlu, p, 3dlu, p, 3dlu");
+        PanelBuilder builder = new PanelBuilder(layout);
+        builder.setDefaultDialogBorder();
+
+        builder.add(entities, cc.xy(1, 1));
+        builder.add(attributes, cc.xy(1, 3));
+        builder.add(relationships, cc.xy(1, 5));
+
+        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+        buttonPanel.add(updateButton);
+        buttonPanel.add(cancelButton);
+
+        Container contentPane = getContentPane();
+        contentPane.setLayout(new BorderLayout());
+        contentPane.add(builder.getPanel(), BorderLayout.CENTER);
+        contentPane.add(buttonPanel, BorderLayout.SOUTH);
+    }
+
+    public JButton getCancelButton() {
+        return cancelButton;
+    }
+
+    public JButton getUpdateButton() {
+        return updateButton;
+    }
+
+    public JCheckBox getAttributes() {
+        return attributes;
+    }
+
+    public JCheckBox getEntities() {
+        return entities;
+    }
+
+    public JCheckBox getRelationships() {
+        return relationships;
+    }
+}

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/editor/DataMapView.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/editor/DataMapView.java?rev=409905&r1=409904&r2=409905&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/editor/DataMapView.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/modeler/java/org/objectstyle/cayenne/modeler/editor/DataMapView.java Sat May 27 18:25:28 2006
@@ -76,9 +76,9 @@
 import org.objectstyle.cayenne.map.ObjEntity;
 import org.objectstyle.cayenne.map.event.DataMapEvent;
 import org.objectstyle.cayenne.map.event.DataNodeEvent;
-import org.objectstyle.cayenne.map.event.EntityEvent;
 import org.objectstyle.cayenne.modeler.Application;
 import org.objectstyle.cayenne.modeler.ProjectController;
+import org.objectstyle.cayenne.modeler.dialog.datamap.LockingUpdateController;
 import org.objectstyle.cayenne.modeler.dialog.datamap.PackageUpdateController;
 import org.objectstyle.cayenne.modeler.dialog.datamap.SchemaUpdateController;
 import org.objectstyle.cayenne.modeler.dialog.datamap.SuperclassUpdateController;
@@ -168,7 +168,7 @@
             }
         };
 
-        updateDefaultLockType = new JButton("Update");
+        updateDefaultLockType = new JButton("Update...");
         defaultLockType = new JCheckBox();
 
         clientSupport = new JCheckBox();
@@ -607,19 +607,7 @@
         }
 
         if (dataMap.getObjEntities().size() > 0) {
-            int defaultLockType = dataMap.getDefaultLockType();
-
-            Iterator it = dataMap.getObjEntities().iterator();
-            while (it.hasNext()) {
-                ObjEntity entity = (ObjEntity) it.next();
-                if (defaultLockType != entity.getDeclaredLockType()) {
-                    entity.setDeclaredLockType(defaultLockType);
-
-                    // any way to batch events, a big change will flood the app with
-                    // entity events..?
-                    eventController.fireDbEntityEvent(new EntityEvent(this, entity));
-                }
-            }
+            new LockingUpdateController(eventController, dataMap).startup();
         }
     }
 }