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

        }

Reply via email to