Author: paperwing
Date: 2012-04-09 12:31:49 -0700 (Mon, 09 Apr 2012)
New Revision: 28769

Added:
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
Modified:
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CheckForUpdatesPanel.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
Log:
Installed apps now show up in the table on the "currently installed apps" tab, 
updated CyAppAdapterImpl to reflect recent Cytoscape refactoring involving 
vizmapper, added event classes so that the panels containing the tables can 
listen for app events in order to update and populate their tables

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
    2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
    2012-04-09 19:31:49 UTC (rev 28769)
@@ -5,6 +5,7 @@
 import org.cytoscape.app.internal.swing.main.AppManagerDialog;
 import org.cytoscape.application.swing.AbstractCyAction;
 import org.cytoscape.application.swing.CySwingApplication;
+import org.cytoscape.app.internal.manager.AppManager;
 
 public class AppManagerAction extends AbstractCyAction {
 
@@ -16,18 +17,23 @@
         */
        private CySwingApplication swingApplication;
        
-       public AppManagerAction(CySwingApplication swingApplication) {
+       private AppManager appManager;
+       
+       public AppManagerAction(AppManager appManager, CySwingApplication 
swingApplication) {
                super("App Manager2");
                
                setPreferredMenu("Apps");
                setMenuGravity(1.0f);
                
+               this.appManager = appManager;
                this.swingApplication = swingApplication;
+               
+               System.out.println("AppManager instance: " + appManager);
        }
 
        @Override
        public void actionPerformed(ActionEvent event) {
-               AppManagerDialog appManagerDialog = new AppManagerDialog(null, 
swingApplication.getJFrame(), true);
+               AppManagerDialog appManagerDialog = new 
AppManagerDialog(appManager, swingApplication.getJFrame(), true);
        }
 
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
 2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
 2012-04-09 19:31:49 UTC (rev 28769)
@@ -121,19 +121,20 @@
                                cyApplicationConfigurationServiceRef);
                StartupMostlyFinished startupMostlyFinished = new 
StartupMostlyFinished(cyEventHelperRef);
                
-               // Attempt to instantiate new manager
-               org.cytoscape.app.internal.manager.AppManager appManager = new 
org.cytoscape.app.internal.manager.AppManager(
-                               cyAppAdapter, 
cyApplicationConfigurationServiceRef);
                
+               
                registerService(bc,cyAppAdapter,CyAppAdapter.class, new 
Properties());
                
                registerService(bc,appLoaderTaskFactory,TaskFactory.class, new 
Properties());
                registerAllServices(bc,appManagerAction, new Properties());
                
+               // Attempt to instantiate new manager
+               org.cytoscape.app.internal.manager.AppManager appManager = new 
org.cytoscape.app.internal.manager.AppManager(
+                               cyAppAdapter, 
cyApplicationConfigurationServiceRef);
+               registerService(bc, appManager, 
org.cytoscape.app.internal.manager.AppManager.class, new Properties());
+               
                // AbstractCyAction implementation for updated app manager
-               org.cytoscape.app.internal.AppManagerAction appManagerAction2 = 
new org.cytoscape.app.internal.AppManagerAction(cySwingApplicationRef);
-               //registerService(bc, appManagerAction2, 
AbstractCyAction.class, new Properties());
-               //registerService(bc, appManagerAction2, AbstractAction.class, 
new Properties());
+               org.cytoscape.app.internal.AppManagerAction appManagerAction2 = 
new org.cytoscape.app.internal.AppManagerAction(appManager, 
cySwingApplicationRef);;
                registerService(bc, appManagerAction2, CyAction.class, new 
Properties());
        }
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
    2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
    2012-04-09 19:31:49 UTC (rev 28769)
@@ -3,6 +3,8 @@
 
 import java.util.Properties;
 
+import org.cytoscape.app.AbstractCyApp;
+import org.cytoscape.app.CyAppAdapter;
 import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.application.CyVersion;
 import org.cytoscape.application.swing.CyAction;
@@ -32,10 +34,8 @@
 import org.cytoscape.model.CyTableManager;
 import org.cytoscape.model.events.AboutToRemoveEdgesEvent;
 import org.cytoscape.model.subnetwork.CyRootNetworkManager;
-import org.cytoscape.app.AbstractCyApp;
-import org.cytoscape.app.CyAppAdapter;
-import org.cytoscape.property.SimpleCyProperty;
 import org.cytoscape.property.CyProperty;
