Revision: 3824
Author: mo.jeff
Date: Fri Jul 30 12:56:08 2010
Log: Refactored snapshot creation out of ColumnEditPanel and placed it in the SPObjectSnapshotHierarchyListener. I think this is a more appropriate place for it, as it doesn't pollute GUI code and non-enterprise specific code with unrelated functionality.

Also removed some checked exceptions that appear to be no longer thrown in DomainCategorySnapshot.

TODO: I was hoping the listener would handle reverse engineering and copy/paste, but doesn't yet. I was hoping to remove the old UpstreamTypeUpdaterListener once that was fixed.
http://code.google.com/p/power-architect/source/detail?r=3824

Modified:
/trunk/src/main/java/ca/sqlpower/architect/SPObjectSnapshotHierarchyListener.java /trunk/src/main/java/ca/sqlpower/architect/enterprise/DomainCategorySnapshot.java
 /trunk/src/main/java/ca/sqlpower/architect/swingui/ColumnEditPanel.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/SPObjectSnapshotHierarchyListener.java Fri Jul 30 10:06:06 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/SPObjectSnapshotHierarchyListener.java Fri Jul 30 12:56:08 2010
@@ -23,13 +23,16 @@

 import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
 import ca.sqlpower.architect.enterprise.DomainCategory;
+import ca.sqlpower.architect.enterprise.DomainCategorySnapshot;
 import ca.sqlpower.object.AbstractSPListener;
 import ca.sqlpower.object.SPChildEvent;
+import ca.sqlpower.object.SPObject;
 import ca.sqlpower.object.SPObjectSnapshot;
 import ca.sqlpower.sqlobject.SPObjectSnapshotUpdateListener;
 import ca.sqlpower.sqlobject.SQLColumn;
 import ca.sqlpower.sqlobject.SQLTable;
 import ca.sqlpower.sqlobject.UserDefinedSQLType;
