Author: paperwing
Date: 2012-08-27 15:27:20 -0700 (Mon, 27 Aug 2012)
New Revision: 30280

Modified:
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CurrentlyInstalledAppsPanel.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/DownloadSitesManager.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/ManageDownloadSitesDialog.java
Log:
Clicking on the manage sites button now displays the manage sites dialog, added 
methods for populating the table with the list of sites, and manipulating the 
list of sites

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
 2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
 2012-08-27 22:27:20 UTC (rev 30280)
@@ -14,6 +14,7 @@
 import org.cytoscape.app.internal.net.server.ScreenOriginsBeforeResponse;
 import 
org.cytoscape.app.internal.net.server.AddAccessControlAllowOriginHeaderAfterResponse;
 import org.cytoscape.app.internal.net.server.OriginOptionsBeforeResponse;
+import org.cytoscape.app.internal.ui.downloadsites.DownloadSitesManager;
 import org.cytoscape.app.swing.CySwingAppAdapter;
 import org.cytoscape.application.CyVersion;
 import org.cytoscape.session.CySessionManager;
@@ -369,9 +370,13 @@
                registerService(bc, appManager, AppManager.class, new 
Properties());
                appManager.setFeaturesService(featuresService);
                
+               final DownloadSitesManager downloadSitesManager = new 
DownloadSitesManager(cyPropertyRef);
+               
                // AbstractCyAction implementation for updated app manager
-               AppManagerAction appManagerAction = new 
AppManagerAction(appManager, cySwingApplicationRef, 
-                               fileUtilServiceRef, dialogTaskManagerRef, 
cyServiceRegistrarRef);
+               AppManagerAction appManagerAction = new AppManagerAction(
+                               appManager, downloadSitesManager,
+                               cySwingApplicationRef, fileUtilServiceRef,
+                               dialogTaskManagerRef, cyServiceRegistrarRef);
                registerService(bc, appManagerAction, CyAction.class, new 
Properties());
                
                // Start local server that reports app installation status to 
the app store when requested,

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
     2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
     2012-08-27 22:27:20 UTC (rev 30280)
@@ -11,6 +11,7 @@
 import org.cytoscape.app.internal.net.WebApp;
 import org.cytoscape.app.internal.net.WebQuerier;
 import org.cytoscape.app.internal.ui.AppManagerDialog;
+import org.cytoscape.app.internal.ui.downloadsites.DownloadSitesManager;
 import org.cytoscape.application.events.CyShutdownEvent;
 import org.cytoscape.application.events.CyShutdownListener;
 import org.cytoscape.application.swing.AbstractCyAction;
@@ -38,6 +39,11 @@
        private AppManager appManager;
        
        /**
+        * A reference to the {@link DownloadSitesManager}
+        */
+       private DownloadSitesManager downloadSitesManager;
+       
+       /**
         * A reference to the {@link FileUtil} OSGi service used for displaying 
a filechooser dialog
         */
        private FileUtil fileUtil;
@@ -59,13 +65,18 @@
         * Creates and sets up the AbstractCyAction, placing an item into the 
