Author: paperwing
Date: 2012-04-06 14:01:19 -0700 (Fri, 06 Apr 2012)
New Revision: 28754

Added:
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.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/action/AppManagerAction.java
   
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.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/InstallNewAppsPanel.java
Log:
Now able to open a JFileChooser dialog (seems to be working fine) upon clicking 
"Install from File" button, completed ListBasedTableModel class implementing 
TableMode to store app data into the UI's tables, allowing app data to be added 
and removed dynamically on a by-row basis.

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-06 20:39:36 UTC (rev 28753)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/AppManagerAction.java
    2012-04-06 21:01:19 UTC (rev 28754)
@@ -27,9 +27,7 @@
 
        @Override
        public void actionPerformed(ActionEvent event) {
-               AppManagerDialog appManagerDialog = new 
AppManagerDialog(swingApplication.getJFrame(), true);
-               
-               appManagerDialog.setVisible(true);
+               AppManagerDialog appManagerDialog = new AppManagerDialog(null, 
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-06 20:39:36 UTC (rev 28753)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
 2012-04-06 21:01:19 UTC (rev 28754)
@@ -132,8 +132,9 @@
                
                // 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());
+               //registerService(bc, appManagerAction2, 
AbstractCyAction.class, new Properties());
+               //registerService(bc, appManagerAction2, AbstractAction.class, 
new Properties());
+               registerService(bc, appManagerAction2, CyAction.class, new 
Properties());
        }
 }
 

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
     2012-04-06 20:39:36 UTC (rev 28753)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
     2012-04-06 21:01:19 UTC (rev 28754)
