Author: paperwing
Date: 2012-04-03 15:09:55 -0700 (Tue, 03 Apr 2012)
New Revision: 28731

Modified:
   csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppCopyException.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppParsingException.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/ui/AppManagerDialog.java
Log:
Completed initial implementation for AppParser, completed initial draft UI for 
AppManager main window (produced using Netbeans 7.1.1 GUI builder). Also added 
dependency for OSGi bundle containing Apache Commons IO utilities library to 
pom file.

Modified: csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml
===================================================================
--- csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml   
2012-04-03 20:24:20 UTC (rev 28730)
+++ csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml   
2012-04-03 22:09:55 UTC (rev 28731)
@@ -114,6 +114,13 @@
                        <groupId>org.cytoscape</groupId>
                        <artifactId>application-api</artifactId>
                </dependency>
+               
+               <!-- dependencies for file copying and moving utilities -->
+               <dependency>
+                       <groupId>cytoscape-temp</groupId>
+                       <artifactId>commons-io</artifactId>
+                       <version>2.2</version>
+               </dependency>
 
                <!-- dependencies needed for plugin manager -->
                <dependency>

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppCopyException.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppCopyException.java
  2012-04-03 20:24:20 UTC (rev 28730)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppCopyException.java
  2012-04-03 22:09:55 UTC (rev 28731)
@@ -5,5 +5,11 @@
        /** Long serial version identifier required by the Serializable class */
        private static final long serialVersionUID = 9013239765398696280L;
        
-
+       public AppCopyException(String message) {
+               super(message);
+       }
+       
+       public AppCopyException(String message, Throwable cause) {
+               super(message, cause);
+       }
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppParsingException.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppParsingException.java
       2012-04-03 20:24:20 UTC (rev 28730)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppParsingException.java
       2012-04-03 22:09:55 UTC (rev 28731)
@@ -2,10 +2,14 @@
 
 public class AppParsingException extends Exception {
 
-       public AppParsingException(String string) {
-               super(string);
-       }
-
        /** Long serial version identifier required by the Serializable class */
        private static final long serialVersionUID = 7578373418714543699L;
+       
+       public AppParsingException(String message) {
+               super(message);
+       }
+       
+       public AppParsingException(String message, Throwable cause) {
+               super(message, cause);
+       }
 }

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-03 20:24:20 UTC (rev 28730)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
 2012-04-03 22:09:55 UTC (rev 28731)
@@ -18,7 +18,7 @@
        private File appFile;
        
        /**
-        * The name of the app's class that extends {@link AbstractCyApp} to be 
instantiated when the app is loaded.
+        * The fully-qualified name of the app's class that extends {@link 
AbstractCyApp} to be instantiated when the app is loaded.
         */
        private String entryClassName;
        
@@ -38,6 +38,11 @@
         */
        private boolean appValidated;
        
+       /**
+        * Whether we've found the official name of the app as opposed to using 
an inferred name.
+        */
+       private boolean officialNameObtained;
+       
        private AppStatus status;
        
        /**
@@ -45,18 +50,22 @@
         */
        public enum AppStatus{
                INSTALLED,
-               TO_BE_UNINSTALLED
+               TO_BE_UNINSTALLED,
        }
        
-       public App(String appName, String version, String authors, String 
description, File appFile, String entryClassName) {
+       public App() {
+               this("", "", "", "", null);
+       }
+       
+       public App(String appName, String version, String authors, String 
description, File appFile) {
                this.appName = appName;
                this.version = version;
                this.authors = authors;
                this.description = description;
                this.appFile = appFile;
-               this.entryClassName = entryClassName;
                
-               this.setAppValidated(false);
+               appValidated = false;
+               officialNameObtained = false;
        }
        
        public String getAppName() {
@@ -95,14 +104,42 @@
                return appValidated;
        }
        
+       public boolean isOfficialNameObtained() {
+               return officialNameObtained;
+       }
+       
        public AppStatus getStatus() {
                return status;
        }
        
+       public void setAppName(String appName) {
+               this.appName = appName;
+       }
+       
+       public void setVersion(String version) {
+               this.version = version;
+       }
+       
+       public void setAuthors(String authors) {
+               this.authors = authors;
+       }
+       
+       public void setDescription(String description) {
+               this.description = description;
+       }
+       
        public void setAppFile(File appFile) {
                this.appFile = appFile;
        }
        
+       public void setEntryClassName(String entryClassName) {
+               this.entryClassName = entryClassName;
+       }
+       
+       public void setJarURL(URL jarURL) {
+               this.jarURL = jarURL;
+       }
+       
        public void setAppInstance(AbstractCyApp appInstance) {
                this.appInstance = appInstance;
        }
@@ -111,10 +148,18 @@
                this.appValidated = appValidated;
        }
 