+import ca.sqlpower.sqlobject.UserDefinedSQLTypeSnapshot;

 /**
* Add this listener to a SQLDatabase to have its columns have correct snapshot listeners
@@ -53,9 +56,10 @@
                        e.getChild().addSPListener(this);
                } else if (e.getChild() instanceof SQLColumn) {
                        SQLColumn sqlColumn = (SQLColumn) e.getChild();
-            sqlColumn.getUserDefinedSQLType().addSPListener(this);
             if (sqlColumn.getUserDefinedSQLType() != null) {
+                sqlColumn.getUserDefinedSQLType().addSPListener(this);
                 addUpdateListener(sqlColumn.getUserDefinedSQLType());
+ createSPObjectSnapshot(sqlColumn.getUserDefinedSQLType(), sqlColumn.getUserDefinedSQLType().getUpstreamType());
             }
                }
        }
@@ -76,6 +80,11 @@
        public void propertyChanged(PropertyChangeEvent e) {
                if (e.getSource() instanceof UserDefinedSQLType
                                && e.getPropertyName().equals("upstreamType")) {
+
+                   if (e.getNewValue() instanceof UserDefinedSQLType) {
+ createSPObjectSnapshot((UserDefinedSQLType) e.getSource(), (UserDefinedSQLType) e.getNewValue());
+                   }
+
                    //XXX Need to remove the old listener
                        UserDefinedSQLType columnProxyType = 
(UserDefinedSQLType) e.getSource();
                        addUpdateListener(columnProxyType);
@@ -107,4 +116,40 @@
             }
         }
     }
-}
+
+ private void createSPObjectSnapshot(UserDefinedSQLType typeProxy, UserDefinedSQLType upstreamType) {
+        SPObject upstreamTypeParent = upstreamType.getParent();
+
+ if (upstreamTypeParent != null && !upstreamTypeParent.equals(session.getWorkspace()) &&
+                !(upstreamTypeParent instanceof DomainCategory &&
+ upstreamTypeParent.getParent().equals(session.getWorkspace()))) { + int systemRevision = session.getSystemSession().getCurrentRevisionNumber();
+
+ boolean isDomainSnapshot = upstreamType.getParent() instanceof DomainCategory;
+            UserDefinedSQLTypeSnapshot snapshot;
+            if (upstreamType.getUpstreamType() != null) {
+                //For domains
+ UserDefinedSQLType upUpStreamType = upstreamType.getUpstreamType(); + boolean isUpstreamDomainSnapshot = upUpStreamType.getParent() instanceof DomainCategory; + UserDefinedSQLTypeSnapshot upstreamSnapshot = new UserDefinedSQLTypeSnapshot(upUpStreamType, systemRevision, isUpstreamDomainSnapshot);
+                session.getWorkspace().addChild(upstreamSnapshot, 0);
+ session.getWorkspace().addChild(upstreamSnapshot.getSPObject(), 0); + snapshot = new UserDefinedSQLTypeSnapshot(upstreamType, systemRevision, isDomainSnapshot, upstreamSnapshot);
+            } else {
+ snapshot = new UserDefinedSQLTypeSnapshot(upstreamType, systemRevision, isDomainSnapshot);
+            }
+            session.getWorkspace().addChild(snapshot, 0);
+            if ((upstreamType.getParent() instanceof DomainCategory)) {
+ DomainCategory parent = (DomainCategory) upstreamType.getParent();
+                DomainCategorySnapshot domainSnapshot =
+                    new DomainCategorySnapshot(parent, systemRevision);
+                session.getWorkspace().addChild(domainSnapshot, 0);
+ session.getWorkspace().addChild(domainSnapshot.getSPObject(), 0); + domainSnapshot.getSPObject().addChild(snapshot.getSPObject(), 0);
+            } else {
+                session.getWorkspace().addChild(snapshot.getSPObject(), 0);
+            }
+            typeProxy.setUpstreamType(snapshot.getSPObject());
+        }
+    }
+}
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/enterprise/DomainCategorySnapshot.java Fri Jul 30 10:06:06 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/enterprise/DomainCategorySnapshot.java Fri Jul 30 12:56:08 2010
@@ -22,7 +22,6 @@
 import java.util.Collections;
 import java.util.List;

-import ca.sqlpower.object.ObjectDependentException;
 import ca.sqlpower.object.SPObject;
 import ca.sqlpower.object.SystemSPObjectSnapshot;
 import ca.sqlpower.object.annotation.Accessor;
@@ -42,8 +41,7 @@
     }

     public DomainCategorySnapshot(DomainCategory original,
-            int systemRevision) throws IllegalArgumentException,
-            ObjectDependentException {
+            int systemRevision) {
         super(original.getUUID(), systemRevision);
         setName(original.getName());
         spObject = new DomainCategory(original.getName());
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/ColumnEditPanel.java Fri Jul 30 09:40:47 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/ColumnEditPanel.java Fri Jul 30 12:56:08 2010
@@ -69,12 +69,9 @@
 import org.apache.log4j.Logger;

 import ca.sqlpower.architect.ddl.DDLUtils;
-import ca.sqlpower.architect.enterprise.DomainCategory;
-import ca.sqlpower.architect.enterprise.DomainCategorySnapshot;
 import ca.sqlpower.architect.swingui.dbtree.DBTreeCellRenderer;
 import ca.sqlpower.architect.swingui.dbtree.DBTreeModel;
 import ca.sqlpower.object.AbstractPoolingSPListener;
-import ca.sqlpower.object.ObjectDependentException;
 import ca.sqlpower.object.SPChildEvent;
 import ca.sqlpower.object.SPListener;
 import ca.sqlpower.sqlobject.SQLColumn;
@@ -82,9 +79,8 @@
 import ca.sqlpower.sqlobject.SQLObjectException;
 import ca.sqlpower.sqlobject.SQLObjectUtils;
 import ca.sqlpower.sqlobject.SQLTypePhysicalPropertiesProvider;
-import ca.sqlpower.sqlobject.UserDefinedSQLType;
-import ca.sqlpower.sqlobject.UserDefinedSQLTypeSnapshot;
import ca.sqlpower.sqlobject.SQLTypePhysicalPropertiesProvider.PropertyType;
+import ca.sqlpower.sqlobject.UserDefinedSQLType;
 import ca.sqlpower.swingui.ChangeListeningDataEntryPanel;
 import ca.sqlpower.swingui.DataEntryPanelChangeUtil;
 import ca.sqlpower.swingui.PopupJTreeAction;
@@ -987,42 +983,7 @@
                 if (componentEnabledMap.get(colType).isSelected()) {
                     // Set upstream type on column
UserDefinedSQLType upstreamType = (UserDefinedSQLType) colType.getLastSelectedPathComponent();
-
- if (upstreamType != null && session.isEnterpriseSession() && - !((upstreamType.getParent().equals(session.getWorkspace())) | | // not an already existing type snapshot - (upstreamType.getParent() instanceof DomainCategory && - upstreamType.getParent().getParent().equals(session.getWorkspace())))) // not an already existing domain snapshot
-                    {
- int systemRevision = session.getEnterpriseSession().getSystemSession().getCurrentRevisionNumber(); - boolean isDomainSnapshot = upstreamType.getParent() instanceof DomainCategory;
-                        UserDefinedSQLTypeSnapshot snapshot;
-                        if (upstreamType.getUpstreamType() != null) {
-                            //For domains
- UserDefinedSQLType upUpStreamType = upstreamType.getUpstreamType(); - boolean isUpstreamDomainSnapshot = upUpStreamType.getParent() instanceof DomainCategory; - UserDefinedSQLTypeSnapshot upstreamSnapshot = new UserDefinedSQLTypeSnapshot(upUpStreamType, systemRevision, isUpstreamDomainSnapshot); - session.getWorkspace().addChild(upstreamSnapshot, 0); - session.getWorkspace().addChild(upstreamSnapshot.getSPObject(), 0); - snapshot = new UserDefinedSQLTypeSnapshot(upstreamType, systemRevision, isDomainSnapshot, upstreamSnapshot);
-                        } else {
- snapshot = new UserDefinedSQLTypeSnapshot(upstreamType, systemRevision, isDomainSnapshot);
-                        }
-                        session.getWorkspace().addChild(snapshot, 0);
- column.getUserDefinedSQLType().setUpstreamType(snapshot.getSPObject()); - if ((upstreamType.getParent() instanceof DomainCategory)) { - DomainCategory parent = (DomainCategory) upstreamType.getParent();
-                           DomainCategorySnapshot domainSnapshot =
- new DomainCategorySnapshot(parent, systemRevision); - session.getWorkspace().addChild(domainSnapshot, 0); - session.getWorkspace().addChild(domainSnapshot.getSPObject(), 0); - domainSnapshot.getSPObject().addChild(snapshot.getSPObject(), 0);
-                       } else {
- session.getWorkspace().addChild(snapshot.getSPObject(), 0);
-                       }
-
-                    } else {
- column.getUserDefinedSQLType().setUpstreamType(upstreamType);
-                    }
+ column.getUserDefinedSQLType().setUpstreamType(upstreamType);

                     // Set scale
                     if (typeOverrideMap.get(colScale).isSelected()) {
@@ -1087,10 +1048,6 @@
             }
         } catch (SQLObjectException e) {
             throw new RuntimeException(e);
-        } catch (IllegalArgumentException e) {
-            throw new RuntimeException(e);
-        } catch (ObjectDependentException e) {
-            throw new RuntimeException(e);
         } finally {
             compoundEditRoot.commit();
         }

Reply via email to