@@ -154,8 +154,10 @@
        @Override
        public void actionPerformed(ActionEvent e) {
                
+               /*
                AppManagerDialog dialog = new AppManagerDialog(null, 
acceleratorSet);
                dialog.setVisible(true);
+               */
                
                /*
                AppManageDialog dlg = new AppManageDialog(desktop.getJFrame(), 
bookmarks, this.bookmarksUtil, 

Modified: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
     2012-04-06 20:39:36 UTC (rev 28753)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/FileChooserDialog.java
     2012-04-06 21:01:19 UTC (rev 28754)
@@ -3,22 +3,12 @@
 public class FileChooserDialog extends javax.swing.JDialog {
 
     private javax.swing.JFileChooser jFileChooser1;
-       
-    /**
-     * Creates new form FileChooserDialog
-     */
+
     public FileChooserDialog(java.awt.Frame parent, boolean modal) {
         super(parent, modal);
         initComponents();
     }
 
-    /**
-     * 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() {
 
         jFileChooser1 = new javax.swing.JFileChooser();
@@ -43,5 +33,5 @@
         );
 
         pack();
-    }// </editor-fold>
+    }
 }

Added: 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
                           (rev 0)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/ListBasedTableModel.java
   2012-04-06 21:01:19 UTC (rev 28754)
@@ -0,0 +1,151 @@
+package org.cytoscape.app.internal.swing;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
+/**
+ * This class is an implementation of the Swing TableModel that allows data to
+ * added and remove dynamically on a by-row basis.
+ */
+public class ListBasedTableModel implements TableModel {
+
+       private List<TableModelListener> listeners;
+       private List<Object[]> rows; 
+       private Class<?>[] dataTypes;
+       private String[] columnNames;
+       private int columnCount;
+       
+       public ListBasedTableModel(int columnCount, Class<?>[] dataTypes, 
String[] columnNames) {
+               if (columnCount <= 0) {
+                       throw new IllegalArgumentException("Can only create a 
table with at least 1 column.");
+               }
+               
+               if (columnCount != dataTypes.length) {
+                       throw new IllegalArgumentException("The number of 
columns must match the number of data types provided.");
+               }
+               
+               if (columnCount != columnNames.length) {
+                       throw new IllegalArgumentException("The number of 
columns must match the number of column names providied.");
+               }
+
+               rows = new ArrayList<Object[]>();
+               listeners = new LinkedList<TableModelListener>();
+               this.dataTypes = dataTypes;
+       }
+       
+       // TODO: Rows are added to end, need to support adding rows in middle?
+       public void addRow(Object[] row) {
+               if (row.length != columnCount) {
+                       throw new IllegalArgumentException("Need to have a 
number of elements equal to the number of columns in the table.");
+               }
+               
+               rows.add(row);
+               int rowIndex = rows.size() - 1;
+               
+               TableModelEvent event = new TableModelEvent(this, rowIndex, 
rowIndex, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
+               fireTableChangedEvent(event);
+       }
+       
+       public List<Object[]> getRows() {
+               return rows;
+       }
+       
+       public void removeRow(Object[] row) {
+               int rowIndex = rows.indexOf(row);
+               
+               if (rowIndex == -1) {
+                       throw new NoSuchElementException("The requested row, " 
+ row + " was not found in the table.");
+               }
+       
+               rows.remove(rowIndex);
+               
+               TableModelEvent event = new TableModelEvent(this, rowIndex, 
rowIndex, TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE);
+               fireTableChangedEvent(event);
+       }
+       
+       @Override
+       public void addTableModelListener(TableModelListener l) {
+               if (listeners.contains(l)) {
+                       throw new IllegalArgumentException("This listener has 
already been added.");
+               }
+               
+               listeners.add(l);
+       }
+
+       @Override
+       public Class<?> getColumnClass(int columnIndex) {
+               return dataTypes[columnIndex];
+       }
+
+       @Override
+       public int getColumnCount() {
+               return columnCount;
+       }
+
+       @Override
+       public String getColumnName(int columnIndex) {
+               return columnNames[columnIndex];
+       }
+
+       @Override
+       public int getRowCount() {
+               return rows.size();
+       }
+
+       @Override
+       public Object getValueAt(int rowIndex, int columnIndex) {
+               checkOutOfBounds(rowIndex, columnIndex);
+               
+               return rows.get(rowIndex)[columnIndex];
+       }
+
+       @Override
+       public boolean isCellEditable(int rowIndex, int columnIndex) {
+               // Don't allow cell editing
+               return false;
+       }
+
+       // TODO: Implement support for TabelModelListeners
+       @Override
+       public void removeTableModelListener(TableModelListener l) {
+               if (!listeners.contains(l)) {
+                       throw new NoSuchElementException("Listener " + l + " 
was not added to this TableModel.");
+               }
+               
+               listeners.remove(l);
+       }
+
+       @Override
+       public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+               checkOutOfBounds(rowIndex, columnIndex);
+               
+               rows.get(rowIndex)[columnIndex] = aValue;
+               
+               TableModelEvent event = new TableModelEvent(this, rowIndex, 
rowIndex, columnIndex, TableModelEvent.UPDATE);
+               fireTableChangedEvent(event);
+       }
+       
+       // Checks if the requested row index and column index are out of bounds.
+       private void checkOutOfBounds(int rowIndex, int columnIndex) {
+               if (rowIndex >= rows.size()) {
+                       throw new IndexOutOfBoundsException("Cannot obtain row 
" + rowIndex + ", only have " + rows.size() + " rows.");
+               }
+               
+               if (columnIndex >= columnCount) {
+                       throw new IndexOutOfBoundsException("Cannot obtain 
column " + rowIndex + ", only have " + columnCount + " columns.");
+               }
+       }
+       
+       private void fireTableChangedEvent(TableModelEvent event) {
+               
+               for (TableModelListener listener : listeners) {
+                       listener.tableChanged(event);
+               }
+       }
+}


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

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-06 20:39:36 UTC (rev 28753)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/AppManagerDialog.java
 2012-04-06 21:01:19 UTC (rev 28754)
@@ -17,6 +17,11 @@
         initComponents();
         
         this.appManager = appManager;
+        
+        this.setLocationRelativeTo(parent);
+        this.setVisible(true);
+        
+        System.out.println("parent: " + parent);
     }
    
 

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-06 20:39:36 UTC (rev 28753)
+++ 
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
      2012-04-06 21:01:19 UTC (rev 28754)
@@ -1,23 +1,37 @@
 package org.cytoscape.app.internal.swing.main;
 
+import java.io.File;
+import java.util.ArrayList;
+
+import javax.swing.JFileChooser;
+import javax.swing.event.TableModelListener;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
 public class InstallNewAppsPanel extends javax.swing.JPanel {
 
-    /**
-     * Creates new form InstallNewAppsPanel
-     */
+    private javax.swing.JButton installFromFileButton;
+    private javax.swing.JButton installFromURLButton;
+    private javax.swing.JButton installSelectedButton;
+    private javax.swing.JLabel resultsLabel;
+    private javax.swing.JScrollPane resultsScrollPane;
+    private javax.swing.JTable resultsTable;
+    private javax.swing.JButton searchButton;
+    private javax.swing.JComboBox searchComboBox;
+    private javax.swing.JLabel searchLabel;
+    private javax.swing.JSeparator searchSeparator;
+       
+       private JFileChooser fileChooser;
+       
     public InstallNewAppsPanel() {
         initComponents();
+        
+        setupFileChooser();
+        setupResultsTable();
     }
 
-    /**
-     * 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() {
-
         installFromFileButton = new javax.swing.JButton();
         installFromURLButton = new javax.swing.JButton();
         searchSeparator = new javax.swing.JSeparator();
@@ -29,14 +43,14 @@
         resultsTable = new javax.swing.JTable();
         installSelectedButton = new javax.swing.JButton();
 
-        installFromFileButton.setText("Install from External File");
+        installFromFileButton.setText("Install from External File ..");
         installFromFileButton.addActionListener(new 
java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 installFromFileButtonActionPerformed(evt);
             }
         });
 
-        installFromURLButton.setText("Install from URL");
+        installFromURLButton.setText("Install from URL ..");
         installFromURLButton.addActionListener(new 
java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 installFromURLButtonActionPerformed(evt);
@@ -56,39 +70,94 @@
         });
 
         resultsLabel.setText("Search Results:");
+        
+        TableModel tableModel = new TableModel() {
 
+               private ArrayList<ArrayList<String>> data;
+               
+                       @Override
+                       public void addTableModelListener(TableModelListener l) 
{
+                       }
+
+                       @Override
+                       public Class<?> getColumnClass(int columnIndex) {
+                               return String.class;
+                       }
+
+                       @Override
+                       public int getColumnCount() {
+                               // TODO Auto-generated method stub
+                               return 0;
+                       }
+
+                       @Override
+                       public String getColumnName(int columnIndex) {
+                               // TODO Auto-generated method stub
+                               return null;
+                       }
+
+                       @Override
+                       public int getRowCount() {
+                               // TODO Auto-generated method stub
+                               return 0;
+                       }
+
+                       @Override
+                       public Object getValueAt(int rowIndex, int columnIndex) 
{
+                               // TODO Auto-generated method stub
+                               return null;
+                       }
+
+                       @Override
+                       public boolean isCellEditable(int rowIndex, int 
columnIndex) {
+                               // TODO Auto-generated method stub
+                               return false;
+                       }
+
+                       @Override
+                       public void removeTableModelListener(TableModelListener 
l) {
+                       }
+
+                       @Override
+                       public void setValueAt(Object aValue, int rowIndex, int 
columnIndex) {
+                               // TODO Auto-generated method stub
+                               
+                       }
+                       
+               };
+        
         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}
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {null, null, null, null},
+//                {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"
@@ -149,10 +218,16 @@
                 .add(installSelectedButton)
                 .addContainerGap())
         );
-    }// </editor-fold>
+    }
 
     private void 
installFromFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
-        // TODO add your handling code here:
+        int returnValue = fileChooser.showOpenDialog(this);
+        
+        if (returnValue == JFileChooser.APPROVE_OPTION) {
+               File[] files = fileChooser.getSelectedFiles();
+               
+               System.out.println("Selected files: " + files);
+        }
     }
 
     private void 
installFromURLButtonActionPerformed(java.awt.event.ActionEvent evt) {
@@ -167,16 +242,36 @@
         // TODO add your handling code here:
     }
 
-    // Variables declaration - do not modify
-    private javax.swing.JButton installFromFileButton;
-    private javax.swing.JButton installFromURLButton;
-    private javax.swing.JButton installSelectedButton;
-    private javax.swing.JLabel resultsLabel;
-    private javax.swing.JScrollPane resultsScrollPane;
-    private javax.swing.JTable resultsTable;
-    private javax.swing.JButton searchButton;
-    private javax.swing.JComboBox searchComboBox;
-    private javax.swing.JLabel searchLabel;
-    private javax.swing.JSeparator searchSeparator;
-    // End of variables declaration
+    private void setupFileChooser() {
+       fileChooser = new JFileChooser();
+        fileChooser.setDialogTitle("Select App Files");
+        fileChooser.setApproveButtonText("Install");
+        fileChooser.setApproveButtonMnemonic('I');
+        fileChooser.setMultiSelectionEnabled(true);
+        
+        fileChooser.addChoosableFileFilter(new FileFilter(){
+
+                       @Override
+                       public boolean accept(File file) {
+                               if (file.getName().endsWith("jar") || 
file.isDirectory()) {
+                                       return true;
+                               } else {
+                                       return false;
+                               }
+                       }
+
+                       @Override
+                       public String getDescription() {
+                               return "Jar-packaged App Files (*.jar)";
+                       }
+               
+        });
+       }
+    
+    private void setupResultsTable() {
+       // resultsTable.setCellSelectionEnabled(false);
+
+       // resultsTable.setDefaultEditor(null, null);
+       resultsTable.setOpaque(true);
+    }
 }

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