+       public void setOfficialNameObtained(boolean officialNameObtained) {
+               this.officialNameObtained = officialNameObtained;
+       }
+       
        public void setStatus(AppStatus status) {
                this.status = status;
        }
 
 
 
+
+
+
+
 }

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-03 20:24:20 UTC (rev 28730)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
  2012-04-03 22:09:55 UTC (rev 28731)
@@ -27,11 +27,7 @@
        
        /** Uninstalled apps are copied to this subdirectory under the local 
app storage directory. */
        private static final String UNINSTALLED_APPS_DIRECTORY_NAME = 
"Uninstalled";
-       
-       /** The name of the key in the app jar's manifest file that indicates 
the fully-qualified name 
-        * of the class to instantiate upon app installation. */
-       private static final String APP_CLASS_TAG = "Cytoscape-App";
-       
+               
        private Set<App> installedApps;
        private Set<App> toBeUninstalledApps;
        private Set<App> uninstalledApps;
@@ -87,8 +83,7 @@
                        app.setAppFile(new File(getInstalledAppsPath() + 
File.separator + fileName));
                        
                } catch (IOException e) {
-                       
-                       throw new AppCopyException();
+                       throw new AppCopyException("Unable to copy file: " + 
e.getMessage());
                }
                
                // TODO: Currently uses the CyAppAdapter's loader to load apps' 
classes. Is there reason to use a different one?
@@ -144,8 +139,10 @@
         * The app will only be uninstalled if it is currently installed.
         * 
         * @param app The app to be uninstalled.
+        * @throws AppCopyException If there was an error while moving the app 
from the installed apps subdirectory
+        * to the subdirectory containing currently uninstalled apps.
         */