menu.
         */
        public AppManagerAction(AppManager appManager, 
-                       CySwingApplication swingApplication, FileUtil fileUtil, 
TaskManager taskManager, CyServiceRegistrar serviceRegistrar) {
+                       DownloadSitesManager downloadSitesManager,
+                       CySwingApplication swingApplication, 
+                       FileUtil fileUtil, 
+                       TaskManager taskManager, 
+                       CyServiceRegistrar serviceRegistrar) {
                super("App Manager");
                
                setPreferredMenu("Apps");
                setMenuGravity(1.0f);
                
                this.appManager = appManager;
+               this.downloadSitesManager = downloadSitesManager;
                this.swingApplication = swingApplication;
                this.fileUtil = fileUtil;
                this.taskManager = taskManager;
@@ -98,7 +109,7 @@
                                
                // Create and display the App Manager dialog
                if (appManagerDialog == null) {
-                       appManagerDialog = new AppManagerDialog(appManager, 
fileUtil, taskManager, swingApplication.getJFrame(), false);
+                       appManagerDialog = new AppManagerDialog(appManager, 
downloadSitesManager, fileUtil, taskManager, swingApplication.getJFrame(), 
false);
                } else {
                        appManagerDialog.pack();
                        appManagerDialog.setVisible(true);

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
      2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
      2012-08-27 22:27:20 UTC (rev 30280)
@@ -748,6 +748,9 @@
                // TODO: Perhaps modify this method to do the check with a 
given app store
                // as a parameter, instead of all app stores
                
+               if (appsByUrl.get(DEFAULT_APP_STORE_URL) == null) {
+                       return;
+               }
                
                // Find the set of all available apps
                Set<WebApp> allWebApps = new HashSet<WebApp>(

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
 2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
 2012-08-27 22:27:20 UTC (rev 30280)
@@ -3,6 +3,8 @@
 import org.cytoscape.app.internal.event.AppsChangedEvent;
 import org.cytoscape.app.internal.event.AppsChangedListener;
 import org.cytoscape.app.internal.manager.AppManager;
+import org.cytoscape.app.internal.ui.downloadsites.DownloadSitesManager;
+import org.cytoscape.app.internal.ui.downloadsites.ManageDownloadSitesDialog;
 import org.cytoscape.util.swing.FileUtil;
 import org.cytoscape.work.TaskManager;
 
@@ -15,12 +17,20 @@
     private CurrentlyInstalledAppsPanel currentlyInstalledAppsPanel1;
     private InstallFromStorePanel installNewAppsPanel1;
     private javax.swing.JTabbedPane mainTabbedPane;
+
+    private ManageDownloadSitesDialog manageDownloadSitesDialog;
+    private DownloadSitesManager downloadSitesManager;
     
     private AppManager appManager;
        private FileUtil fileUtil;
        private TaskManager taskManager;
     
-    public AppManagerDialog(AppManager appManager, FileUtil fileUtil, 
TaskManager taskManager, java.awt.Frame parent, boolean modal) {
+    public AppManagerDialog(AppManager appManager, 
+               DownloadSitesManager downloadSitesManager,
+               FileUtil fileUtil, 
+               TaskManager taskManager, 
+               java.awt.Frame parent, 
+               boolean modal) {
         super(parent, modal);
         
         this.appManager = appManager;
@@ -30,13 +40,18 @@
         
         this.setLocationRelativeTo(parent);
         this.setVisible(true);
+        
+        // Create new manage download sites dialog
+        manageDownloadSitesDialog = new ManageDownloadSitesDialog(
+                       parent, false, downloadSitesManager);
+        manageDownloadSitesDialog.setLocationRelativeTo(this);
     }
    
     private void initComponents() {
        mainTabbedPane = new javax.swing.JTabbedPane();
         installNewAppsPanel1 = new InstallFromStorePanel(appManager, fileUtil, 
taskManager, this);
         currentlyInstalledAppsPanel1 = new 
CurrentlyInstalledAppsPanel(appManager);
-        checkForUpdatesPanel1 = new CheckForUpdatesPanel(appManager, 
taskManager);
+        checkForUpdatesPanel1 = new CheckForUpdatesPanel(appManager, 
taskManager, this);
 
         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
         setTitle("App Manager");
@@ -68,4 +83,10 @@
     public void changeTab(int index) {
        mainTabbedPane.setSelectedIndex(index);
     }
+    
+    public void showManageDownloadSitesDialog() {
+       manageDownloadSitesDialog.setLocationRelativeTo(this);
+       manageDownloadSitesDialog.pack();
+       manageDownloadSitesDialog.setVisible(true);
+    }
 }

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
     2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
     2012-08-27 22:27:20 UTC (rev 30280)
@@ -1,5 +1,6 @@
 package org.cytoscape.app.internal.ui;
 
+import java.awt.Container;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 import java.util.Calendar;
@@ -45,16 +46,20 @@
     private javax.swing.JScrollPane updatesScrollPane;
     private javax.swing.JTable updatesTable;
     
+    Container parent;
+    
     private UpdateManager updateManager;
     private AppManager appManager;
     private TaskManager taskManager;
     
-    public CheckForUpdatesPanel(AppManager appManager, TaskManager 
taskManager) {
+    public CheckForUpdatesPanel(AppManager appManager, TaskManager 
taskManager, Container parent) {
        this.updateManager = new UpdateManager();
         this.appManager = appManager;
         this.taskManager = taskManager;
        
        initComponents();
+       
+       this.parent = parent;
     }
 
     private void initComponents() {
@@ -69,6 +74,7 @@
         descriptionLabel = new javax.swing.JLabel();
         descriptionScrollPane = new javax.swing.JScrollPane();
         descriptionTextArea = new javax.swing.JTextArea();
+        manageUpdateSites = new javax.swing.JButton();
 
         updatesAvailableLabel.setText("0 updates available.");
 
@@ -118,52 +124,62 @@
         descriptionTextArea.setFocusable(false);
         descriptionScrollPane.setViewportView(descriptionTextArea);
 
-        org.jdesktop.layout.GroupLayout layout = new 
org.jdesktop.layout.GroupLayout(this);
+        manageUpdateSites.setText("Manage Update Sites");
+        manageUpdateSites.addActionListener(new 
java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                manageUpdateSitesActionPerformed(evt);
+            }
+        });
+        
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
         this.setLayout(layout);
         layout.setHorizontalGroup(
-            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
-            .add(layout.createSequentialGroup()
+            
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
-                
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
-                    .add(layout.createSequentialGroup()
-                        
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
-                            .add(layout.createSequentialGroup()
-                                .add(updatesAvailableLabel)
-                                
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                                .add(lastCheckForUpdatesLabel)
-                                
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                                .add(updateCheckTimeLabel)
-                                .add(0, 0, Short.MAX_VALUE))
-                            .add(updatesScrollPane, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 652, Short.MAX_VALUE)
-                            .add(descriptionScrollPane))
+                
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(updatesAvailableLabel)
+                                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(lastCheckForUpdatesLabel)
+                                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(updateCheckTimeLabel)
+                                .addGap(0, 0, Short.MAX_VALUE))
+                            .addComponent(updatesScrollPane, 
javax.swing.GroupLayout.DEFAULT_SIZE, 652, Short.MAX_VALUE)
+                            .addComponent(descriptionScrollPane))
                         .addContainerGap())
-                    .add(layout.createSequentialGroup()
-                        
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
-                            .add(layout.createSequentialGroup()
-                                .add(installSelectedButton)
-                                
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                                .add(installAllButton))
-                            .add(descriptionLabel))
-                        .add(0, 0, Short.MAX_VALUE))))
+                    .addGroup(layout.createSequentialGroup()
+                        
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(layout.createSequentialGroup()
+                                .addComponent(installSelectedButton)
+                                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(installAllButton)
+                                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(manageUpdateSites))
+                            .addComponent(descriptionLabel))
+                        .addGap(0, 219, Short.MAX_VALUE))))
         );
         layout.setVerticalGroup(
-            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
-            .add(layout.createSequentialGroup()
+            
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
-                
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
-                    .add(updatesAvailableLabel)
-                    .add(lastCheckForUpdatesLabel)
-                    .add(updateCheckTimeLabel))
-                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                .add(updatesScrollPane, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 327, Short.MAX_VALUE)
-                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                .add(descriptionLabel, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 16, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                .add(descriptionScrollPane, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 106, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
-                
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
-                    .add(installSelectedButton)
-                    .add(installAllButton))
+                
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(updatesAvailableLabel)
+                    .addComponent(lastCheckForUpdatesLabel)
+                    .addComponent(updateCheckTimeLabel))
+                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(updatesScrollPane, 
javax.swing.GroupLayout.DEFAULT_SIZE, 327, Short.MAX_VALUE)
+                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(descriptionLabel, 
javax.swing.GroupLayout.PREFERRED_SIZE, 16, 
javax.swing.GroupLayout.PREFERRED_SIZE)
+                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(descriptionScrollPane, 
javax.swing.GroupLayout.PREFERRED_SIZE, 106, 
javax.swing.GroupLayout.PREFERRED_SIZE)
+                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(installSelectedButton)
+                    .addComponent(installAllButton)
+                    .addComponent(manageUpdateSites))
                 .addContainerGap())
         );
         
