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.