-       public void uninstallApp(App app) {
+       public void uninstallApp(App app) throws AppCopyException {
                // Check if the app is installed before attempting to uninstall.
                if (app.getStatus() != AppStatus.INSTALLED) {
                        // If it is not installed, do not attempt to uninstall 
it.
@@ -166,7 +163,7 @@
                                try {
                                        
FileUtils.copyFileToDirectory(app.getAppFile(), new File(uninstalledAppsPath));
                                } catch (IOException e) {
-                                       throw new RuntimeException("Unable to 
copy file: " + e.getMessage());
+                                       throw new AppCopyException("Unable to 
copy file: " + e.getMessage());
                                }
                                
                                // Delete the source file after the copy 
operation

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-03 20:24:20 UTC (rev 28730)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
   2012-04-03 22:09:55 UTC (rev 28731)
@@ -1,6 +1,11 @@
 package org.cytoscape.app.internal.manager;
 
 import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
 
 import org.cytoscape.app.internal.exception.AppParsingException;
 
@@ -10,14 +15,55 @@
  * to verify the app.
  */
 public class AppParser {
+       /** The name of the key in the app jar's manifest file that indicates 
the fully-qualified name 
+        * of the class to instantiate upon app installation. */
+       private static final String APP_CLASS_TAG = "Cytoscape-App";
+       
        public App parseApp(File file) throws AppParsingException {
+               App parsedApp = new App();
+               
                if (!file.isFile()) {
                        throw new AppParsingException("Given file is not a 
file.");
                }
                
+               // Attempt to parse the file as a jar file
+               JarFile jarFile = null;
+               try {
+                       jarFile = new JarFile(file);
+               } catch (IOException e) {
+                       throw new AppParsingException("Error parsing given file 
as a jar file: " + e.getMessage());
+               }
                
-               App parsedApp = new App(null, null, null, null, file, null);
+               // Obtain the URL of the jar file
+               URL jarURL = null;
+               try {
+                       jarURL = file.toURI().toURL();
+               } catch (MalformedURLException e) {
+                       throw new AppParsingException("Failed to obtain jar 
URL: " + e.getMessage());
+               }
                
+               // Attempt to obtain manifest file from jar
+               Manifest manifest = null;
+               try {
+                       manifest = jarFile.getManifest();
+               } catch (IOException e) {
+                       throw new AppParsingException("Error obtaining manifest 
from app jar: " + e.getMessage());
+               }
+               
+               // Obtain the fully-qualified name of the class to instantiate 
upon app installation
+               String entryClassName = 
manifest.getMainAttributes().getValue(APP_CLASS_TAG);
+               if (entryClassName == null || entryClassName.trim().length() == 
0) {
+                       throw new AppParsingException("Jar is missing value for 
entry " + APP_CLASS_TAG + " in its manifest file.");
+               }
+               
+               // Attempt to guess the app's name
+               parsedApp.setAppName(file.getName()); // Use filename for now
+               
+               parsedApp.setAppFile(file);
+               parsedApp.setEntryClassName(entryClassName);
+               parsedApp.setJarURL(jarURL);
+               parsedApp.setAppValidated(true);
+               
                return parsedApp;
        }
 }

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
 2012-04-03 20:24:20 UTC (rev 28730)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
 2012-04-03 22:09:55 UTC (rev 28731)
@@ -1,29 +1,477 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
 package org.cytoscape.app.internal.ui;
 
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
+public class AppManagerDialog extends javax.swing.JFrame {
 
-public class AppManagerDialog extends JDialog {
+    /**
+     * Creates new form TestFrame
+     */
+    public AppManagerDialog() {
+        initComponents();
+    }
 
-       private static final long serialVersionUID = 7046019190157943640L;
+    /**
+     * 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() {
 
-       public AppManagerDialog() {
+        jFrame1 = new javax.swing.JFrame();
+        jTabbedPane2 = new javax.swing.JTabbedPane();
+        jPanel2 = new javax.swing.JPanel();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        jTable2 = new javax.swing.JTable();
+        jLabel2 = new javax.swing.JLabel();
+        jLabel3 = new javax.swing.JLabel();
+        jLabel4 = new javax.swing.JLabel();
+        jLabel5 = new javax.swing.JLabel();
+        jButton5 = new javax.swing.JButton();
+        jButton6 = new javax.swing.JButton();
+        jButton7 = new javax.swing.JButton();
+        jComboBox2 = new javax.swing.JComboBox();
+        jLabel6 = new javax.swing.JLabel();
+        jPanel3 = new javax.swing.JPanel();
+        jLabel7 = new javax.swing.JLabel();
+        jLabel8 = new javax.swing.JLabel();
+        jButton8 = new javax.swing.JButton();
+        jButton9 = new javax.swing.JButton();
+        jScrollPane4 = new javax.swing.JScrollPane();
+        jTable3 = new javax.swing.JTable();
+        jPanel1 = new javax.swing.JPanel();
+        jButton2 = new javax.swing.JButton();
+        jButton3 = new javax.swing.JButton();
+        jSeparator1 = new javax.swing.JSeparator();
+        jLabel9 = new javax.swing.JLabel();
+        jComboBox3 = new javax.swing.JComboBox();
+        jButton10 = new javax.swing.JButton();
+        jLabel1 = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jTable1 = new javax.swing.JTable();
+        jButton1 = new javax.swing.JButton();
 
-               // Create tabbed pane
-               JTabbedPane tabbedPane = new JTabbedPane();
-               this.add(tabbedPane);
-               
-               JPanel searchPanel = new JPanel();
-               JPanel listPanel = new JPanel();
-               JPanel updatePanel = new JPanel();
+        org.jdesktop.layout.GroupLayout jFrame1Layout = new 
org.jdesktop.layout.GroupLayout(jFrame1.getContentPane());
+        jFrame1.getContentPane().setLayout(jFrame1Layout);
+        jFrame1Layout.setHorizontalGroup(
+            
jFrame1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(0, 400, Short.MAX_VALUE)
+        );
+        jFrame1Layout.setVerticalGroup(
+            
jFrame1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(0, 300, Short.MAX_VALUE)
+        );
 
-               // Add panels to tabbed pane
-               tabbedPane.addTab("Get Apps", searchPanel);
-               tabbedPane.addTab("Current Apps", listPanel);
-               tabbedPane.addTab("Update Apps", updatePanel);
-               
-               this.setVisible(true);
-       }
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+
+        jTable2.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 String [] {
+                "Name", "Version", "Author", "Description", "Status"
+            }
+        ) {
+            boolean[] canEdit = new boolean [] {
+                false, false, false, false, false
+            };
+
+            public boolean isCellEditable(int rowIndex, int columnIndex) {
+                return canEdit [columnIndex];
+            }
+        });
+        jScrollPane2.setViewportView(jTable2);
+
+        jLabel2.setText("Number of Apps Installed:");
+
+        jLabel3.setText("Apps available: ");
+
+        jLabel4.setText("0");
+
+        jLabel5.setText("0");
+
+        jButton5.setText("Install Selected");
+
+        jButton6.setText("Uninstall Selected");
+
+        jButton7.setText("Delete Selected");
+
+        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] 
{ "All", "Item 2", "Item 3", "Item 4" }));
+
+        jLabel6.setText("Show:");
+
+        org.jdesktop.layout.GroupLayout jPanel2Layout = new 
org.jdesktop.layout.GroupLayout(jPanel2);
+        jPanel2.setLayout(jPanel2Layout);
+        jPanel2Layout.setHorizontalGroup(
+            
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(jPanel2Layout.createSequentialGroup()
+                        
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jScrollPane2, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 743, Short.MAX_VALUE)
+                            .add(jPanel2Layout.createSequentialGroup()
+                                
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                                    .add(jPanel2Layout.createSequentialGroup()
+                                        .add(jLabel3)
+                                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                        .add(jLabel5))
+                                    .add(jPanel2Layout.createSequentialGroup()
+                                        .add(jLabel2)
+                                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                        .add(jLabel4))
+                                    .add(jPanel2Layout.createSequentialGroup()
+                                        .add(jLabel6)
+                                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                        .add(jComboBox2, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 165, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
+                                .add(0, 0, Short.MAX_VALUE)))
+                        .addContainerGap())
+                    .add(jPanel2Layout.createSequentialGroup()
+                        .add(jButton5)
+                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(jButton6)
+                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(jButton7)
+                        .add(0, 0, Short.MAX_VALUE))))
+        );
+        jPanel2Layout.setVerticalGroup(
+            
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jPanel2Layout.createSequentialGroup()
+                .addContainerGap()
+                
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel2)
+                    .add(jLabel4))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel3)
+                    .add(jLabel5))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel6)
+                    .add(jComboBox2, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane2, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 459, Short.MAX_VALUE)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jButton5)
+                    .add(jButton6)
+                    .add(jButton7))
+                .addContainerGap())
+        );
+
+        jTabbedPane2.addTab("Currently Installed", jPanel2);
+
+        jLabel7.setText("Updates available:");
+
+        jLabel8.setText("0");
+
+        jButton8.setText("Install Selected Updates");
+
+        jButton9.setText("Install All Updates");
+
+        jTable3.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 String [] {
+                "App Name", "Version", "Update Description"
+            }
+        ));
+        jScrollPane4.setViewportView(jTable3);
+
+        org.jdesktop.layout.GroupLayout jPanel3Layout = new 
org.jdesktop.layout.GroupLayout(jPanel3);
+        jPanel3.setLayout(jPanel3Layout);
+        jPanel3Layout.setHorizontalGroup(
+            
jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jPanel3Layout.createSequentialGroup()
+                .addContainerGap()
+                
.add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(jScrollPane4, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 749, Short.MAX_VALUE)
+                    .add(jPanel3Layout.createSequentialGroup()
+                        .add(jButton8)
+                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(jButton9)
+                        .add(0, 0, Short.MAX_VALUE))
+                    .add(jPanel3Layout.createSequentialGroup()
+                        .add(jLabel7)
+                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                        .add(jLabel8)
+                        .addContainerGap())))
+        );
+        jPanel3Layout.setVerticalGroup(
+            
jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jPanel3Layout.createSequentialGroup()
+                .addContainerGap()
+                
.add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jLabel7)
+                    .add(jLabel8))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane4, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                
.add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jButton8)
+                    .add(jButton9))
+                .addContainerGap())
+        );
+
+        jTabbedPane2.addTab("Check for Updates", jPanel3);
+
+        jButton2.setText("Install from External File..");
+
+        jButton3.setText("Install from URL..");
+
+        jLabel9.setText("Search for Apps from the Web Store:");
+
+        jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] 
{ "Item 1", "Item 2", "Item 3", "Item 4" }));
+
+        jButton10.setText("Search");
+
+        jLabel1.setText("Search Results:");
+
+        jTable1.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 String [] {
+                "Name", "Version", "Author", "Description"
+            }
+        ));
+        jScrollPane1.setViewportView(jTable1);
+
+        jButton1.setText("Install Selected Apps");
+
+        org.jdesktop.layout.GroupLayout jPanel1Layout = new 
org.jdesktop.layout.GroupLayout(jPanel1);
+        jPanel1.setLayout(jPanel1Layout);
+        jPanel1Layout.setHorizontalGroup(
+            
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                    .add(jSeparator1)
+                    .add(org.jdesktop.layout.GroupLayout.TRAILING, 
jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 743, 
Short.MAX_VALUE)
+                    .add(jPanel1Layout.createSequentialGroup()
+                        
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                            .add(jPanel1Layout.createSequentialGroup()
+                                .add(jButton2)
+                                
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                .add(jButton3))
+                            .add(jPanel1Layout.createSequentialGroup()
+                                .add(6, 6, 6)
+                                
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+                                    .add(jPanel1Layout.createSequentialGroup()
+                                        .add(jComboBox3, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 288, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                                        
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                                        .add(jButton10))
+                                    .add(jLabel9)
+                                    .add(jLabel1)))
+                            .add(jButton1))
+                        .add(0, 0, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        jPanel1Layout.setVerticalGroup(
+            
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jButton2)
+                    .add(jButton3))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jSeparator1, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 10, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jLabel9)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+                    .add(jComboBox3, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+                    .add(jButton10))
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jLabel1)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jScrollPane1, 
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 406, Short.MAX_VALUE)
+                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+                .add(jButton1)
+                .addContainerGap())
+        );
+
+        jTabbedPane2.addTab("Install Additional Apps", jPanel1);
+
+        org.jdesktop.layout.GroupLayout layout = new 
org.jdesktop.layout.GroupLayout(getContentPane());
+        getContentPane().setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jTabbedPane2)
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+            .add(jTabbedPane2)
+        );
+
+        pack();
+    }// </editor-fold>
+
+    /**
+     * @param args the command line arguments
+     */
+    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(AppManagerDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
+        } catch (InstantiationException ex) {
+            
java.util.logging.Logger.getLogger(AppManagerDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
+        } catch (IllegalAccessException ex) {
+            
java.util.logging.Logger.getLogger(AppManagerDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
+        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
+            
java.util.logging.Logger.getLogger(AppManagerDialog.class.getName()).log(java.util.logging.Level.SEVERE,
 null, ex);
+        }
+        //</editor-fold>
+
+        /*
+         * Create and display the form
+         */
+        java.awt.EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                new AppManagerDialog().setVisible(true);
+            }
+        });
+    }
+    // Variables declaration - do not modify
+    private javax.swing.JButton jButton1;
+    private javax.swing.JButton jButton10;
+    private javax.swing.JButton jButton2;
+    private javax.swing.JButton jButton3;
+    private javax.swing.JButton jButton5;
+    private javax.swing.JButton jButton6;
+    private javax.swing.JButton jButton7;
+    private javax.swing.JButton jButton8;
+    private javax.swing.JButton jButton9;
+    private javax.swing.JComboBox jComboBox2;
+    private javax.swing.JComboBox jComboBox3;
+    private javax.swing.JFrame jFrame1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JLabel jLabel5;
+    private javax.swing.JLabel jLabel6;
+    private javax.swing.JLabel jLabel7;
+    private javax.swing.JLabel jLabel8;
+    private javax.swing.JLabel jLabel9;
+    private javax.swing.JPanel jPanel1;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JScrollPane jScrollPane4;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JTabbedPane jTabbedPane2;
+    private javax.swing.JTable jTable1;
+    private javax.swing.JTable jTable2;
+    private javax.swing.JTable jTable3;
+    // End of variables declaration
 }

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