@@ -291,6 +307,12 @@
         }));
     }
     
+    private void manageUpdateSitesActionPerformed(java.awt.event.ActionEvent 
evt) {
+       if (parent instanceof AppManagerDialog) {
+               ((AppManagerDialog) parent).showManageDownloadSitesDialog();
+       }
+    }
+    
     private void repopulateUpdatesTable() {
    
        SwingUtilities.invokeLater(new Runnable() {

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CurrentlyInstalledAppsPanel.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CurrentlyInstalledAppsPanel.java
      2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CurrentlyInstalledAppsPanel.java
      2012-08-27 22:27:20 UTC (rev 30280)
@@ -1,5 +1,6 @@
 package org.cytoscape.app.internal.ui;
 
+import java.awt.Container;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 import java.util.HashSet;

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
    2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
    2012-08-27 22:27:20 UTC (rev 30280)
@@ -167,7 +167,6 @@
                                        }
                                        
                                });
-                               
                        }
 
                        @Override
@@ -295,7 +294,12 @@
             }
         });
 
-        manageSitesButton.setText("Manage...");
+        manageSitesButton.setText("Manage Sites...");
+        manageSitesButton.addActionListener(new 
java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                manageSitesButtonActionPerformed(evt);
+            }
+        });
 
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
         this.setLayout(layout);
