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