Author: thomasobrien95
Date: Fri Dec 19 08:38:37 2008
New Revision: 2891

Modified:
   trunk/regress/ca/sqlpower/architect/swingui/TestSwingUIProject.java
   trunk/src/ca/sqlpower/architect/swingui/SwingUIProject.java

Log:
Fix for a bug posted on the forum 2147. The loading of OLAP edit session were creating new OLAP edit sessions even though the constructor's doc comment said not to. This resulted in every load having twice the number of edit sessions as before and project files now taking hours to load. OLAP edit sessions are now loaded by using the session's method to construct the edit sessions.

Modified: trunk/regress/ca/sqlpower/architect/swingui/TestSwingUIProject.java
==============================================================================
--- trunk/regress/ca/sqlpower/architect/swingui/TestSwingUIProject.java (original) +++ trunk/regress/ca/sqlpower/architect/swingui/TestSwingUIProject.java Fri Dec 19 08:38:37 2008
@@ -62,6 +62,8 @@
 import ca.sqlpower.architect.TestingArchitectSessionContext;
 import ca.sqlpower.architect.SQLIndex.AscendDescend;
 import ca.sqlpower.architect.ddl.SQLServerDDLGenerator;
+import ca.sqlpower.architect.olap.MondrianModel;
+import ca.sqlpower.architect.olap.OLAPSession;
 import ca.sqlpower.architect.profile.ColumnProfileResult;
 import ca.sqlpower.architect.profile.ProfileManager;
 import ca.sqlpower.architect.profile.TableProfileResult;
@@ -1283,5 +1285,32 @@

assertTrue(out.toString().contains("UnsupportedOperationException"));
         System.out.println(out.toString());
+    }
+
+    /**
+ * Regression testing for a bug on the forum 2147. When a project with olap + * sessions is saved and loaded the loaded session will have twice the number
+     * of olap sessions.
+     */
+ public void testSaveAndLoadDoesNotCreateOLAPSessions() throws Exception {
+
+ ArchitectSwingSession session = new ArchitectSwingSessionImpl(context, "Test session");
+
+        OLAPSession osession = new OLAPSession(new MondrianModel.Schema());
+        osession.setDatabase(session.getTargetDatabase());
+        session.getOLAPRootObject().addChild(osession);
+        session.getOLAPEditSession(osession);
+        assertEquals(1, session.getOLAPEditSessions().size());
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        session.getProject().save(byteArrayOutputStream, ENCODING);
+
+        System.out.println(byteArrayOutputStream.toString());
+
+ ArchitectSwingSession session2 = new ArchitectSwingSessionImpl(context, "Load session");
+        SwingUIProject project2 = new SwingUIProject(session2);
+ project2.load(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), plIni);
+
+        assertEquals(1, session2.getOLAPEditSessions().size());
     }
 }

Modified: trunk/src/ca/sqlpower/architect/swingui/SwingUIProject.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/SwingUIProject.java (original)
+++ trunk/src/ca/sqlpower/architect/swingui/SwingUIProject.java Fri Dec 19 08:38:37 2008
@@ -555,9 +555,7 @@
         public Object createObject(Attributes attributes) {
             OLAPSession oSession =
(OLAPSession) olapObjectLoadIdMap.get(attributes.getValue("osession-ref")); //$NON-NLS-1$ - OLAPEditSession editSession = new OLAPEditSession(getSession(), oSession);
-            getSession().getOLAPEditSessions().add(editSession);
-            return editSession;
+            return getSession().getOLAPEditSession(oSession);
         }
     }

Reply via email to