@@ -838,6 +842,8 @@
     }
     
     private void manageSitesButtonActionPerformed(java.awt.event.ActionEvent 
evt) {
-        // TODO add your handling code here:
+        if (parent instanceof AppManagerDialog) {
+               ((AppManagerDialog) parent).showManageDownloadSitesDialog();
+        }
     }
 }

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/DownloadSitesManager.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/DownloadSitesManager.java
       2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/DownloadSitesManager.java
       2012-08-27 22:27:20 UTC (rev 30280)
@@ -113,6 +113,34 @@
                return downloadSites;
        }
        
+       public void 
addDownloadSitesChangedListener(DownloadSitesChangedListener listener) {
+               this.downloadSitesChangedListeners.add(listener);
+       }
+       
+       public void 
removeDownloadSitesChangedListener(DownloadSitesChangedListener listener) {
+               this.downloadSitesChangedListeners.remove(listener);
+       }
+       
+       public void addDownloadSite(DownloadSite downloadSite) {
+               this.downloadSites.add(downloadSite);
+               
+               notifyDownloadSitesChanged();
+       }
+       
+       public void removeDownloadSite(DownloadSite downloadSite) {
+               this.downloadSites.remove(downloadSite);
+               
+               notifyDownloadSitesChanged();
+       }
+       
+       private void notifyDownloadSitesChanged() {
+               DownloadSitesChangedEvent event = new 
DownloadSitesChangedEvent(this);
+               
+               for (DownloadSitesChangedListener listener : 
this.downloadSitesChangedListeners) {
+                       listener.downloadSitesChanged(event);
+               }
+       }
+       
        public class DownloadSitesChangedEvent {
                
                private DownloadSitesManager source;

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/ManageDownloadSitesDialog.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/ManageDownloadSitesDialog.java
  2012-08-27 21:32:38 UTC (rev 30279)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/downloadsites/ManageDownloadSitesDialog.java
  2012-08-27 22:27:20 UTC (rev 30280)
@@ -1,8 +1,28 @@
 package org.cytoscape.app.internal.ui.downloadsites;
 
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.SwingUtilities;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+
+import org.cytoscape.app.internal.manager.App;
+import org.cytoscape.app.internal.net.Update;
+import 
org.cytoscape.app.internal.ui.downloadsites.DownloadSitesManager.DownloadSitesChangedEvent;
+import 
org.cytoscape.app.internal.ui.downloadsites.DownloadSitesManager.DownloadSitesChangedListener;
+
 public class ManageDownloadSitesDialog extends javax.swing.JDialog {
 
-    private javax.swing.JButton addSiteButton;
+       private static final long serialVersionUID = -5333266960245441850L;
+       
+       private javax.swing.JButton addSiteButton;
+    private javax.swing.JButton closeButton;
     private javax.swing.JButton editSiteButton;
     private javax.swing.JButton removeSiteButton;
     private javax.swing.JButton resetToDefaultButton;
@@ -13,24 +33,35 @@
     private javax.swing.JScrollPane sitesScrollPane;
     private javax.swing.JTable sitesTable;
        
-    /**
-     * Creates new form ManageDownloadSitesDialog
-     */
-    public ManageDownloadSitesDialog(java.awt.Frame parent, boolean modal) {
+    private DownloadSitesManager downloadSitesManager;
+    private DownloadSitesChangedListener downloadSitesChangedListener;
+    
+
+    public ManageDownloadSitesDialog(java.awt.Frame parent, 
+               boolean modal, DownloadSitesManager downloadSitesManager) {
         super(parent, modal);
+        
+        this.downloadSitesManager = downloadSitesManager;
+        
         initComponents();
+        
+        this.downloadSitesChangedListener = new DownloadSitesChangedListener() 
{
+                       
+                       @Override
+                       public void downloadSitesChanged(
+                                       DownloadSitesChangedEvent 
downloadSitesChangedEvent) {
+                               
+                               repopulateTable();
+                       }
+               };
+               
+        downloadSitesManager.addDownloadSitesChangedListener(
+                       downloadSitesChangedListener);
     }
 
-    /**
-     * This method is called from within the constructor to initialize the 
form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">
     private void initComponents() {
 
-        sitesScrollPane = new javax.swing.JScrollPane();
+       sitesScrollPane = new javax.swing.JScrollPane();
         sitesTable = new javax.swing.JTable();
         addSiteButton = new javax.swing.JButton();
         editSiteButton = new javax.swing.JButton();
@@ -40,9 +71,10 @@
         siteUrlLabel = new javax.swing.JLabel();
         siteUrlTextField = new javax.swing.JTextField();
         resetToDefaultButton = new javax.swing.JButton();
+        closeButton = new javax.swing.JButton();
 
         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
-        setTitle("Download Sites");
+        setTitle("Manage Download Sites");
 
         sitesTable.setModel(new javax.swing.table.DefaultTableModel(
             new Object [][] {
@@ -52,7 +84,9 @@
                 "Name", "URL"
             }
         ) {
-            boolean[] canEdit = new boolean [] {
+                       private static final long serialVersionUID = 
-6222850661401678737L;
+                       
+                       boolean[] canEdit = new boolean [] {
                 false, false
             };
 
@@ -62,8 +96,8 @@
         });
         
sitesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
         sitesScrollPane.setViewportView(sitesTable);
-        sitesTable.getColumnModel().getColumn(0).setPreferredWidth(60);
-        sitesTable.getColumnModel().getColumn(1).setPreferredWidth(170);
+        sitesTable.getColumnModel().getColumn(0).setPreferredWidth(50);
+        sitesTable.getColumnModel().getColumn(1).setPreferredWidth(185);
 
         addSiteButton.setText("Add");
         addSiteButton.addActionListener(new java.awt.event.ActionListener() {
@@ -96,8 +130,15 @@
             }
         });
 
-        resetToDefaultButton.setText("Reset All to Default");
+        resetToDefaultButton.setText("Reset to Default");
 
+        closeButton.setText("Close");
+        closeButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                closeButtonActionPerformed(evt);
+            }
+        });
+
         javax.swing.GroupLayout layout = new 
javax.swing.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
@@ -105,46 +146,48 @@
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(sitesScrollPane)
+                    .addComponent(sitesScrollPane, 
javax.swing.GroupLayout.DEFAULT_SIZE, 407, Short.MAX_VALUE)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
layout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(resetToDefaultButton)
+                        
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(closeButton, 
javax.swing.GroupLayout.PREFERRED_SIZE, 79, 
javax.swing.GroupLayout.PREFERRED_SIZE))
                     .addGroup(layout.createSequentialGroup()
                         .addComponent(addSiteButton)
                         
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                         .addComponent(editSiteButton)
                         
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                         .addComponent(removeSiteButton)
-                        
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addComponent(resetToDefaultButton))
+                        .addGap(0, 0, Short.MAX_VALUE))
                     .addGroup(layout.createSequentialGroup()
-                        
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(layout.createSequentialGroup()
-                                .addComponent(siteUrlLabel)
-                                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(siteUrlTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, 258, 
javax.swing.GroupLayout.PREFERRED_SIZE))
-                            .addGroup(layout.createSequentialGroup()
-                                .addComponent(siteNameLabel)
-                                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(siteNameTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, 139, 
javax.swing.GroupLayout.PREFERRED_SIZE)))
-                        .addGap(0, 0, Short.MAX_VALUE)))
+                        .addComponent(siteNameLabel)
+                        
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(siteNameTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, 119, 
javax.swing.GroupLayout.PREFERRED_SIZE)
+                        
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(siteUrlLabel)
+                        
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(siteUrlTextField)))
                 .addContainerGap())
         );
         layout.setVerticalGroup(
             
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
-                .addComponent(sitesScrollPane, 
javax.swing.GroupLayout.PREFERRED_SIZE, 183, 
javax.swing.GroupLayout.PREFERRED_SIZE)
-                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(siteNameLabel)
-                    .addComponent(siteNameTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(siteNameTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(siteUrlLabel)
+                    .addComponent(siteUrlTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE))
                 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(siteUrlLabel)
-                    .addComponent(siteUrlTextField, 
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE))
-                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE,
 false)
-                    .addComponent(addSiteButton, 
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
Short.MAX_VALUE)
+                    .addComponent(addSiteButton)
                     .addComponent(editSiteButton, 
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
Short.MAX_VALUE)
-                    .addComponent(removeSiteButton, 
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
Short.MAX_VALUE)
+                    .addComponent(removeSiteButton, 
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
Short.MAX_VALUE))
+                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(sitesScrollPane, 
javax.swing.GroupLayout.DEFAULT_SIZE, 153, Short.MAX_VALUE)
+                
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(closeButton)
                     .addComponent(resetToDefaultButton))
                 .addContainerGap())
         );
@@ -165,56 +208,110 @@
     }
 
     private void siteUrlTextFieldActionPerformed(java.awt.event.ActionEvent 
evt) {
-        // TODO add your handling code here:
     }
+    
+    private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {
+        this.dispose();
+    }
+    
+    private void repopulateTable() {
+       
+       final DefaultTableModel tableModel = new DefaultTableModel(
+                   new Object [][] {
+                   },
+                   new String [] {
+                       "Name", "URL"
+                   }
+               ) {
+                               private static final long serialVersionUID = 
-1712121531730828785L;
+                               
+                               boolean[] canEdit = new boolean [] {
+                       false, false
+                   };
+       
+                   public boolean isCellEditable(int rowIndex, int 
columnIndex) {
+                       return canEdit [columnIndex];
+                   }
+                       };
+               
+               List<DownloadSite> downloadSites = new LinkedList<DownloadSite>(
+                       downloadSitesManager.getDownloadSites());
+       
+       // Sort by name
+       Collections.sort(downloadSites, new Comparator<DownloadSite>() {
 
+                       @Override
+                       public int compare(DownloadSite o1, DownloadSite o2) {
+                               return 
o1.getSiteName().compareTo(o2.getSiteName());
+                       }
+               });
+       
+       for (DownloadSite downloadSite : downloadSites) {
+               tableModel.addRow(new Object[]{
+                               downloadSite,
+                               downloadSite.getSiteUrl()
+               });
+       }
+       
+       SwingUtilities.invokeLater(new Runnable() {
+               
+                       @Override
+                       public void run() {
+                       sitesTable.setModel(tableModel);
+                       }
+       });
+    }
+    
     /**
-     * @param args the command line arguments
+     * Setup and register a listener to the table to listen for selection 
changed
+     * events in order to update the text fields
      */
-    public static void main(String args[]) {
-        /*
-         * Set the Nimbus look and feel
-         */
-        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting 
code (optional) ">
-        /*
-         * If Nimbus (introduced in Java SE 6) is not available, stay with the
-         * default look and feel. For details see
-         * 
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
-         */
-        try {
-            for (javax.swing.UIManager.LookAndFeelInfo info : 
javax.swing.UIManager.getInstalledLookAndFeels()) {
-                if ("Nimbus".equals(info.getName())) {
-                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
-                    break;
-                }
-            }
-        } catch (ClassNotFoundException ex) {
-            
java.util.logging.Logger.getLogger(ManageDownloadSitesDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
-        } catch (InstantiationException ex) {
-            
java.util.logging.Logger.getLogger(ManageDownloadSitesDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
-        } catch (IllegalAccessException ex) {
-            
java.util.logging.Logger.getLogger(ManageDownloadSitesDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
-        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
-            
java.util.logging.Logger.getLogger(ManageDownloadSitesDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
+    private void setupDescriptionListener() {
+       sitesTable.getSelectionModel().addListSelectionListener(new 
ListSelectionListener() {
+                       
+                       @Override
+                       public void valueChanged(ListSelectionEvent e) {
+                               if (!e.getValueIsAdjusting()) {
+                                       updateTextFields();
+                               }
+                       }
+               });
+    }
+    
+    private void updateTextFields() {
+       DownloadSite selectedSite = getSelectedSite();
+       
+       if (selectedSite != null) {
+               siteNameTextField.setText(selectedSite.getSiteName());
+               siteUrlTextField.setText(selectedSite.getSiteUrl());
+       }
+       
+    }
+    
+    private String getEnteredUrl() {
+       return siteUrlTextField.getText();
+    }
+    
+    private String getEnteredSiteName() {
+       return siteNameTextField.getText();
+    }
+    
+    private DownloadSite getSelectedSite() {
+        Set<DownloadSite> selectedSites = new HashSet<DownloadSite>();
+       int[] selectedRows = sitesTable.getSelectedRows();
+       
+        for (int index = 0; index < selectedRows.length; index++) {
+               
+               DownloadSite downloadSite = (DownloadSite) 
sitesTable.getModel().getValueAt(
+                               
sitesTable.convertRowIndexToModel(selectedRows[index]), 0);
+               
+               selectedSites.add(downloadSite);
         }
-        //</editor-fold>
-
-        /*
-         * Create and display the dialog
-         */
-        java.awt.EventQueue.invokeLater(new Runnable() {
-
-            public void run() {
-                ManageDownloadSitesDialog dialog = new 
ManageDownloadSitesDialog(new javax.swing.JFrame(), true);
-                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
-
-                    @Override
-                    public void windowClosing(java.awt.event.WindowEvent e) {
-                        System.exit(0);
-                    }
-                });
-                dialog.setVisible(true);
-            }
-        });
+       
+        if (selectedSites.size() > 0) {
+               return selectedSites.iterator().next();
+        } else {
+               return null;
+        }
     }
 }
\ No newline at end of file

-- 
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