Revision: 3496
Author: [email protected]
Date: Wed May  5 12:48:15 2010
Log: Bug fix so loaded projects appear with correct type information.

The ArchitectSessionSuperConverter now looks up SQLType information in the data source collection which is different from the default lookup of UUIDs. More places in Architect are using the Architect specific converter than the default one.

The ArchitectSessionPersister revalidates UI components after persisting changes from the server since magic is disabled
at this time and the revalidate was not occurring.
http://code.google.com/p/power-architect/source/detail?r=3496

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/diff/CompareSQL.java
/trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectPersisterSuperConverter.java /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/RevisionListPanel.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/diff/CompareSQL.java Fri Mar 26 16:00:04 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/diff/CompareSQL.java Wed May 5 12:48:15 2010
@@ -25,11 +25,12 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
-import org.apache.commons.lang.StringUtils;
-
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;

 import ca.sqlpower.architect.ArchitectUtils;
+import ca.sqlpower.architect.enterprise.ArchitectPersisterSuperConverter;
 import ca.sqlpower.dao.PersisterUtils;
 import ca.sqlpower.dao.session.SessionPersisterSuperConverter;
 import ca.sqlpower.diff.DiffChunk;
@@ -795,7 +796,7 @@


            try {
- SessionPersisterSuperConverter converter = new SessionPersisterSuperConverter(null, sourceObject); + SessionPersisterSuperConverter converter = new ArchitectPersisterSuperConverter(null, sourceObject); Map<String, Object> sourceProperties = PersisterUtils.getInterestingProperties(sourceObject, converter); converter = new SessionPersisterSuperConverter(null, targetObject); Map<String, Object> targetProperties = PersisterUtils.getInterestingProperties(targetObject, converter);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java Wed May 5 11:55:18 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java Wed May 5 12:48:15 2010
@@ -158,7 +158,7 @@
                dataSourceCollection = getDataSources();

sessionPersister = new ArchitectSessionPersister("inbound-" + projectLocation.getUUID(), getWorkspace(), - new SessionPersisterSuperConverter(dataSourceCollection, getWorkspace())); + new ArchitectPersisterSuperConverter(dataSourceCollection, getWorkspace()));
                sessionPersister.setWorkspaceContainer(this);

                jsonMessageDecoder = new SPJSONMessageDecoder(sessionPersister);
@@ -274,7 +274,7 @@
        public void startUpdaterThread() {

final SPPersisterListener listener = new SPPersisterListener(jsonPersister, sessionPersister, - new SessionPersisterSuperConverter(dataSourceCollection, getWorkspace())); + new ArchitectPersisterSuperConverter(dataSourceCollection, getWorkspace()));
                SQLPowerUtils.listenToHierarchy(getWorkspace(), listener);

                updater.setListener(listener);
@@ -304,7 +304,7 @@

        public void persistProjectToServer() throws SPPersistenceException {
final SPPersisterListener tempListener = new SPPersisterListener(jsonPersister, - new SessionPersisterSuperConverter(dataSourceCollection, getWorkspace())); + new ArchitectPersisterSuperConverter(dataSourceCollection, getWorkspace()));
                tempListener.persistObject(getWorkspace(), 0);
        }

@@ -935,6 +935,7 @@
      */
     @Override
     public List<UserDefinedSQLType> getSQLTypes() {
-        return getSystemWorkspace().getSqlTypes();
+ final List<UserDefinedSQLType> sqlTypes = getSystemWorkspace().getSqlTypes();
+        return sqlTypes;
     }
 }
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectPersisterSuperConverter.java Thu Feb 11 11:47:13 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectPersisterSuperConverter.java Wed May 5 12:48:15 2010
@@ -19,10 +19,12 @@

 package ca.sqlpower.architect.enterprise;

+import ca.sqlpower.dao.session.SPObjectConverter;
 import ca.sqlpower.dao.session.SessionPersisterSuperConverter;
 import ca.sqlpower.object.SPObject;
 import ca.sqlpower.sql.DataSourceCollection;
 import ca.sqlpower.sql.SPDataSource;
+import ca.sqlpower.sqlobject.UserDefinedSQLType;

 /**
* This converter contains specific conversions for Architect objects. This will
@@ -30,8 +32,11 @@
  */
public class ArchitectPersisterSuperConverter extends SessionPersisterSuperConverter {

+    private SPObjectConverter spObjectConverter;
+
public ArchitectPersisterSuperConverter(DataSourceCollection<? extends SPDataSource> dsCollection, SPObject root) {
         super(dsCollection, root);
+        spObjectConverter = new SPObjectConverter(root);
     }

     @Override
@@ -41,7 +46,22 @@

     @Override
public Object convertToComplexType(Object o, Class<? extends Object> type) {
-        return super.convertToComplexType(o, type);
+        if (o == null) {
+            return null;
+
+        } else if (SPObject.class.isAssignableFrom(type)) {
+ SPObject foundObject = spObjectConverter.convertToComplexType((String) o);
+            if (foundObject == null && dsCollection != null) {
+ for (UserDefinedSQLType sqlType : dsCollection.getSQLTypes()) {
+                    if (sqlType.getUUID().equals((String) o)) {
+                        return sqlType;
+                    }
+                }
+            }
+            return foundObject;
+        } else {
+            return super.convertToComplexType(o, type);
+        }
     }

 }
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java Wed Apr 14 09:10:02 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java Wed May 5 12:48:15 2010
@@ -19,31 +19,91 @@

 package ca.sqlpower.architect.enterprise;

