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);