+import org.cytoscape.property.SimpleCyProperty;
 import org.cytoscape.property.bookmark.BookmarksUtil;
 import org.cytoscape.service.util.CyServiceRegistrar;
 import org.cytoscape.session.CySessionManager;
@@ -54,7 +54,6 @@
 import org.cytoscape.view.vizmap.VisualMappingManager;
 import org.cytoscape.view.vizmap.VisualStyleFactory;
 import org.cytoscape.view.vizmap.events.VisualStyleAboutToBeRemovedEvent;
-import org.cytoscape.view.vizmap.gui.AbstractVisualPropertyDependency;
 import org.cytoscape.view.vizmap.gui.editor.AbstractVisualPropertyEditor;
 import org.cytoscape.view.vizmap.gui.event.LexiconStateChangedEvent;
 import org.cytoscape.work.Task;
@@ -143,7 +142,6 @@
        private AbstractGUITunableHandler abstractGUITunableHandler;
        private AbstractLayoutAlgorithm abstractLayout;
        private AbstractFunction abstractFunction;
-       private AbstractVisualPropertyDependency 
abstractVisualPropertyDependency;
        private AbstractVisualPropertyEditor abstractVisualPropertyEditor;
        private LexiconStateChangedEvent lexiconStateChangedEvent;
        private NetworkImportWebServiceClient networkImportWebServiceClient;

Added: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
                              (rev 0)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
      2012-04-09 19:31:49 UTC (rev 28769)
@@ -0,0 +1,24 @@
+package org.cytoscape.app.internal.event;
+
+import org.cytoscape.app.internal.manager.App;
+import org.cytoscape.app.internal.manager.AppManager;
+import org.cytoscape.event.AbstractCyEvent;
+
+public final class AppEvent {
+
+       private AppManager source;
+       private App app;
+
+       public AppEvent(AppManager source, App app) {
+               this.source = source;
+               this.app = app;
+       }
+       
+       public AppManager getSource() {
+               return source;
+       }
+       
+       public App getApp() {
+               return app;
+       }
+}


Property changes on: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Added: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
                           (rev 0)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
   2012-04-09 19:31:49 UTC (rev 28769)
@@ -0,0 +1,8 @@
+package org.cytoscape.app.internal.event;
+
+public interface AppListener {
+       
+       public void appInstalled(AppEvent event);
+       
+       public void appUninstalled(AppEvent event);
+}


Property changes on: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
 2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
 2012-04-09 19:31:49 UTC (rev 28769)
@@ -44,14 +44,31 @@
         */
        private boolean officialNameObtained;
        
+       /**
+        * Whether or not the app is a simple app as opposed to an OSGi 
bundle-based app.
+        */
+       private boolean isSimpleApp;
+       
        private AppStatus status;
        
        /**
         * An enumeration that indicates the status of a given app, such as 
whether it is installed or uninstalled.
         */
        public enum AppStatus{
-               INSTALLED,
-               TO_BE_UNINSTALLED,
+               INSTALLED("Installed"),
+               TO_BE_UNINSTALLED("Uninstall on Restart"),
+               UNINSTALLED("Uninstalled");
+               
+               String readableStatus;
+               
+               private AppStatus(String readableStatus) {
+                       this.readableStatus = readableStatus;
+               }
+               
+               @Override
+               public String toString() {
+                       return readableStatus;
+               }
        }
        
        public App() {
@@ -109,6 +126,10 @@
                return officialNameObtained;
        }
        
+       public boolean isSimpleApp() {
+               return isSimpleApp;
+       }
+       
        public AppStatus getStatus() {
                return status;
        }
@@ -153,6 +174,10 @@
                this.officialNameObtained = officialNameObtained;
        }
        
+       public void setSimpleApp(boolean isSimpleApp) {
+               this.isSimpleApp = isSimpleApp;
+       }
+       
        public void setStatus(AppStatus status) {
                this.status = status;
        }
@@ -170,4 +195,6 @@
 
 
 
+
+
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
  2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
  2012-04-09 19:31:49 UTC (rev 28769)
@@ -14,6 +14,8 @@
 import org.apache.commons.io.FileUtils;
 import org.cytoscape.app.AbstractCyApp;
 import org.cytoscape.app.CyAppAdapter;
