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

Reply via email to