Revision: 3300
Author: ferguson.sebastian
Date: Wed Feb 17 08:55:16 2010
Log: SPSessionPersister is now abstract -> Specific session persisters are
created to handle the special case of changing a root node.
http://code.google.com/p/power-architect/source/detail?r=3300
Added:
/trunk/src/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java
Modified:
/trunk/src/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
/trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
/trunk/src/ca/sqlpower/architect/swingui/dbtree/DBTreeModel.java
=======================================
--- /dev/null
+++
/trunk/src/ca/sqlpower/architect/enterprise/ArchitectSessionPersister.java
Wed Feb 17 08:55:16 2010
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2010, SQL Power Group Inc.
+ *
+ * This file is part of Power*Architect.
+ *
+ * Power*Architect is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Power*Architect is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package ca.sqlpower.architect.enterprise;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import ca.sqlpower.architect.ArchitectProject;
+import ca.sqlpower.dao.PersistedSPOProperty;
+import ca.sqlpower.dao.PersistedSPObject;
+import ca.sqlpower.dao.SPSessionPersister;
+import ca.sqlpower.dao.helper.AbstractSPPersisterHelper;
+import ca.sqlpower.dao.session.SessionPersisterSuperConverter;
+import ca.sqlpower.object.SPObject;
+import ca.sqlpower.sqlobject.SQLDatabase;
+import ca.sqlpower.sqlobject.SQLObjectRoot;
+
+/**
+ * An architect specific persister.
+ */
+public class ArchitectSessionPersister extends SPSessionPersister {
+
+ public ArchitectSessionPersister(String name, SPObject root,
SessionPersisterSuperConverter converter) {
+ super(name, root, converter);
+ }
+
+ @Override
+ protected void refreshRootNode(PersistedSPObject pso) {
+ root.setUUID(pso.getUUID());
+ String rootObjectUUID = (String)
AbstractSPPersisterHelper.findPropertyAndRemove(
+ pso.getUUID(), "rootObject", persistedProperties);
+
+ PersistedSPObject persistedRootObject =
AbstractSPPersisterHelper.findPersistedSPObject(
+ pso.getUUID(), SQLObjectRoot.class.getName(),
rootObjectUUID, persistedObjects);
+ ArchitectProject architectProject = (ArchitectProject) root;
+ architectProject.getRootObject().setUUID(rootObjectUUID);
+ persistedRootObject.setLoaded(true);
+
+ List<PersistedSPObject> databases = new
ArrayList<PersistedSPObject>();
+ for (PersistedSPObject o : persistedObjects) {
+ if
(o.getParentUUID().equals(architectProject.getRootObject().getUUID()) &&
+ o.getType().equals(SQLDatabase.class.getName())) {
+ databases.add(o);
+ }
+ }
+
+ boolean found = false;
+ for (PersistedSPObject db : databases) {
+ for (PersistedSPOProperty prop :
persistedProperties.get(db.getUUID())) {
+ if (prop.getPropertyName().equals("playPenDatabase") &&
+ (Boolean)
converter.convertToComplexType(prop.getNewValue(), Boolean.class)) {
+
architectProject.getTargetDatabase().setUUID(db.getUUID());
+ db.setLoaded(true);
+ found = true;
+ break;
+ }
+ }
+ if (found) break;
+ }
+ }
+
+}
=======================================
---
/trunk/src/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
Tue Feb 16 14:02:41 2010
+++
/trunk/src/ca/sqlpower/architect/enterprise/ArchitectClientSideSession.java
Wed Feb 17 08:55:16 2010
@@ -112,7 +112,7 @@
dataSourceCollection = getDataSourceCollection();
- sessionPersister = new SPSessionPersister("inbound-" +
projectLocation.getUUID(), getWorkspace(),
+ sessionPersister = new ArchitectSessionPersister("inbound-" +
projectLocation.getUUID(), getWorkspace(),
new SessionPersisterSuperConverter(dataSourceCollection,
getWorkspace()));
sessionPersister.setSession(this);
@@ -196,7 +196,7 @@
public void startUpdaterThread() {
updater.start();
- final SPPersisterListener listener = new
SPPersisterListener(jsonPersister,
+ final SPPersisterListener listener = new
SPPersisterListener(jsonPersister, sessionPersister,
new SessionPersisterSuperConverter(dataSourceCollection,
getWorkspace()));
SQLPowerUtils.listenToHierarchy(getWorkspace(), listener);
@@ -320,6 +320,8 @@
public static ProjectLocation createNewServerSession(SPServerInfo
serviceInfo) throws URISyntaxException, ClientProtocolException,
IOException, JSONException {
HttpClient httpClient = createHttpClient(serviceInfo);
try {
+
+
HttpUriRequest request = new
HttpGet(getServerURI(serviceInfo, "/jcr/projects/new"));
String responseBody = httpClient.execute(request, new
JSONResponseHandler());
=======================================
---
/trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
Thu Feb 11 14:26:15 2010
+++
/trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
Wed Feb 17 08:55:16 2010
@@ -277,7 +277,7 @@
if (initGUI) {
swingSession.initGUI();
}
-
+ getSessions().add(swingSession);
return swingSession;
}
=======================================
--- /trunk/src/ca/sqlpower/architect/swingui/dbtree/DBTreeModel.java Thu
Jan 28 15:27:58 2010
+++ /trunk/src/ca/sqlpower/architect/swingui/dbtree/DBTreeModel.java Wed
Feb 17 08:55:16 2010
@@ -250,7 +250,7 @@
public void propertyChanged(PropertyChangeEvent e) {
logger.debug("dbObjectChanged. source="+e.getSource());
//$NON-NLS-1$
if ((!SwingUtilities.isEventDispatchThread()) &&
(!refireOnAnyThread)) {
- logger.debug("Not refiring because this is not the EDT.
You will need to call refreshTreeStructure() at some point in the
future."); //$NON-NLS-1$
+ logger.warn("Not refiring because this is not the EDT. You
will need to call refreshTreeStructure() at some point in the future.");
//$NON-NLS-1$
return;
}
if (logger.isDebugEnabled()) logger.debug("dbObjectChanged
SQLObjectEvent: "+e); //$NON-NLS-1$
@@ -285,8 +285,15 @@
!e.getNewValue().equals(((SPObject)
e.getSource()).getName()) ) {
logger.error("Name change event has wrong new value.
new="+e.getNewValue()+"; real="+((SPObject) e.getSource()).getName());
//$NON-NLS-1$ //$NON-NLS-2$
}
+
SPObject source = (SPObject) e.getSource();
- fireTreeNodesChanged(new TreeModelEvent(this,
getPathToNode(source)));
+ //The UUID should only change during loading. If it changes at
a different time it is likely an error.
+ if (e.getPropertyName().equals("UUID")) {
+ refreshTreeStructure();
+ logger.info("Changing a UUID. This should only be done
during load.");
+ } else {
+ fireTreeNodesChanged(new TreeModelEvent(this,
getPathToNode(source)));
+ }
}
}