+import java.beans.PropertyChangeEvent;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;

 import ca.sqlpower.architect.ArchitectProject;
 import ca.sqlpower.architect.etl.kettle.KettleSettings;
 import ca.sqlpower.architect.olap.OLAPRootObject;
 import ca.sqlpower.architect.profile.ProfileManagerImpl;
+import ca.sqlpower.architect.swingui.PlayPenComponent;
+import ca.sqlpower.architect.swingui.PlayPenContentPane;
 import ca.sqlpower.dao.PersistedSPOProperty;
 import ca.sqlpower.dao.PersistedSPObject;
+import ca.sqlpower.dao.SPPersistenceException;
 import ca.sqlpower.dao.SPSessionPersister;
 import ca.sqlpower.dao.helper.AbstractSPPersisterHelper;
 import ca.sqlpower.dao.session.SessionPersisterSuperConverter;
+import ca.sqlpower.object.AbstractSPListener;
+import ca.sqlpower.object.SPChildEvent;
+import ca.sqlpower.object.SPListener;
 import ca.sqlpower.object.SPObject;
 import ca.sqlpower.sqlobject.SQLDatabase;
 import ca.sqlpower.sqlobject.SQLObjectRoot;
+import ca.sqlpower.util.SQLPowerUtils;

 /**
  * An architect specific persister.
  */
 public class ArchitectSessionPersister extends SPSessionPersister {

+    /**
+ * This listener is only attached to the {...@link PlayPenContentPane} and it's
+     * children. It will cause the viewable components to revalidate after
+     * changes from the server since the persister has magic disabled while
+ * making changes and the components only revalidate if magic is enabled.
+     */
+ private final SPListener ppcRevalidateListener = new AbstractSPListener() {
+
+        public void childAdded(SPChildEvent e) {
+            if (e.getChild() instanceof PlayPenContentPane) {
+                e.getChild().addSPListener(this);
+ for (PlayPenComponent ppc : ((PlayPenContentPane) e.getChild()).getChildren(PlayPenComponent.class)) {
+                    ppc.addSPListener(this);
+                }
+            } else if (e.getChild() instanceof PlayPenComponent) {
+                e.getChild().addSPListener(this);
+            }
+        }
+
+        public void childRemoved(SPChildEvent e) {
+            e.getChild().removeSPListener(this);
+        }
+
+        public void propertyChanged(PropertyChangeEvent evt) {
+            if (evt.getSource() instanceof PlayPenComponent) {
+ componentsToRevalidate.add(((PlayPenComponent) evt.getSource()));
+            }
+        }
+
+    };
+
+    /**
+ * This is the set of components that need to be revalidated at the end of
+     * a commit so they are revalidated when magic is enabled.
+     */
+ private final Set<PlayPenComponent> componentsToRevalidate = new HashSet<PlayPenComponent>();
+
public ArchitectSessionPersister(String name, SPObject root, SessionPersisterSuperConverter converter) {
         super(name, root, converter);
+        SQLPowerUtils.listenToHierarchy(root, ppcRevalidateListener);
     }

+    @Override
+    public void commit() throws SPPersistenceException {
+        synchronized(getWorkspaceContainer().getWorkspace()) {
+            componentsToRevalidate.clear();
+            super.commit();
+            for (PlayPenComponent ppc : componentsToRevalidate) {
+                ppc.revalidate();
+            }
+            componentsToRevalidate.clear();
+        }
+    }
+
     @Override
     protected void refreshRootNode(PersistedSPObject pso) {
         root.setUUID(pso.getUUID());
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/RevisionListPanel.java Fri Apr 9 08:41:23 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/enterprise/RevisionListPanel.java Wed May 5 12:48:15 2010
@@ -43,12 +43,12 @@
 import org.apache.log4j.Logger;

 import ca.sqlpower.architect.enterprise.ArchitectClientSideSession;
+import ca.sqlpower.architect.enterprise.ArchitectPersisterSuperConverter;
 import ca.sqlpower.architect.enterprise.ArchitectSessionPersister;
 import ca.sqlpower.architect.enterprise.ProjectLocation;
 import ca.sqlpower.architect.swingui.ArchitectFrame;
 import ca.sqlpower.architect.swingui.ArchitectSwingSession;
 import ca.sqlpower.dao.json.SPJSONMessageDecoder;
-import ca.sqlpower.dao.session.SessionPersisterSuperConverter;
 import ca.sqlpower.swingui.SPSUtils;

 import com.jgoodies.forms.builder.DefaultFormBuilder;
@@ -201,7 +201,7 @@

ArchitectSessionPersister sessionPersister = new ArchitectSessionPersister( "inbound-" + location.getUUID(), revisionSession.getWorkspace(),
-                        new SessionPersisterSuperConverter(
+                        new ArchitectPersisterSuperConverter(
revisionSession.getDataSources(), revisionSession.getWorkspace()));

                 sessionPersister.setWorkspaceContainer(revisionSession);

Reply via email to