Author: mes
Date: 2010-10-06 17:35:17 -0700 (Wed, 06 Oct 2010)
New Revision: 22176

Added:
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/properties/PropertiesFileFilter.java
Modified:
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/CyFileFilterImpl.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterFactoryImpl.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
   
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
   core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
Log:
got session reader and writer working using other reader managers

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/CyFileFilterImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/CyFileFilterImpl.java
   2010-10-06 21:21:08 UTC (rev 22175)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/CyFileFilterImpl.java
   2010-10-07 00:35:17 UTC (rev 22176)
@@ -191,7 +191,7 @@
 
                        br = null;
                }
-               
+
                return header;
        }
 
@@ -217,4 +217,16 @@
                return header.toString();
        }
 
+       public String toString() {
+               String s = description + " [category: " + category + "]  
[extensions: ";
+               for ( String ext : extensions )
+                       s += ext + ",";
+               s += "]   [contentTypes: ";
+               for ( String c : contentTypes )
+                       s += c + ",";
+               s += "]";
+
+               return s;
+       }
+
 }

Added: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/properties/PropertiesFileFilter.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/properties/PropertiesFileFilter.java
                               (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/properties/PropertiesFileFilter.java
       2010-10-07 00:35:17 UTC (rev 22176)
@@ -0,0 +1,48 @@
+package org.cytoscape.io.internal.read.properties;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.cytoscape.io.DataCategory;
+import org.cytoscape.io.util.StreamUtil;
+import org.cytoscape.io.internal.CyFileFilterImpl;
+
+public class PropertiesFileFilter extends CyFileFilterImpl {
+
+       Matcher matcher;
+
+       public PropertiesFileFilter(Set<String> extensions, Set<String> 
contentTypes,
+                       String description, DataCategory category, StreamUtil 
streamUtil) {
+               super(extensions, contentTypes, description, category, 
streamUtil);
+
+               Pattern p = Pattern.compile("^.+=.+$", Pattern.DOTALL);
+               matcher = p.matcher("");
+       }
+
+       public boolean accept(InputStream stream, DataCategory category) {
+
+               // Check data category
+               if (category != this.category)
+                       return false;
+               
+               final String header = this.getHeader(stream,20);
+
+               // These two tests are so that we don't mistakenly accept a 
cysession 
+               // or bookmarks file, which might otherwise match the pattern 
above.
+               if (header.contains("<cysession") && header.contains("xmlns"))
+                       return false;
+               if (header.contains("<bookmarks") && header.contains("xmlns"))
+                       return false;
+
+               // This is the real test to see if we're a .props file
+               // TODO can we find a better test?
+               if(matcher.reset(header).matches()) 
+                       return true;
+               
+               return false;
+       }
+}

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
      2010-10-06 21:21:08 UTC (rev 22175)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
      2010-10-07 00:35:17 UTC (rev 22176)
@@ -35,6 +35,7 @@
 import org.cytoscape.model.CyNetworkFactory;
 import org.cytoscape.model.CyTableFactory;
 import org.cytoscape.io.read.CyNetworkViewReaderManager;
+import org.cytoscape.io.read.CyPropertyReaderManager;
 import org.cytoscape.work.TaskIterator;
 import org.cytoscape.io.read.InputStreamTaskFactory;
 
@@ -43,11 +44,13 @@
 
        private final CyFileFilter filter;
        private final CyNetworkViewReaderManager netviewReaderMgr;
+       private final CyPropertyReaderManager propertyReaderMgr;
        private InputStream inputStream;
 
-       public SessionReaderFactoryImpl(CyFileFilter filter, 
CyNetworkViewReaderManager netviewReaderMgr) {
+       public SessionReaderFactoryImpl(CyFileFilter filter, 
CyNetworkViewReaderManager netviewReaderMgr, CyPropertyReaderManager 
propertyReaderMgr) {
                this.filter = filter;
                this.netviewReaderMgr = netviewReaderMgr;
+               this.propertyReaderMgr = propertyReaderMgr;
        }
 
        public void setInputStream(InputStream is) {
@@ -61,6 +64,6 @@
        }
 
        public TaskIterator getTaskIterator() {
-               return new TaskIterator(new SessionReaderImpl(inputStream, 
netviewReaderMgr));
+               return new TaskIterator(new SessionReaderImpl(inputStream, 
netviewReaderMgr, propertyReaderMgr));
        }
 }

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
     2010-10-06 21:21:08 UTC (rev 22175)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
     2010-10-07 00:35:17 UTC (rev 22176)
@@ -50,6 +50,8 @@
 import org.cytoscape.view.vizmap.VisualStyle;
 import org.cytoscape.io.read.CyNetworkViewReader;
 import org.cytoscape.io.read.CyNetworkViewReaderManager;
+import org.cytoscape.io.read.CyPropertyReader;
+import org.cytoscape.io.read.CyPropertyReaderManager;
 import org.cytoscape.work.AbstractTask;
 import org.cytoscape.work.TaskMonitor;
 import org.cytoscape.session.CySession;
@@ -58,9 +60,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
 import java.io.File;
 import java.io.InputStream;
 import java.io.IOException;
@@ -83,47 +82,27 @@
 /**
  */
 public class SessionReaderImpl extends AbstractTask implements CySessionReader 
{
-       /**
-        *
-        */
-       public static final String PACKAGE_NAME = 
"org.cytoscape.property.session";
 
-       /**
-        *
-        */
-       public static final String BOOKMARK_PACKAGE_NAME = 
"org.cytoscape.property.bookmark";
-
-       /**
-        *
-        */
        public static final String CYSESSION = "cysession.xml";
-
-       /**
-        *
-        */
        public static final String VIZMAP_PROPS = "vizmap.props";
-
-       /**
-        *
-        */
        public static final String CY_PROPS = "cytoscape.props";
-
-       /**
-        *
-        */
        public static final String XGMML_EXT = ".xgmml";
-       private static final String BOOKMARKS_FILE = "session_bookmarks.xml";
-       private static final String NETWORK_ROOT = "Network Root";
+       public  static final String BOOKMARKS_FILE = "session_bookmarks.xml";
+       public  static final String NETWORK_ROOT = "Network Root";
+
+
        private static final Logger logger = 
LoggerFactory.getLogger(SessionReaderImpl.class);
+
        private final Map<String, List<File>> pluginFileListMap = new 
HashMap<String, List<File>>();
        private final Map<String,CyNetworkView[]> networkViews = new 
HashMap<String,CyNetworkView[]>();
        private final Map<CyNetworkView,String> visualStyleMap = new 
HashMap<CyNetworkView,String>();
        private final Map<String, Network> netMap = new HashMap<String, 
Network>();
-       private final InputStream sourceInputStream;
 
+       private final InputStream sourceInputStream;
        private final CyNetworkViewReaderManager netviewReaderMgr; 
+       private final CyPropertyReaderManager propertyReaderMgr; 
 
-       private Cysession session;
+       private Cysession cysession;
        private Bookmarks bookmarks;
        private TaskMonitor taskMonitor;
        private Properties cytoscapeProps;
@@ -131,7 +110,7 @@
 
        /**
         */
-       public SessionReaderImpl(final InputStream sourceInputStream, final 
CyNetworkViewReaderManager netviewReaderMgr) {
+       public SessionReaderImpl(final InputStream sourceInputStream, final 
CyNetworkViewReaderManager netviewReaderMgr, CyPropertyReaderManager 
propertyReaderMgr) {
 
                if ( sourceInputStream == null )
                        throw new NullPointerException("input stream is null!");
@@ -140,60 +119,21 @@
                if ( netviewReaderMgr == null )
                        throw new NullPointerException("network view reader 
manager is null!");
                this.netviewReaderMgr = netviewReaderMgr;       
+
+               if ( propertyReaderMgr == null )
+                       throw new NullPointerException("property reader manager 
is null!");
+               this.propertyReaderMgr = propertyReaderMgr;     
        }
 
 
        /**
         * Read a session file.
-        *
-        * @throws IOException
-        * @throws JAXBException
         */
        public void run(TaskMonitor tm) throws Exception {
-               System.out.println("SESSION starting to read");
                taskMonitor = tm;
 
                extractEntries();
                processNetworks();
-
-
-//             if (session.getSessionState().getDesktop() != null) {
-//                     restoreDesktopState();
-//             }
-
-//             if (session.getSessionState().getServer() != null) {
-                       // TODO 
-                       //restoreOntologyServerStatus();
-//             }
-
-               // Send signal to others
-//             Cytoscape.firePropertyChange(Cytoscape.ATTRIBUTES_CHANGED, 
null, null);
-//             Cytoscape.firePropertyChange(Cytoscape.NETWORK_LOADED, null, 
null);
-
-               // Send signal to plugins
-//             Cytoscape.firePropertyChange(Cytoscape.RESTORE_PLUGIN_STATE, 
pluginFileListMap, null);
-//             deleteTmpPluginFiles();
-
-               // Send message with list of loaded networks.
-//             Cytoscape.firePropertyChange(Cytoscape.SESSION_LOADED, null, 
networkList);
-
-               // Restore listener for VizMapper.
-//             if (Cytoscape.getDesktop() != null) {
-
-                       // Cleanup view
-//                     final GraphView curView = 
Cytoscape.getCurrentNetworkView();
-
-//                     if ((curView != null) && 
(curView.equals(Cytoscape.getNullNetworkView()) == false)) {
-//                             VisualMappingManager vmm = 
Cytoscape.getVisualMappingManager();
-//                             VisualStyle lastVS = 
vmm.getVisualStyle(lastVSName);
-//                             vmm.setVisualStyleForView(curView,lastVS);
-//                             vmm.setNetworkView(curView);
-//                             vmm.setVisualStyle(lastVS);
-//                             Cytoscape.redrawGraph(curView);
-//                     }
-
-//                     
Cytoscape.getDesktop().getVizMapperUI().enableListeners(true);
-//             }
        }
 
        public CySession getCySession() {
@@ -209,7 +149,7 @@
                        .cytoscapeProperties( cytoscapeProps )
                        .vizmapProperties( vizmapProps )
                        .bookmarks( bookmarks )
-                       .cysession( session )
+                       .cysession( cysession )
                        .pluginFileListMap( pluginFileListMap )
                        .build();
 
@@ -233,31 +173,31 @@
 
                while ((zen = zis.getNextEntry()) != null) {
                        entryName = zen.getName();
-                       System.out.println("SESSION entry name: " + entryName);
+                       //System.out.println("SESSION entry name: " + 
entryName);
                        InputStream tmpIs = new MarkSupportedInputStream(zis);
 
                        try {
 
                        if (entryName.contains("/plugins/")) {
+                               //System.out.println("   extracting plugin 
entry");
                                extractPluginEntry(tmpIs, entryName);
-                               System.out.println("   extracting plugin 
entry");
                        } else if (entryName.endsWith(CYSESSION)) {
+                               //System.out.println("   extracting session 
file");
                                extractSessionState(tmpIs);
-                               System.out.println("   extracting session 
file");
                        } else if (entryName.endsWith(VIZMAP_PROPS)) {
+                               //System.out.println("   extracting vizmap 
props");
                                extractVizmapProps(tmpIs);
-                               System.out.println("   extracting vizmap 
props");
                        } else if (entryName.endsWith(CY_PROPS)) {
+                               //System.out.println("   extracting cytoscape 
props");
                                extractCytoscapeProps(tmpIs);
-                               System.out.println("   extracting cytoscape 
props");
                        } else if (entryName.endsWith(XGMML_EXT)) {
+                               //System.out.println("   extracting network");
                                extractNetwork(tmpIs, entryName);
-                               System.out.println("   extracting network");
                        } else if (entryName.endsWith(BOOKMARKS_FILE)) {
-                               System.out.println("   extracting bookmarks");
                                extractBookmarks(tmpIs);
+                               //System.out.println("   extracting bookmarks");
                        } else {
-                               System.out.println("Unknown entry found in 
session zip file!\n" + entryName);
+                               logger.warn("Unknown entry found in session zip 
file!\n" + entryName);
                        }
 
                        } catch (Exception e) {
@@ -330,34 +270,32 @@
        }
 
        private void extractVizmapProps(InputStream is) throws Exception {
-               vizmapProps = new Properties();
-               vizmapProps.load( is );
+               CyPropertyReader reader = propertyReaderMgr.getReader(is);
+               reader.run(taskMonitor);
+               vizmapProps = (Properties) reader.getProperty(); 
        }
 
        private void extractCytoscapeProps(InputStream is) throws Exception {
-               cytoscapeProps = new Properties();
-               cytoscapeProps.load( is );
+               CyPropertyReader reader = propertyReaderMgr.getReader(is);
+               reader.run(taskMonitor);
+               cytoscapeProps = (Properties) reader.getProperty(); 
        }
 
        private void extractBookmarks(InputStream is) throws Exception {
-                       final JAXBContext jaxbContext = 
JAXBContext.newInstance(BOOKMARK_PACKAGE_NAME,
-                                                                               
this.getClass().getClassLoader());
-                       final Unmarshaller unmarshaller = 
jaxbContext.createUnmarshaller();
-
-                       bookmarks = (Bookmarks) unmarshaller.unmarshal(is);
+               CyPropertyReader reader = propertyReaderMgr.getReader(is);
+               reader.run(taskMonitor);
+               bookmarks = (Bookmarks) reader.getProperty(); 
        }
 
        private void extractSessionState(InputStream is) throws Exception {
-               final JAXBContext jaxbContext = 
JAXBContext.newInstance(PACKAGE_NAME,
-                                                                       
this.getClass().getClassLoader());
-               final Unmarshaller unmarshaller = 
jaxbContext.createUnmarshaller();
-
-               session = (Cysession) unmarshaller.unmarshal(is);
+               CyPropertyReader reader = propertyReaderMgr.getReader(is);
+               reader.run(taskMonitor);
+               cysession = (Cysession) reader.getProperty(); 
        }
 
-       private void processNetworks() throws JAXBException, IOException, 
Exception {
+       private void processNetworks() throws Exception {
 
-               for (Network curNet : session.getNetworkTree().getNetwork()) 
+               for (Network curNet : cysession.getNetworkTree().getNetwork()) 
                        netMap.put(curNet.getId(), curNet);
 
                walkTree(netMap.get(NETWORK_ROOT), null);
@@ -368,10 +306,9 @@
         *
         * @param currentNetwork
         * @param parent
-        * @throws JAXBException
         * @throws IOException
         */
-       private void walkTree(final Network currentNetwork, final CyNetwork 
parent) throws JAXBException, IOException {
+       private void walkTree(final Network currentNetwork, final CyNetwork 
parent) throws Exception {
 
                for (Child child : currentNetwork.getChild() ) {
 

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterFactoryImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterFactoryImpl.java
     2010-10-06 21:21:08 UTC (rev 22175)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterFactoryImpl.java
     2010-10-07 00:35:17 UTC (rev 22176)
@@ -12,24 +12,38 @@
        
        private final CyFileFilter thisFilter;
        private final CyFileFilter xgmmlFilter;
-       private final CyNetworkViewWriterManager nvwm;
+       private final CyFileFilter bookmarksFilter;
+       private final CyFileFilter cysessionFilter;
+       private final CyFileFilter propertiesFilter;
+       private final CyNetworkViewWriterManager networkViewWriterMgr;
        private final PropertyWriterManager propertyWriterMgr;
-       private final CyFileFilter bookmarksFilter;
 
        private OutputStream outputStream;
        private CySession session;
 
-       public SessionWriterFactoryImpl(CyFileFilter thisFilter, CyFileFilter 
xgmmlFilter, CyFileFilter bookmarksFilter, CyNetworkViewWriterManager nvwm, 
PropertyWriterManager propertyWriterMgr) {
+
+
+       public SessionWriterFactoryImpl(final CyFileFilter thisFilter, 
+                                       final CyFileFilter xgmmlFilter, 
+                                       final CyFileFilter bookmarksFilter, 
+                                       final CyFileFilter cysessionFilter, 
+                                       final CyFileFilter propertiesFilter, 
+                                       final CyNetworkViewWriterManager 
networkViewWriterMgr, 
+                                       final PropertyWriterManager 
propertyWriterMgr) {
                this.thisFilter = thisFilter;
                this.xgmmlFilter = xgmmlFilter;
                this.bookmarksFilter = bookmarksFilter;
-               this.nvwm = nvwm;
+               this.cysessionFilter = cysessionFilter;
+               this.propertiesFilter = propertiesFilter;
+               this.networkViewWriterMgr = networkViewWriterMgr;
                this.propertyWriterMgr = propertyWriterMgr;
        }
        
        @Override
        public CyWriter getWriter() {
-               return new SessionWriterImpl(outputStream, session, nvwm, 
propertyWriterMgr, xgmmlFilter, bookmarksFilter);
+               return new SessionWriterImpl(outputStream, session, 
networkViewWriterMgr, 
+                                            propertyWriterMgr, xgmmlFilter, 
bookmarksFilter, 
+                                            cysessionFilter, propertiesFilter);
        }
 
        @Override

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
    2010-10-06 21:21:08 UTC (rev 22175)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
    2010-10-07 00:35:17 UTC (rev 22176)
@@ -161,14 +161,25 @@
        private final PropertyWriterManager propertyWriterMgr;
        private final CyFileFilter xgmmlFilter;
        private final CyFileFilter bookmarksFilter;
+       private final CyFileFilter cysessionFilter;
+       private final CyFileFilter propertiesFilter;
 
-       public SessionWriterImpl(final OutputStream outputStream, final 
CySession session, final CyNetworkViewWriterManager networkViewWriterMgr, 
PropertyWriterManager propertyWriterMgr, CyFileFilter xgmmlFilter, CyFileFilter 
bookmarksFilter) {
+       public SessionWriterImpl(final OutputStream outputStream, 
+                                final CySession session, 
+                                final CyNetworkViewWriterManager 
networkViewWriterMgr, 
+                                final PropertyWriterManager propertyWriterMgr, 
+                                final CyFileFilter xgmmlFilter, 
+                                final CyFileFilter bookmarksFilter,
+                                final CyFileFilter cysessionFilter,
+                                final CyFileFilter propertiesFilter) {
                this.outputStream = outputStream;
                this.session = session;
                this.networkViewWriterMgr = networkViewWriterMgr;
                this.propertyWriterMgr = propertyWriterMgr;
                this.xgmmlFilter = xgmmlFilter;
                this.bookmarksFilter = bookmarksFilter;
+               this.cysessionFilter = cysessionFilter;
+               this.propertiesFilter = propertiesFilter;
 
                // For now, session ID is time and date
                final DateFormat df = new SimpleDateFormat("yyyy_MM_dd-HH_mm");
@@ -203,100 +214,33 @@
 
 
        /**
-        * Utility to replace invalid chars in the XGMML file name.<br>
-        *
-        * @param fileName
-        *            Original file name directly taken from the title.
-        * @return Modified file name without invalid chars.
-        *
-        */
-       private String getValidFileName(String fileName) {
-               
-               String newFileName = fileName;
-               Integer i = 0;
-               for(Character ch : INVALID_CHAR) 
-                       newFileName = newFileName.replace(ch.toString(), 
(i++).toString());
-               
-               return newFileName;
-       }
-
-       /**
-        * Initialize objects for the marshaller.
-        *
-        * @throws JAXBException
-        */
-       private void initObjectsForDataBinding() throws JAXBException {
-       /*
-               factory = new ObjectFactory();
-
-               cysession = factory.createCysession();
-               cysession.setSessionNote(sessionNote);
-
-               tree = factory.createNetworkTree();
-               sState = factory.createSessionState();
-               setDesktopStates();
-               cysession.setSessionState(sState);
-               cytoPanels = getCytoPanelStates();
-               netList = tree.getNetwork();
-               sState.setPlugins(plugins);
-               sState.setCytopanels(cytoPanels);
-               //sState.setServer(getServerState());
-               */
-       }
-
-       private void setDesktopStates() throws JAXBException {
-
-       /*      
-               DesktopSize dSize = factory.createDesktopSize();
-               NetworkFrames frames = factory.createNetworkFrames();
-               Component[] networkFrames = 
Cytoscape.getDesktop().getNetworkViewManager().getDesktopPane()
-                                                    .getComponents();
-
-               for (int i = 0; i < networkFrames.length; i++) {
-                       if(networkFrames[i] instanceof JInternalFrame) {
-                               JInternalFrame networkFrame = (JInternalFrame) 
networkFrames[i];
-                               NetworkFrame frame = 
factory.createNetworkFrame();
-                               frame.setFrameID(networkFrame.getTitle());
-                               
frame.setWidth(BigInteger.valueOf(networkFrame.getWidth()));
-                               
frame.setHeight(BigInteger.valueOf(networkFrame.getHeight()));
-                               
frame.setX(BigInteger.valueOf(networkFrame.getX()));
-                               
frame.setY(BigInteger.valueOf(networkFrame.getY()));
-                               frames.getNetworkFrame().add(frame);
-                       }
-               }
-
-               
dSize.setHeight(BigInteger.valueOf(Cytoscape.getDesktop().getSize().height));
-               
dSize.setWidth(BigInteger.valueOf(Cytoscape.getDesktop().getSize().width));
-
-               Desktop desktop = factory.createDesktop();
-               desktop.setDesktopSize(dSize);
-               desktop.setNetworkFrames(frames);
-               sState.setDesktop(desktop);
-               */
-       }
-
-       /**
         * Writes the vizmap.props file to the session zip.
         */
-       private void zipVizmapProps() throws IOException {
+       private void zipVizmapProps() throws Exception {
 
                zos.putNextEntry(new ZipEntry(sessionDir + VIZMAP_FILE) );
 
-               session.getVizmapProperties().store(zos, "VizMap Properties 
File");
+               CyWriter propertiesWriter = 
propertyWriterMgr.getWriter(session.getVizmapProperties(), propertiesFilter, 
zos );
+               propertiesWriter.run(taskMonitor);
 
                zos.closeEntry();
+
+               propertiesWriter = null;
        }
 
        /**
         * Writes the cytoscape.props file to the session zip.
         */
-       private void zipCytoscapeProps() throws IOException {
+       private void zipCytoscapeProps() throws Exception {
        
                zos.putNextEntry(new ZipEntry(sessionDir + CYPROP_FILE) );
 
-               session.getCytoscapeProperties().store(zos, "Cytoscape Property 
File");
+               CyWriter propertiesWriter = 
propertyWriterMgr.getWriter(session.getCytoscapeProperties(), propertiesFilter, 
zos );
+               propertiesWriter.run(taskMonitor);
 
                zos.closeEntry();
+
+               propertiesWriter = null;
        }
 
        /**
@@ -343,30 +287,14 @@
         * @throws Exception
         */
        private void zipCySession() throws Exception {
-               final JAXBContext jc = JAXBContext.newInstance(packageName, 
this.getClass().getClassLoader());
-
-               initObjectsForDataBinding();
-               cysession.setId(sessionDirName);
-
-               // Document version. Maybe used in the future.
-               cysession.setDocumentVersion(cysessionVersion);
-
-               getNetworkTree();
-               cysession.setNetworkTree(tree);
-
-               Marshaller m = jc.createMarshaller();
-               m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
-               // TODO wtf?
-               //m.setProperty("com.sun.xml.bind.namespacePrefixMapper",
-                //             new NamespacePrefixMapperForCysession());
-
                zos.putNextEntry(new ZipEntry(sessionDir + CYSESSION_FILE_NAME) 
);
 
-               m.marshal(cysession, zos);
+               CyWriter cysessionWriter = 
propertyWriterMgr.getWriter(session.getCysession(), cysessionFilter, zos );
+               cysessionWriter.run(taskMonitor);
 
                zos.closeEntry();
-               m = null;
-               cysession = null;
+
+               cysessionWriter = null;
        }
 
        /**
@@ -411,538 +339,21 @@
        }
 
        /**
-        * Get information about the current session status.
+        * Utility to replace invalid chars in the XGMML file name.<br>
         *
-        * This includes the following: 1. List of networks opened/created by 
the
-        * user. 2. Status of the network. 3. relationship between
-        * network-attributes Build GML file into xml
+        * @param fileName
+        *            Original file name directly taken from the title.
+        * @return Modified file name without invalid chars.
         *
-        * Extract current NetworkPanel state for saving.
         */
-       private void getNetworkTree() throws Exception {
-       /*
-               // Tree table storeed in the Network Panel
-               JTreeTable treeTable;
-
-               // Get network panel
-               CytoscapeDesktop cyDesktop = Cytoscape.getDesktop();
-               NetworkPanel netPanel = cyDesktop.getNetworkPanel();
-
-               // Get list of networks
-               treeTable = netPanel.getTreeTable();
-
-               Iterator itr = networks.iterator();
-
-               // Visit each node in the tree
-               while (itr.hasNext()) {
-                       CyNetwork network = (CyNetwork) itr.next();
-                       Long networkID = network.getSUID();
-                       String networkName = 
network.attrs().get("title",String.class);
-
-                       networkMap.put(networkName, networkID);
-               }
-
-               if (treeTable != null) {
-                       // Extract root node in the tree
-                       DefaultMutableTreeNode root = (DefaultMutableTreeNode) 
netPanel.getNetworkNode(TREE_ROOT);
-
-                       walkTree(root);
-               }
-               */
+       private String getValidFileName(String fileName) {
+               
+               String newFileName = fileName;
+               Integer i = 0;
+               for(Character ch : INVALID_CHAR) 
+                       newFileName = newFileName.replace(ch.toString(), 
(i++).toString());
+               
+               return newFileName;
        }
 
-       /**
-        * Visit all tree node and save the status in the model.
-        *
-        * @param node
-        * @throws JAXBException
-        */
-       private void walkTree(DefaultMutableTreeNode node) throws JAXBException 
{
-       /*
-               // Check number of children for this node.
-               int childCount = node.getChildCount();
-
-               // Create Network object for this node.
-               String fileName = node.getUserObject().toString() + XGMML_EXT;
-               Network curNode = factory.createNetwork();
-               curNode.setFilename(getValidFileName(fileName));
-               curNode.setId(node.getUserObject().toString());
-
-               CyNetwork curNet = Cytoscape.getNetwork( 
networkMap.get(node.getUserObject().toString()));
-               GraphView curView = viewMap.get(curNet.getSUID());
-
-               if (!node.getUserObject().toString().equals("Network Root")) {
-                       String visualStyleName = null;
-
-                       if (curView != null) {
-                               VisualStyle curVS = 
Cytoscape.getVisualMappingManager().getVisualStyleForView( curView );
-
-                               if (curVS != null) {
-                                       visualStyleName = curVS.getName();
-                               }
-                       }
-
-                       if (visualStyleName == null) {
-                               visualStyleName = DEFAULT_VS_NAME;
-                       }
-
-                       curNode.setVisualStyle(visualStyleName);
-               } else {
-                       curNode.setVisualStyle(DEFAULT_VS_NAME);
-               }
-
-               if 
(Cytoscape.getNetworkView(networkMap.get(node.getUserObject().toString())) == 
Cytoscape
-                                                                               
                          .getNullNetworkView()) {
-                       curNode.setViewAvailable(false);
-               } else {
-                       curNode.setViewAvailable(true);
-               }
-
-               Parent parent = null;
-               parent = factory.createParent();
-
-               if (node.getParent() == null) {
-                       parent.setId("NULL");
-                       curNode.setParent(parent);
-               } else {
-                       // Set current network as the parent of child networks.
-                       DefaultMutableTreeNode curParent = 
(DefaultMutableTreeNode) node.getParent();
-                       parent.setId(curParent.getUserObject().toString());
-                       curNode.setParent(parent);
-               }
-
-               List<Child> children = curNode.getChild();
-
-               for (int i = 0; i < childCount; i++) {
-                       // Exctract a network from the Network Panel.
-                       DefaultMutableTreeNode child = (DefaultMutableTreeNode) 
node.getChildAt(i);
-
-                       // Create Child object
-                       Child childNetwork = factory.createChild();
-                       childNetwork.setId(child.getUserObject().toString());
-                       children.add(childNetwork);
-
-                       if (child.isLeaf()) {
-                               // Reached to the leaf of network tree.
-                               // Need to create leaf node here.
-                               Network leaf = factory.createNetwork();
-                               String childFileName = 
child.getUserObject().toString() + XGMML_EXT;
-                               
leaf.setFilename(getValidFileName(childFileName));
-                               leaf.setId(child.getUserObject().toString());
-
-                               GraphView leafView = 
Cytoscape.getNetworkView(networkMap.get(child.getUserObject().toString()));
-
-                               String leafVisualStyleName = null;
-
-                               if (leafView != Cytoscape.getNullNetworkView()) 
{
-                                       VisualStyle leafVS = 
Cytoscape.getVisualMappingManager().getVisualStyleForView( leafView );
-
-                                       if (leafVS != null) {
-                                               leafVisualStyleName = 
leafVS.getName();
-                                       }
-                               }
-
-                               if (leafVisualStyleName == null) {
-                                       leafVisualStyleName = DEFAULT_VS_NAME;
-                               }
-
-                               leaf.setVisualStyle(leafVisualStyleName);
-
-                               Long targetID = 
networkMap.get(child.getUserObject().toString());
-
-                               Parent tempParent = factory.createParent();
-                               tempParent.setId(curNode.getId());
-                               leaf.setParent(tempParent);
-
-                               CyNetwork targetNetwork = 
Cytoscape.getNetwork(targetID);
-                               GraphView curNetworkView = 
Cytoscape.getNetworkView(targetID);
-
-                               if (curNetworkView == 
Cytoscape.getNullNetworkView()) {
-                                       leaf.setViewAvailable(false);
-                               } else {
-                                       leaf.setViewAvailable(true);
-                               }
-
-                               //
-                               // This is for Metanode. Will be used in the 
future...
-                               //
-                               // factory.createViewableNodes(); while 
(it.hasNext()) { String
-                               // viewableID = ((CyNode) it.next()) 
.getSUID(); Node
-                               // viewableNode = factory.createNode();
-                               // viewableNode.setId(viewableID);
-                               // vn.getNode().add(viewableNode); } 
leaf.setViewableNodes(vn);
-                                //
-
-                               //
-                               // Add selected & hidden nodes/edges foe leaf 
nodes.
-                                //
-                               SelectedNodes sn = (SelectedNodes) 
getSelectedObjects(NODE, targetNetwork);
-
-                               if (sn != null) {
-                                       leaf.setSelectedNodes(sn);
-                               }
-
-                               SelectedEdges se = (SelectedEdges) 
getSelectedObjects(EDGE, targetNetwork);
-
-                               if (se != null) {
-                                       leaf.setSelectedEdges(se);
-                               }
-
-                               HiddenNodes hn = (HiddenNodes) 
getHiddenObjects(NODE, curNetworkView);
-                               HiddenEdges he = (HiddenEdges) 
getHiddenObjects(EDGE, curNetworkView);
-
-                               if (hn != null) {
-                                       leaf.setHiddenNodes(hn);
-                               }
-
-                               if (he != null) {
-                                       leaf.setHiddenEdges(he);
-                               }
-
-                               netList.add(leaf);
-                       } else {
-                               walkTree(child);
-                       }
-               }
-
-               //
-               // Add hidden/selected nodes and edges
-               //
-               Long targetID = networkMap.get(node.getUserObject().toString());
-               CyNetwork targetNetwork = Cytoscape.getNetwork(targetID);
-
-               //
-               // This is for metanode. will be used in the future.
-               //
-               // if (curNode.getId() != "Network Root") { Iterator it =
-               // factory.createViewableNodes(); while (it.hasNext()) {
-               //
-               // String viewableID = ((CyNode) it.next()).getSUID(); Node
-               // viewableNode = factory.createNode(); 
viewableNode.setId(viewableID);
-               // vn.getNode().add(viewableNode); } 
curNode.setViewableNodes(vn); }
-                //
-               SelectedNodes sn = (SelectedNodes) getSelectedObjects(NODE, 
targetNetwork);
-
-               if (sn != null) {
-                       curNode.setSelectedNodes(sn);
-               }
-
-               SelectedEdges se = (SelectedEdges) getSelectedObjects(EDGE, 
targetNetwork);
-
-               if (se != null) {
-                       curNode.setSelectedEdges(se);
-               }
-
-               // Extract hidden nodes and edges
-               GraphView curNetworkView = Cytoscape.getNetworkView(targetID);
-
-               if (curNetworkView != Cytoscape.getNullNetworkView()) {
-                       HiddenNodes hn = (HiddenNodes) getHiddenObjects(NODE, 
curNetworkView);
-                       HiddenEdges he = (HiddenEdges) getHiddenObjects(EDGE, 
curNetworkView);
-
-                       if (hn != null) {
-                               curNode.setHiddenNodes(hn);
-                       }
-
-                       if (he != null) {
-                               curNode.setHiddenEdges(he);
-                       }
-               }
-
-               // Add current network to the list.
-               netList.add(curNode);
-               */
-       }
-
-       /**
-        *
-        * @param type
-        *            Type of the object (node or edge)
-        * @param view
-        *            Current network view.
-        * @return JAXB object (HiddenNodes or HiddenEdges)
-        * @throws JAXBException
-        */
-       private Object getHiddenObjects(int type/*, GraphView view*/) throws 
JAXBException {
-       /*
-               // List-up all hidden nodes
-               if (type == NODE) {
-                       HiddenNodes hn = factory.createHiddenNodes();
-                       List<Node> hNodeList = hn.getNode();
-
-                       CyNode targetNode = null;
-                       String curNodeName = null;
-
-                       for (Iterator i = view.getNodeViewsIterator(); 
i.hasNext();) {
-                               NodeView nview = (NodeView) i.next();
-
-                               // Check if the node is hidden or not.
-                               // If it's hidden, store in the session file.
-                               if (view.showGraphObject(nview)) {
-                                       targetNode = (CyNode) nview.getNode();
-                                       curNodeName = 
Integer.toString(targetNode.getIndex());
-
-                                       Node tempNode = factory.createNode();
-                                       tempNode.setId(curNodeName);
-
-                                       hNodeList.add(tempNode);
-
-                                       // Keep them hidden...
-                                       view.hideGraphObject(nview);
-                               }
-                       }
-
-                       if (hn.getNode().size() != 0) {
-                               return hn;
-                       } else {
-                               return null;
-                       }
-               } else if (type == EDGE) {
-                       HiddenEdges he = factory.createHiddenEdges();
-                       List<Edge> hEdgeList = he.getEdge();
-
-                       CyEdge targetEdge = null;
-                       String curEdgeName = null;
-
-                       for (Iterator i = view.getEdgeViewsIterator(); 
i.hasNext();) {
-                               EdgeView eview = (EdgeView) i.next();
-
-                               // Check if the edge is hidden or not.
-                               // If it's hidden, store in the session file.
-                               if (view.showGraphObject(eview)) {
-                                       targetEdge = (CyEdge) eview.getEdge();
-                                       curEdgeName = 
Integer.toString(targetEdge.getIndex());
-
-                                       Edge tempEdge = factory.createEdge();
-                                       tempEdge.setId(curEdgeName);
-                                       
tempEdge.setSource(Integer.toString(targetEdge.getSource().getIndex()));
-                                       
tempEdge.setTarget(Integer.toString(targetEdge.getTarget().getIndex()));
-                                       
tempEdge.setInteraction(targetEdge.attrs().get(Semantics.INTERACTION, 
String.class));
-                                       hEdgeList.add(tempEdge);
-                                       // Keep them hidden...
-                                       view.hideGraphObject(eview);
-                               }
-                       }
-
-                       if (he.getEdge().size() != 0) {
-                               return he;
-                       } else {
-                               return null;
-                       }
-               }
-
-               */
-               return null;
-       }
-
-       /**
-        * List all selected nodes and edges in the session file.
-        *
-        * @param type
-        *            Tyoe if object (node or edge)
-        * @param curNet
-        *            Current network
-        * @return
-        * @throws JAXBException
-        */
-       private Object getSelectedObjects(int type, CyNetwork curNet) throws 
JAXBException {
-       /*
-               if (type == NODE) {
-
-                       List<CyNode> selectedNodes = 
CyDataTableUtil.getNodesInState(curNet,"selected",true);
-
-                       if ( selectedNodes.size() <= 0 )
-                               return null; 
-
-                       SelectedNodes sn = factory.createSelectedNodes();
-                       List<Node> sNodeList = sn.getNode();
-
-                       for ( CyNode targetNode : selectedNodes ) {
-                               String curNodeName = 
Integer.toString(targetNode.getIndex());
-                               Node tempNode = factory.createNode();
-                               tempNode.setId(curNodeName);
-
-                               sNodeList.add(tempNode);
-                       }
-                       return sn;
-
-               } else if (type == EDGE) {
-
-                       List<CyEdge> selectedEdges = 
CyDataTableUtil.getEdgesInState(curNet,"selected",true);
-
-                       if (selectedEdges.size() <= 0) 
-                               return null;
-
-                       SelectedEdges se = factory.createSelectedEdges();
-                       List<Edge> sEdgeList = se.getEdge();
-
-                       for ( CyEdge targetEdge : selectedEdges ) {
-                               String curEdgeName = 
Integer.toString(targetEdge.getIndex());
-                               Edge tempEdge = factory.createEdge();
-                               tempEdge.setId(curEdgeName);
-                               
tempEdge.setSource(Integer.toString(targetEdge.getSource().getIndex()));
-                               
tempEdge.setTarget(Integer.toString(targetEdge.getTarget().getIndex()));
-                               
tempEdge.setInteraction(targetEdge.attrs().get(Semantics.INTERACTION,String.class));
-                               sEdgeList.add(tempEdge);
-                       }
-
-                       return se;
-               }
-
-               */
-               return null;
-       }
-
-       /**
-        * Extract states of the 3 Cytopanels.
-        *
-        * @return
-        * @throws JAXBException
-        *
-        * Note: We will store the states of plugins near future. The location 
of
-        * those states will be stored here.
-        */
-       private Cytopanels getCytoPanelStates() throws JAXBException {
-       /*
-               Cytopanels cytoPanels = factory.createCytopanels();
-               List<Cytopanel> cytoPanelList = cytoPanels.getCytopanel();
-
-               String[] cytopanelStates = new String[CYTOPANEL_COUNT + 1];
-               int[] selectedPanels = new int[CYTOPANEL_COUNT + 1];
-
-               // Extract states of 3 panels.
-               cytopanelStates[1] = 
Cytoscape.getDesktop().getCytoPanel(SwingConstants.WEST).getState()
-                                             .toString();
-               selectedPanels[1] = 
Cytoscape.getDesktop().getCytoPanel(SwingConstants.WEST)
-                                            .getSelectedIndex();
-
-               cytopanelStates[2] = 
Cytoscape.getDesktop().getCytoPanel(SwingConstants.SOUTH).getState()
-                                             .toString();
-               selectedPanels[2] = 
Cytoscape.getDesktop().getCytoPanel(SwingConstants.SOUTH)
-                                            .getSelectedIndex();
-
-               cytopanelStates[3] = 
Cytoscape.getDesktop().getCytoPanel(SwingConstants.EAST).getState()
-                                             .toString();
-               selectedPanels[3] = 
Cytoscape.getDesktop().getCytoPanel(SwingConstants.EAST)
-                                            .getSelectedIndex();
-
-               for (int i = 1; i < (CYTOPANEL_COUNT + 1); i++) {
-                       Panels internalPanels = factory.createPanels();
-                       List<Panel> iPanelList = internalPanels.getPanel();
-                       Panel iPanel = factory.createPanel();
-                       iPanel.setId("test");
-
-                       iPanelList.add(iPanel);
-
-                       Cytopanel curCp = factory.createCytopanel();
-                       curCp.setId("CytoPanel" + i);
-                       curCp.setPanelState(cytopanelStates[i]);
-                       
curCp.setSelectedPanel(Integer.toString(selectedPanels[i]));
-                       curCp.setPanels(internalPanels);
-                       cytoPanelList.add(curCp);
-               }
-
-               return cytoPanels;
-               */
-               return null;
-       }
-
-       /**
-        * Set session note.<br>
-        * Session note can be anything, it is just like a memo pad for the 
session.
-        * NOTE: session note should be set before calling writeSessionToDisk().
-        *
-        * @param note
-        *            Session note string.
-        * @uml.property name="sessionNote"
-        */
-       public void setSessionNote(String note) {
-               this.sessionNote = note;
-       }
-
-       // TODO
-       /**
-        * Check loaded ontologies and save those states in cysession.xml.
-        *
-        * @return Server object
-       private Server getServerState() {
-               Server server = factory.createServer();
-               OntologyServer os = factory.createOntologyServer();
-
-               Set<String> ontoNames = 
Cytoscape.getOntologyServer().getOntologyNames();
-               Map<String, URL> sources = 
Cytoscape.getOntologyServer().getOntologySources();
-
-               for (String name : ontoNames) {
-                       Ontology onto = factory.createOntology();
-                       onto.setName(name);
-                       onto.setHref(sources.get(name).toString());
-                       os.getOntology().add(onto);
-               }
-
-               server.setOntologyServer(os);
-
-               return server;
-       }
-        */
 }
-
-
-class NamespacePrefixMapperForCysession extends NamespacePrefixMapper {
-       /**
-        * Returns a preferred prefix for the given namespace URI.
-        *
-        * This method is intended to be overrided by a derived class.
-        *
-        * @param namespaceUri
-        *            The namespace URI for which the prefix needs to be found.
-        *            Never be null. "" is used to denote the default namespace.
-        * @param suggestion
-        *            When the content tree has a suggestion for the prefix to 
the
-        *            given namespaceUri, that suggestion is passed as a 
parameter.
-        *            Typicall this value comes from the QName.getPrefix to 
show the
-        *            preference of the content tree. This parameter may be 
null,
-        *            and this parameter may represent an already occupied 
prefix.
-        * @param requirePrefix
-        *            If this method is expected to return non-empty prefix. 
When
-        *            this flag is true, it means that the given namespace URI
-        *            cannot be set as the default namespace.
-        *
-        * @return null if there's no prefered prefix for the namespace URI. In 
this
-        *         case, the system will generate a prefix for you.
-        *
-        * Otherwise the system will try to use the returned prefix, but 
generally
-        * there's no guarantee if the prefix will be actually used or not.
-        *
-        * return "" to map this namespace URI to the default namespace. Again,
-        * there's no guarantee that this preference will be honored.
-        *
-        * If this method returns "" when requirePrefix=true, the return value 
will
-        * be ignored and the system will generate one.
-        */
-       public String getPreferredPrefix(final String namespaceUri, final 
String suggestion,
-                                        boolean requirePrefix) {
-               // I want this namespace to be mapped to "xsi"
-               if 
("http://www.w3.org/2001/XMLSchema-instance".equals(namespaceUri))
-                       return "xsi";
-
-               // Xlink
-               if ("http://www.w3.org/1999/xlink".equals(namespaceUri)) {
-                       return "xlink";
-               }
-
-               // otherwise I don't care. Just use the default suggestion, 
whatever it
-               // may be.
-               return suggestion;
-       }
-
-       /**
-        *  DOCUMENT ME!
-        *
-        * @return  DOCUMENT ME!
-        */
-       public String[] getPreDeclaredNamespaceUris() {
-               return new String[] {
-                          "http://www.w3.org/2001/XMLSchema-instance";, 
"http://www.w3.org/1999/xlink";,
-                      };
-       }
-}

Modified: 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
===================================================================
--- 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml  
    2010-10-06 21:21:08 UTC (rev 22175)
+++ 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml  
    2010-10-07 00:35:17 UTC (rev 22176)
@@ -193,6 +193,14 @@
                               ref="cySessionReaderManager" />
        </osgi:set>
 
+       <osgi:set id="propertyReaderFactories" 
+                 interface="org.cytoscape.io.read.InputStreamTaskFactory"
+                 cardinality="0..N">
+               <osgi:listener bind-method="addInputStreamTaskFactory"
+                              unbind-method="removeInputStreamTaskFactory" 
+                              ref="cyPropertyReaderManager" />
+       </osgi:set>
+
        <osgi:set id="viewWriterFactories" 
                  interface="org.cytoscape.io.write.ViewWriterFactory"
                  cardinality="0..N">

Modified: 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
--- core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml   
2010-10-06 21:21:08 UTC (rev 22175)
+++ core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml   
2010-10-07 00:35:17 UTC (rev 22176)
@@ -194,7 +194,7 @@
                </constructor-arg>
        </bean>
 
-       <bean id="propertiesFilter" 
class="org.cytoscape.io.internal.CyFileFilterImpl">
+       <bean id="propertiesFilter" 
class="org.cytoscape.io.internal.read.properties.PropertiesFileFilter">
                <constructor-arg index="0">
                        <set>
                                <value>props</value>
@@ -310,6 +310,7 @@
              
class="org.cytoscape.io.internal.read.session.SessionReaderFactoryImpl">
                <constructor-arg ref="cysFilter" />
                <constructor-arg ref="cyNetworkViewReaderManager" />
+               <constructor-arg ref="cyPropertyReaderManager" />
        </bean>
 
        <bean id="cysessionReaderFactory" 
@@ -332,6 +333,8 @@
                <constructor-arg ref="cysFilter" />
                <constructor-arg ref="xgmmlFilter" />
                <constructor-arg ref="bookmarksFilter" />
+               <constructor-arg ref="cysessionFilter" />
+               <constructor-arg ref="propertiesFilter" />
                <constructor-arg ref="networkViewWriterManager" />
                <constructor-arg ref="propertyWriterManager" />
        </bean>

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