Author: rozagh
Date: 2012-08-09 16:46:07 -0700 (Thu, 09 Aug 2012)
New Revision: 30149

Added:
   
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/TableColumnStatFileIO.java
   
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/util/TableColumnStat.java
Modified:
   
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
Log:
fixes #1316 added the functionality to tore the column order for 
Node/Edge/Network and unassigned tables in session files under 
apps/org.cytoscape.browser and restore the info from there.

Modified: 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
===================================================================
--- 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
  2012-08-09 23:38:29 UTC (rev 30148)
+++ 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
  2012-08-09 23:46:07 UTC (rev 30149)
@@ -6,6 +6,7 @@
 import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.event.ActionListener;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -21,6 +22,7 @@
 import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.application.swing.CytoPanelComponent;
 import org.cytoscape.application.swing.CytoPanelName;
+import org.cytoscape.browser.internal.util.TableColumnStat;
 import org.cytoscape.equations.EquationCompiler;
 import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.model.CyNetwork;
@@ -29,6 +31,10 @@
 import org.cytoscape.model.CyTable;
 import org.cytoscape.model.CyTableManager;
 import org.cytoscape.service.util.CyServiceRegistrar;
+import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
+import org.cytoscape.session.events.SessionAboutToBeSavedListener;
+import org.cytoscape.session.events.SessionLoadedEvent;
+import org.cytoscape.session.events.SessionLoadedListener;
 import org.cytoscape.task.TableTaskFactory;
 import org.cytoscape.work.swing.DialogTaskManager;
 
@@ -37,7 +43,7 @@
  * Base class for all Table Browsers.
  *
  */