+import org.cytoscape.app.internal.event.AppEvent;
+import org.cytoscape.app.internal.event.AppListener;
 import org.cytoscape.app.internal.exception.AppCopyException;
 import org.cytoscape.app.internal.exception.AppParsingException;
 import org.cytoscape.app.internal.manager.App.AppStatus;
@@ -42,6 +44,8 @@
        private Set<App> toBeUninstalledApps;
        private Set<App> uninstalledApps;
        
+       private Set<AppListener> appListeners;
+       
        /** An {@link AppParser} object used to parse File objects and possibly 
URLs into {@link App} objects
         * into a format we can more easily work with
         */
@@ -72,6 +76,7 @@
                System.out.println("Installed apps path: " + 
getInstalledAppsPath());
                System.out.println("Uninstalled apps path: " + 
getUninstalledAppsPath());
                
+               /*
                try {
                        App app = appParser.parseApp(new 
File(getBaseAppPath().getCanonicalPath() + File.separator + 
"CytoscapeTestSimpleApp.jar"));
                        installApp(app);
@@ -85,14 +90,17 @@
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
+               */
                
+               this.appListeners = new HashSet<AppListener>();
                
-               
-               /*
                installAppsInDirectory(new File(getInstalledAppsPath()));
-               */
        }
        
+       public AppParser getAppParser() {
+               return appParser;
+       }
+       
        /**
         * Attempts to install an app. Makes a copy of the app file and places 
it in the directory 
         * used to hold all installed and uninstalled apps, if it was not 
already present there. Then, the 
@@ -178,6 +186,12 @@
                app.setStatus(AppStatus.INSTALLED);
                
                installedApps.add(app);
+               
+               // Let the listeners know that an app has been installed
+               for (AppListener appListener : appListeners) {
+                       AppEvent appEvent = new AppEvent(this, app);
+                       appListener.appInstalled(appEvent);
+               }
        }
        
        /**
@@ -224,6 +238,12 @@
                                
                                installedApps.remove(app);
                                toBeUninstalledApps.add(app);
+                               
+                               // Let the listeners know that an app has been 
uninstalled
+                               for (AppListener appListener : appListeners) {
+                                       AppEvent appEvent = new AppEvent(this, 
app);
+                                       appListener.appUninstalled(appEvent);
+                               }
                        }
                } catch (IOException e) {
                        throw new RuntimeException("Unable to obtain path: " + 
e.getMessage());
@@ -314,15 +334,6 @@
                
                this.installedApps.addAll(parsedApps);
                
-               for (App installedApp : this.installedApps) {
-                       try {
-                               uninstallApp(installedApp);
-                       } catch (AppCopyException e) {
-                               // TODO Auto-generated catch block
-                               e.printStackTrace();
-                       }
-               }
-               
                System.out.println("Number of apps installed from directory: " 
+ parsedApps.size());
        }
        
@@ -351,4 +362,16 @@
                        throw new RuntimeException("Failed to create local app 
storage directories.");
                }
        }
+       
+       public void addAppListener(AppListener appListener) {
+               appListeners.add(appListener);
+       }
+       
+       public  void removeAppListener(AppListener appListener) {
+               appListeners.remove(appListener);
+       }
+       
+       public void installAppsFromDirectory() {
+               installAppsInDirectory(new File(getInstalledAppsPath()));
+       }
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
   2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
   2012-04-09 19:31:49 UTC (rev 28769)
@@ -63,6 +63,7 @@
                parsedApp.setEntryClassName(entryClassName);
                parsedApp.setJarURL(jarURL);
                parsedApp.setAppValidated(true);
+               parsedApp.setSimpleApp(true);
                
                return parsedApp;
        }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
 2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
 2012-04-09 19:31:49 UTC (rev 28769)
@@ -5,18 +5,18 @@
 
 public class AppManagerDialog extends javax.swing.JDialog {
 
-    private CheckForUpdatesPanel checkForUpdatesPanel1;
-    private CurrentlyInstalledAppsPanel currentlyInstalledAppsPanel1;
-    private InstallNewAppsPanel installNewAppsPanel1;
+    private CheckForUpdatesPanel checkForUpdatesPanel;
+    private CurrentlyInstalledAppsPanel currentlyInstalledAppsPanel;
+    private InstallNewAppsPanel installNewAppsPanel;
     private javax.swing.JTabbedPane mainTabbedPane;
     
     private AppManager appManager;
        
     public AppManagerDialog(AppManager appManager, java.awt.Frame parent, 
boolean modal) {
         super(parent, modal);
-        initComponents();
         
         this.appManager = appManager;
+        initComponents();
         
         this.setLocationRelativeTo(parent);
         this.setVisible(true);
@@ -28,15 +28,15 @@
     private void initComponents() {
 
         mainTabbedPane = new javax.swing.JTabbedPane();
-        installNewAppsPanel1 = new InstallNewAppsPanel();
-        currentlyInstalledAppsPanel1 = new CurrentlyInstalledAppsPanel();
-        checkForUpdatesPanel1 = new CheckForUpdatesPanel();
+        installNewAppsPanel = new InstallNewAppsPanel();
+        currentlyInstalledAppsPanel = new 
CurrentlyInstalledAppsPanel(appManager);
+        checkForUpdatesPanel = new CheckForUpdatesPanel();
 
         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
 
-        mainTabbedPane.addTab("Install New Apps", installNewAppsPanel1);
-        mainTabbedPane.addTab("Currently Installed", 
currentlyInstalledAppsPanel1);
-        mainTabbedPane.addTab("Check for Updates", checkForUpdatesPanel1);
+        mainTabbedPane.addTab("Install New Apps", installNewAppsPanel);
+        mainTabbedPane.addTab("Currently Installed", 
currentlyInstalledAppsPanel);
+        mainTabbedPane.addTab("Check for Updates", checkForUpdatesPanel);
 
         org.jdesktop.layout.GroupLayout layout = new 
org.jdesktop.layout.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CheckForUpdatesPanel.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CheckForUpdatesPanel.java
     2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CheckForUpdatesPanel.java
     2012-04-09 19:31:49 UTC (rev 28769)
@@ -45,42 +45,20 @@
         });
 
         updatesTable.setModel(new javax.swing.table.DefaultTableModel(
-            new Object [][] {
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null},
-                {null, null, null}
-            },
+            new Object [][] {},
             new String [] {
                 "App Name", "Version", "Update Description"
             }
-        ));
+        ) {
+            boolean[] canEdit = new boolean [] {
+                false, false, false
+            };
+
+            public boolean isCellEditable(int rowIndex, int columnIndex) {
+                return canEdit [columnIndex];
+            }
+        });
+        
         updatesScrollPane.setViewportView(updatesTable);
 
         lastCheckForUpdatesLabel.setText("Last check for updates:");

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
      2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
      2012-04-09 19:31:49 UTC (rev 28769)
@@ -1,5 +1,12 @@
 package org.cytoscape.app.internal.swing.main;
 
+import javax.swing.table.DefaultTableModel;
+
+import org.cytoscape.app.internal.event.AppEvent;
+import org.cytoscape.app.internal.event.AppListener;
+import org.cytoscape.app.internal.manager.App;
+import org.cytoscape.app.internal.manager.AppManager;
+
 public class CurrentlyInstalledAppsPanel extends javax.swing.JPanel {
 
     private javax.swing.JLabel appsAvailableCountLabel;
@@ -13,8 +20,16 @@
     private javax.swing.JComboBox showTypeComboxBox;
     private javax.swing.JLabel showTypeLabel;
        
-    public CurrentlyInstalledAppsPanel() {
+    private AppManager appManager;
+    private AppListener appListener;
+    
+    public CurrentlyInstalledAppsPanel(AppManager appManager) {
         initComponents();
+        
+        this.appManager = appManager;
+        
+        setupAppListener();
+        populateTable();
     }
 
     private void initComponents() {
@@ -31,50 +46,19 @@
         showTypeLabel = new javax.swing.JLabel();
 
         appsAvailableTable.setModel(new javax.swing.table.DefaultTableModel(
-            new Object [][] {
-                {null, "", null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null},
-                {null, null, null, null, null}
-            },
+            new Object [][] {},
             new String [] {
-                "Name", "Version", "Author", "Description", "Status"
+                "App", "Name", "Version", "Author", "Description", "Status"
             }
         ) {
-            boolean[] canEdit = new boolean [] {
-                false, false, false, false, false
-            };
+                       private static final long serialVersionUID = 
572679933790969414L;
 
-            public boolean isCellEditable(int rowIndex, int columnIndex) {
-                return canEdit [columnIndex];
+                       public boolean isCellEditable(int rowIndex, int 
columnIndex) {
+                return false;
             }
         });
+        appsAvailableTable.removeColumn(appsAvailableTable.getColumn("App"));
+        
         jScrollPane2.setViewportView(appsAvailableTable);
 
         appsInstalledLabel.setText("Number of Apps Installed:");
@@ -99,7 +83,7 @@
             }
         });
 
-        showTypeComboxBox.setModel(new javax.swing.DefaultComboBoxModel(new 
String[] { "All", "Item 2", "Item 3", "Item 4" }));
+        showTypeComboxBox.setModel(new javax.swing.DefaultComboBoxModel(new 
String[] { "All", "Installed", "Uninstalled"}));
         showTypeComboxBox.addActionListener(new 
java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 showTypeComboxBoxActionPerformed(evt);
@@ -173,4 +157,73 @@
     private void showTypeComboxBoxActionPerformed(java.awt.event.ActionEvent 
evt) {
         // TODO add your handling code here:
     }
+    
+    private void setupAppListener() {
+       appListener = new AppListener() {
+
+                       @Override
+                       public void appInstalled(AppEvent event) {
+                               
+                               // Prepare to add a new row containing the 
app's data to the table
+                               DefaultTableModel tableModel = 
(DefaultTableModel) appsAvailableTable.getModel();
+                               
+                               App app = event.getApp();
+                               tableModel.addRow(new Object[]{
+                                               app,
+                                               app.getAppName(),
+                                               app.getVersion(),
+                                               app.getAuthors(),
+                                               app.getDescription(),
+                                               app.getStatus()
+                               });
+                               
+                               updateLabels();
+                       }
+
+                       @Override
+                       public void appUninstalled(AppEvent event) {
+                               
+                               // Prepare to remove the row containing the app 
from the table
+                               DefaultTableModel tableModel = 
(DefaultTableModel) appsAvailableTable.getModel();
+                               
+                               App app = event.getApp();
+                               int rowToBeRemoved = -1;
+                               for (int rowIndex = 0; rowIndex < 
tableModel.getRowCount(); rowIndex++) {
+                                       if (tableModel.getValueAt(rowIndex, 0) 
== app) {
+                                               rowToBeRemoved = rowIndex;
+                                       }
+                               }
+                               
+                               tableModel.removeRow(rowToBeRemoved);
+                               
+                               updateLabels();
+                       }
+       };
+       
+       appManager.addAppListener(appListener);
+    }
+    
+    private void populateTable() {
+       System.out.println("populateTable() call, installed apps: " + 
appManager.getInstalledApps().size());
+       
+       for (App app : appManager.getInstalledApps()) {
+               DefaultTableModel tableModel = (DefaultTableModel) 
appsAvailableTable.getModel();
+               
+               tableModel.addRow(new Object[]{
+                                       app,
+                                       app.getAppName(),
+                                       app.getVersion(),
+                                       app.getAuthors(),
+                                       app.getDescription(),
+                                       app.getStatus()
+                       });
+       }
+       
+       updateLabels();
+    }
+    
+    private void updateLabels() {
+       
appsInstalledCountLabel.setText(String.valueOf(appManager.getInstalledApps().size()));
+       
appsAvailableCountLabel.setText(String.valueOf(appManager.getInstalledApps().size()));
+    }
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
      2012-04-09 18:53:44 UTC (rev 28768)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
      2012-04-09 19:31:49 UTC (rev 28769)
@@ -127,42 +127,20 @@
                };
         
         resultsTable.setModel(new javax.swing.table.DefaultTableModel(
-            new Object [][] {
-                {null, null, null, null},
-                {null, null, null, null},
-                {null, null, null, null}
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null},
-//                {null, null, null, null}
-            },
+            new Object [][] {},
             new String [] {
                 "Name", "Version", "Author", "Description"
             }
-        ));
+        ) {
+            boolean[] canEdit = new boolean [] {
+                false, false, false, false
+            };
+
+            public boolean isCellEditable(int rowIndex, int columnIndex) {
+                return canEdit [columnIndex];
+            }
+        });
+        
         resultsScrollPane.setViewportView(resultsTable);
 
         installSelectedButton.setText("Install Selected Apps");

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to