Author: jfuerth
Date: Wed Sep 3 14:56:33 2008
New Revision: 2691
Modified:
trunk/regress/ca/sqlpower/architect/swingui/ArchitectSwingSessionImplTest.java
trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSession.java
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
Log:
Pulled up the session lifecycle listener methods to the interface. It was a
mistake to only declare them in the implementation class in the first place.
Modified:
trunk/regress/ca/sqlpower/architect/swingui/ArchitectSwingSessionImplTest.java
==============================================================================
---
trunk/regress/ca/sqlpower/architect/swingui/ArchitectSwingSessionImplTest.java
(original)
+++
trunk/regress/ca/sqlpower/architect/swingui/ArchitectSwingSessionImplTest.java
Wed Sep 3 14:56:33 2008
@@ -183,7 +183,7 @@
public void testRelationshipLinePrefUpdatesRelationships() throws
Exception {
ArchitectSwingSessionContext context = new StubContext();
- ArchitectSwingSessionImpl session =
(ArchitectSwingSessionImpl)context.createSession(false);
+ ArchitectSwingSession session =
(ArchitectSwingSession)context.createSession(false);
SQLDatabase db = new SQLDatabase();
SQLTable t1 = new SQLTable(db, true);
Modified:
trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
==============================================================================
---
trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
(original)
+++
trunk/regress/ca/sqlpower/architect/swingui/TestingArchitectSwingSession.java
Wed Sep 3 14:56:33 2008
@@ -45,6 +45,7 @@
import ca.sqlpower.architect.swingui.olap.OLAPEditSession;
import ca.sqlpower.architect.undo.UndoManager;
import ca.sqlpower.swingui.SPSwingWorker;
+import ca.sqlpower.swingui.event.SessionLifecycleListener;
/**
* Minimally functional session implementation that creates but does
@@ -349,6 +350,14 @@
public OLAPEditSession getOLAPEditSession(OLAPSession olapSession) {
return null;
+ }
+
+ public void
addSessionLifecycleListener(SessionLifecycleListener<ArchitectSwingSession>
listener) {
+ // do-nothing stub
+ }
+
+ public void
removeSessionLifecycleListener(SessionLifecycleListener<ArchitectSwingSession>
listener) {
+ // do-nothing stub
}
}
Modified: trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSession.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSession.java
(original)
+++ trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSession.java Wed
Sep 3 14:56:33 2008
@@ -31,6 +31,7 @@
import ca.sqlpower.architect.swingui.olap.OLAPEditSession;
import ca.sqlpower.architect.undo.UndoManager;
import ca.sqlpower.swingui.SwingWorkerRegistry;
+import ca.sqlpower.swingui.event.SessionLifecycleListener;
/**
* The ArchitectSwingSession interface provides methods that are applicable
@@ -290,4 +291,18 @@
* @return the associated OLAPEditSession, creates a new one if none
found.
*/
public OLAPEditSession getOLAPEditSession(OLAPSession olapSession);
+
+ /**
+ * Adds the given listener to the list of interested parties who want
to be
+ * notified when this session is about to close. Being a lifecycle
listener
+ * is an excellent way to make a session shutdown hook for your
subsystem.
+ */
+ public void
addSessionLifecycleListener(SessionLifecycleListener<ArchitectSwingSession>
listener);
+
+ /**
+ * Removes the given listener from the lifecycle event list. Once
removed,
+ * the listener will not receive a sessionClosing notification when
this
+ * session closes.
+ */
+ public void
removeSessionLifecycleListener(SessionLifecycleListener<ArchitectSwingSession>
listener);
}
Modified:
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
==============================================================================
---
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
(original)
+++
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionContextImpl.java
Wed Sep 3 14:56:33 2008
@@ -227,7 +227,7 @@
*/
private ArchitectSwingSession createSessionImpl(String projectName,
boolean showGUI, ArchitectSwingSession openingSession) throws
ArchitectException {
logger.debug("About to create a new session for project \"" +
projectName + "\""); //$NON-NLS-1$ //$NON-NLS-2$
- ArchitectSwingSessionImpl session = new
ArchitectSwingSessionImpl(this, projectName);
+ ArchitectSwingSession session = new
ArchitectSwingSessionImpl(this, projectName);
getSessions().add(session);
session.addSessionLifecycleListener(sessionLifecycleListener);
Modified:
trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
(original)
+++ trunk/src/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java
Wed Sep 3 14:56:33 2008
@@ -119,7 +119,7 @@
private KettleJob kettleJob;
// END STUFF BROUGHT IN FROM SwingUIProject
- private List<SessionLifecycleListener<ArchitectSwingSession>>
lifecycleListener;
+ private final List<SessionLifecycleListener<ArchitectSwingSession>>
lifecycleListeners;
private Set<SPSwingWorker> swingWorkers;
@@ -202,7 +202,7 @@
playPen.getPlayPenContentPane().addPropertyChangeListener("dashed",
undoManager.getEventAdapter()); //$NON-NLS-1$
playPen.getPlayPenContentPane().addPropertyChangeListener("rounded",
undoManager.getEventAdapter()); //$NON-NLS-1$
- lifecycleListener = new
ArrayList<SessionLifecycleListener<ArchitectSwingSession>>();
+ lifecycleListeners = new
ArrayList<SessionLifecycleListener<ArchitectSwingSession>>();
swingWorkers = new HashSet<SPSwingWorker>();
@@ -728,12 +728,16 @@
// END STUFF BROUGHT IN FROM SwingUIProject
public void
addSessionLifecycleListener(SessionLifecycleListener<ArchitectSwingSession>
listener) {
- lifecycleListener.add(listener);
+ lifecycleListeners.add(listener);
+ }
+
+ public void
removeSessionLifecycleListener(SessionLifecycleListener<ArchitectSwingSession>
listener) {
+ lifecycleListeners.remove(listener);
}
public void fireSessionClosing() {
SessionLifecycleEvent<ArchitectSwingSession> evt = new
SessionLifecycleEvent<ArchitectSwingSession>(this);
- for (SessionLifecycleListener<ArchitectSwingSession> listener:
lifecycleListener) {
+ for (SessionLifecycleListener<ArchitectSwingSession> listener:
lifecycleListeners) {
listener.sessionClosing(evt);
}
}