-public abstract class AbstractTableBrowser extends JPanel implements 
CytoPanelComponent, ActionListener {
+public abstract class AbstractTableBrowser extends JPanel implements 
CytoPanelComponent, ActionListener , SessionLoadedListener, 
SessionAboutToBeSavedListener{
 
        private static final long serialVersionUID = 1968196123280466989L;
        
@@ -67,6 +73,8 @@
        private final Map<BrowserTableModel,JScrollPane> scrollPanes;
        private final Map<CyTable,BrowserTableModel> browserTableModels;
        private JScrollPane currentScrollPane;
+       protected final String appFileName;
+
        
        AbstractTableBrowser(final String tabTitle,
                                                 final CyTableManager 
tableManager,
@@ -87,6 +95,7 @@
                this.applicationManager = applicationManager;
                this.popupMenuHelper = popupMenuHelper;
                this.eventHelper = eventHelper;
+               this.appFileName  = tabTitle.replaceAll(" ", 
"").concat(".props");
 
                this.scrollPanes = new HashMap<BrowserTableModel,JScrollPane>();
                this.browserTableModels = new 
HashMap<CyTable,BrowserTableModel>();
@@ -184,9 +193,16 @@
                                updateColumnComparators(rowSorter, 
browserTableModel);
                                browserTable.setUpdateComparators(true);
                                
-                               //hide SUID and selected by default
+                               //move and hide SUID and selected by default
+                               final List<String> attrList = 
browserTableModel.getAllAttributeNames();
+
+                               BrowserTableColumnModel columnModel = 
(BrowserTableColumnModel) browserTable.getColumnModel();
                                
-                               final List<String> attrList = 
browserTableModel.getAllAttributeNames();
+                               if(attrList.contains(CyNetwork.SUID))
+                                       
columnModel.moveColumn(browserTable.convertColumnIndexToView(browserTableModel.mapColumnNameToColumnIndex(CyNetwork.SUID)),
 0);
+                               if(attrList.contains(CyNetwork.SELECTED))
+                                       
columnModel.moveColumn(browserTable.convertColumnIndexToView(browserTableModel.mapColumnNameToColumnIndex(CyNetwork.SELECTED)),
 1);
+                               
                                attrList.remove(CyNetwork.SUID);
                                attrList.remove( CyNetwork.SELECTED);
                                
browserTableModel.setVisibleAttributeNames(attrList);
@@ -214,6 +230,10 @@
                
                return btm;
        }
+       
+       protected Map<CyTable, BrowserTableModel>  getAllBrowserTablesMap (){
+               return browserTableModels;
+       }
 
        void updateColumnComparators(final TableRowSorter<BrowserTableModel> 
rowSorter,
                        final BrowserTableModel browserTableModel) {
@@ -228,4 +248,65 @@
        public String toString() {
                return "AbstractTableBrowser [tabTitle=" + tabTitle + ", 
currentTable=" + currentTable + "]";
        }
+       
+       
+       @Override
+       public void handleEvent(SessionLoadedEvent e) {
+               Map<String, TableColumnStat> tscMap = 
TableColumnStatFileIO.read(e, appFileName);
+               
+               if (tscMap == null || tscMap.isEmpty())
+                       return;
+               
+               Map<CyTable, BrowserTableModel>  browserTableModels = 
getAllBrowserTablesMap();
+               
+               for (CyTable table : browserTableModels.keySet()){
+                       if (! tscMap.containsKey(table.getTitle()))
+                               continue;
+                       
+                       final TableColumnStat tcs = 
tscMap.get(table.getTitle());
+                       
+                       final BrowserTableModel btm = 
browserTableModels.get(table);
+                       final BrowserTableColumnModel colM = 
(BrowserTableColumnModel) btm.getTable().getColumnModel();
+                       colM.setAllColumnsVisible();
+                       final List<String> orderedCols = tcs.getOrderedCol();
+                       final JTable jtable = btm.getTable();
+                       
+                       for (int i =0; i< orderedCols.size(); i++){
+                               final String colName = orderedCols.get(i);
+                               colM.moveColumn( 
jtable.convertColumnIndexToView(btm.mapColumnNameToColumnIndex(colName))  , i);
+                       }
+                       btm.setVisibleAttributeNames(tcs.getVisibleCols());
+                       
+               }
+               
+       }
+
+       @Override
+       public void handleEvent(SessionAboutToBeSavedEvent e) {
+
+               Map<CyTable, BrowserTableModel>  browserTableModels = 
getAllBrowserTablesMap();
+               List< TableColumnStat> tableColumnStatList = new 
ArrayList<TableColumnStat>();
+
+               for (CyTable table :  browserTableModels.keySet()){
+
+                       TableColumnStat tcs = new 
TableColumnStat(table.getTitle());
+
+                       BrowserTableModel btm = browserTableModels.get(table);
+                       BrowserTableColumnModel colM = 
(BrowserTableColumnModel) btm.getTable().getColumnModel();
+                       List<String> visAttrs = btm.getVisibleAttributeNames();
+                       colM.setAllColumnsVisible();
+                       List<String> attrs =  btm.getAllAttributeNames();
+                       JTable jtable = btm.getTable();
+
+                       for (String name: attrs){
+                               int viewIndex = 
jtable.convertColumnIndexToView(btm.mapColumnNameToColumnIndex(name));
+                               tcs.addColumnStat(name, viewIndex,  
visAttrs.contains(name));                   
+                       }
+
+                       btm.setVisibleAttributeNames(visAttrs);
+                       tableColumnStatList.add(tcs);
+               }
+               TableColumnStatFileIO.write(tableColumnStatList, e, 
this.appFileName ); 
+
+       }
 }

Added: 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/TableColumnStatFileIO.java
===================================================================
--- 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/TableColumnStatFileIO.java
                         (rev 0)
+++ 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/TableColumnStatFileIO.java
 2012-08-09 23:46:07 UTC (rev 30149)
@@ -0,0 +1,108 @@
+package org.cytoscape.browser.internal;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.cytoscape.browser.internal.util.TableColumnStat;
+import org.cytoscape.session.CySession;
+import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
+import org.cytoscape.session.events.SessionLoadedEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class TableColumnStatFileIO {
+       private static final Logger logger = 
LoggerFactory.getLogger(TableColumnStatFileIO.class);
+       
+       static String APP_NAME = "org.cytoscape.browser";
+       
+       public static void write (List<TableColumnStat> tableColStats, 
SessionAboutToBeSavedEvent e, String className){
+               try {
+                       // Create an empty file on system temp directory
+                       File tmpFile = new 
File(System.getProperty("java.io.tmpdir"),  className);
+                       tmpFile.deleteOnExit();
+                       
+                       BufferedWriter writer = new BufferedWriter(new 
FileWriter(tmpFile));
+                       for (TableColumnStat tcs : tableColStats){
+                                       writer.write(tcs.toString());
+                               }
+                       writer.close();
+                       
+                       // Add it to the apps list
+                       List<File> fileList = new ArrayList<File>();
+                       boolean flag = false;
+                       if (e.getAppFileListMap().containsKey(APP_NAME)){
+                               fileList = e.getAppFileListMap().get(APP_NAME);
+                               flag = true;
+                       }
+                       fileList.add(tmpFile);
+                       if (!flag)
+                               e.addAppFiles(APP_NAME, fileList);
+               } catch (Exception ex) {
+                       logger.error("Error adding table browser status files 
to be saved in the session.", ex);
+               }
+       }
+       
+
+       public static Map<String, TableColumnStat>  read ( SessionLoadedEvent 
e, String className){
+               Map<String, TableColumnStat> tableColStats = new 
HashMap<String, TableColumnStat>();
+               CySession sess = e.getLoadedSession();
+
+               if (sess == null) 
+                       return null;
+               Map<String, List<File>> filesMap = sess.getAppFileListMap();
+
+               if (!filesMap.containsKey(APP_NAME))
+                       return null;
+
+               List<File> files = filesMap.get(APP_NAME);
+               if (files == null) 
+                       return null;
+
+               for (File f : files) {
+                       if (f.getName().endsWith(className)) {
+
+                               try {
+                                       InputStream is = new FileInputStream(f);
+
+                                       final InputStreamReader reader = new 
InputStreamReader(is);
+                                       final BufferedReader br = new 
BufferedReader(reader);
+                                       String line = br.readLine();
+                                       while (line != null){
+
+                                               String[] split = 
line.split(",");
+                                               if (split.length != 4)
+                                                       continue;
+
+                                               String tableTitle = split[0];
+                                               int colIndex = Integer.valueOf( 
split[1]);
+                                               String colName = split[2];
+                                               boolean visible = 
Boolean.valueOf(split[3]);
+                                               
+                                               if 
(!tableColStats.containsKey(tableTitle))
+                                                       
tableColStats.put(tableTitle, new TableColumnStat(tableTitle));
+                                               
+                                               TableColumnStat tcs = 
tableColStats.get(tableTitle);
+                                               tcs.addColumnStat(colName, 
colIndex, visible);
+                                               line = br.readLine();
+
+                                       }
+                               }catch(Exception ex){
+                                       logger.error("Error reading table 
browser status files from session.", ex);
+                               }
+
+                               break;
+                       }
+               }
+               return tableColStats;
+       }
+
+}

Added: 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/util/TableColumnStat.java
===================================================================
--- 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/util/TableColumnStat.java
                          (rev 0)
+++ 
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/util/TableColumnStat.java
  2012-08-09 23:46:07 UTC (rev 30149)
@@ -0,0 +1,42 @@
+package org.cytoscape.browser.internal.util;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class TableColumnStat {
+
+       String title;
+       Map<String, Boolean> colNameVisibilityMap = new LinkedHashMap<String, 
Boolean>();
+       Map<Integer, String> orderedCol = new TreeMap<Integer, String>();
+       List<String> visCols = new ArrayList<String>();
+
+       public TableColumnStat (String title){
+               this.title = title;
+       }
+
+       public void  addColumnStat (String ColName, int index, boolean vis){
+               orderedCol.put(index, ColName);
+               if (vis)
+                       visCols.add(ColName);
+       }
+
+       public List<String> getOrderedCol (){
+               return new ArrayList<String>( orderedCol.values());
+       }
+
+       public List<String> getVisibleCols(){
+               return visCols;
+       }
+
+       public String toString(){
+               String s = "";
+               for (Integer colIndex: orderedCol.keySet()){
+                       String colName = orderedCol.get(colIndex);
+                       s += title + "," + colIndex + "," + colName + "," + 
visCols.contains(colName) + "\n";   
+               }
+               return s;
+       }
+}

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