Author: jm
Date: 2010-09-22 15:33:00 -0700 (Wed, 22 Sep 2010)
New Revision: 22019

Added:
   
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/utils/SupportedFileTypesManager.java
Modified:
   core3/work-swing-impl/trunk/pom.xml
   
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/FileHandler.java
   
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/GUITunableHandlerFactory.java
   
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
   
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
Log:
Changed FileHandler so it builds up a list of recognized file extensions from 
all loaded InputStreamTaskFactories when reading/writing a network

Modified: core3/work-swing-impl/trunk/pom.xml
===================================================================
--- core3/work-swing-impl/trunk/pom.xml 2010-09-22 22:17:02 UTC (rev 22018)
+++ core3/work-swing-impl/trunk/pom.xml 2010-09-22 22:33:00 UTC (rev 22019)
@@ -185,6 +185,11 @@
                        <version>1.0-SNAPSHOT</version>
                </dependency>
                <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>io-api</artifactId>
+                       <version>1.0-SNAPSHOT</version>
+               </dependency>
+               <dependency>
                        <groupId>org.ops4j.pax.logging</groupId>
                        <artifactId>pax-logging-api</artifactId>
                        <version>1.5.2</version>

Modified: 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/FileHandler.java
===================================================================
--- 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/FileHandler.java
     2010-09-22 22:17:02 UTC (rev 22018)
+++ 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/FileHandler.java
     2010-09-22 22:33:00 UTC (rev 22019)
@@ -10,6 +10,7 @@
 import java.io.File;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.List;
 
 import javax.swing.GroupLayout;
 import javax.swing.ImageIcon;
@@ -21,10 +22,12 @@
 import javax.swing.JTextField;
 import javax.swing.LayoutStyle;
 
+import org.cytoscape.io.DataCategory;
 import org.cytoscape.work.Tunable;
 import org.cytoscape.work.swing.AbstractGUITunableHandler;
 import org.cytoscape.work.Tunable.Param;
 import org.cytoscape.work.internal.tunables.utils.FileChooserFilter;
+import org.cytoscape.work.internal.tunables.utils.SupportedFileTypesManager;
 
 
 /**
@@ -43,6 +46,7 @@
        private GroupLayout layout;
        private enum Type {NETWORK,SESSION,ATTRIBUTES,DEFAULT};
        private Type type;
+       private SupportedFileTypesManager fileTypesManager;
 
        /**
         * Constructs the <code>GUIHandler</code> for the <code>File</code> type
@@ -54,14 +58,17 @@
         * @param f field that has been annotated
         * @param o object contained in <code>f</code>
         * @param t tunable associated to <code>f</code>
+        * @param fileTypesManager 
         */
-       protected FileHandler(Field f, Object o, Tunable t) {
+       protected FileHandler(Field f, Object o, Tunable t, final 
SupportedFileTypesManager fileTypesManager) {
                super(f, o, t);
+               this.fileTypesManager = fileTypesManager;
                init();
        }
 
-       protected FileHandler(final Method getter, final Method setter, final 
Object instance, final Tunable tunable) {
+       protected FileHandler(final Method getter, final Method setter, final 
Object instance, final Tunable tunable, final SupportedFileTypesManager 
fileTypesManager) {
                super(getter, setter, instance, tunable);
+               this.fileTypesManager = fileTypesManager;
                init();
        }
 
@@ -131,21 +138,10 @@
                        fileTextField.setText("Please select a network 
file...");
                        titleLabel.setText("import network file");
 
-                       //set filters for filechooser
-                       String[] biopax = {".xml",".rdf",".owl"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("BioPAX files",biopax));
-                       String[] xgmml ={".xml",".xgmml"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("XGMML files",xgmml));
-                       String[] psi ={".xml"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("PSI-MI",psi));
-                       String[] sif={".sif"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("SIF files",sif));
-                       String[] gml={".gml"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("GML files",gml));
-                       String[] sbml={".xml",".sbml"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("SBML files",sbml));
-                       String[] allnetworks = 
{".xml",".rdf",".owl",".xgmml",".sif",".sbml"};
-                       fileChooser.addChoosableFileFilter(new 
FileChooserFilter("All network files (*.xml, *.rdf, *.owl, *.xgmml, *.sif, 
*.sbml)",allnetworks));
+                       List<FileChooserFilter> filters = 
fileTypesManager.getSupportedFileTypes(DataCategory.NETWORK);
+                       for (FileChooserFilter filter : filters) {
+                               fileChooser.addChoosableFileFilter(filter);
+                       }
                        break;
                }
                case SESSION: {

Modified: 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/GUITunableHandlerFactory.java
===================================================================
--- 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/GUITunableHandlerFactory.java
        2010-09-22 22:17:02 UTC (rev 22018)
+++ 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/GUITunableHandlerFactory.java
        2010-09-22 22:33:00 UTC (rev 22019)
@@ -13,6 +13,7 @@
 
 import org.cytoscape.work.HandlerFactory;
 import org.cytoscape.work.Tunable;
+import org.cytoscape.work.internal.tunables.utils.SupportedFileTypesManager;
 import org.cytoscape.work.swing.GUITunableHandler;
 import org.cytoscape.work.util.BoundedDouble;
 import org.cytoscape.work.util.BoundedFloat;
@@ -31,15 +32,17 @@
 public class GUITunableHandlerFactory implements 
HandlerFactory<GUITunableHandler> {
        private Bookmarks bookmarks;
        private BookmarksUtil bkUtil;
+       private SupportedFileTypesManager fileTypesManager;
 
        /**
         * creates a new GUITunableHandlerFactory object
         * @param book  informations and properties of the 
<code>Bookmarks</code> registered
         * @param bkUtil object that provides tools to manage the 
<code>Bookmarks</code>
         */
-       public GUITunableHandlerFactory(CyProperty<Bookmarks> book, 
BookmarksUtil bkUtil) {
+       public GUITunableHandlerFactory(CyProperty<Bookmarks> book, 
BookmarksUtil bkUtil, SupportedFileTypesManager fileTypesManager) {
                this.bookmarks = book.getProperties();
                this.bkUtil = bkUtil;
+               this.fileTypesManager = fileTypesManager;
        }
 
        /**
@@ -79,7 +82,7 @@
                if (type == ListMultipleSelection.class)
                        return new ListMultipleHandler<String>(getter, setter, 
instance, tunable);
                if (type == File.class)
-                       return new FileHandler(getter, setter, instance, 
tunable);
+                       return new FileHandler(getter, setter, instance, 
tunable, fileTypesManager);
                if (type == URL.class)
                        return new URLHandler(getter, setter, instance, 
tunable, bookmarks, bkUtil);
                if (type == InputStream.class)
@@ -136,7 +139,7 @@
                if (type == ListMultipleSelection.class)
                        return new ListMultipleHandler<String>(field, instance, 
tunable);
                if (type == File.class)
-                       return new FileHandler(field, instance, tunable);
+                       return new FileHandler(field, instance, tunable, 
fileTypesManager);
                if (type == URL.class)
                        return new URLHandler(field, instance, tunable, 
bookmarks, bkUtil);
                if (type == InputStream.class)

Added: 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/utils/SupportedFileTypesManager.java
===================================================================
--- 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/utils/SupportedFileTypesManager.java
                         (rev 0)
+++ 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/utils/SupportedFileTypesManager.java
 2010-09-22 22:33:00 UTC (rev 22019)
@@ -0,0 +1,71 @@
+package org.cytoscape.work.internal.tunables.utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.cytoscape.io.CyFileFilter;
+import org.cytoscape.io.DataCategory;
+import org.cytoscape.io.read.InputStreamTaskFactory;
+
+/**
+ * Provides a list of available file types by consulting all registered
+ * <code>InputStreamTaskFactory</code> instances.
+ */
+public class SupportedFileTypesManager {
+       Set<InputStreamTaskFactory> factories;
+       
+       public SupportedFileTypesManager() {
+               factories = new HashSet<InputStreamTaskFactory>();
+       }
+       
+       public void addInputStreamTaskFactory(InputStreamTaskFactory factory, 
Map<?,?> properties) {
+               factories.add(factory);
+       }
+       
+       public void removeInputStreamTaskFactory(InputStreamTaskFactory 
factory, Map<?,?> properties) {
+               factories.remove(factory);
+       }
+       
+       public List<FileChooserFilter> getSupportedFileTypes(DataCategory 
category) {
+               List<FileChooserFilter> types = new 
ArrayList<FileChooserFilter>();
+               
+               Set<String> allExtensions = new HashSet<String>();
+               for (InputStreamTaskFactory factory : factories) {
+                       CyFileFilter filter = factory.getCyFileFilter();
+                       if (filter.getDataCategory() != category) {
+                               continue;
+                       }
+                       
+                       String description = filter.getDescription();
+                       Set<String> filterExtensions = filter.getExtensions();
+                       String[] extensions = new 
String[filterExtensions.size()];
+                       int index = 0;
+                       for (String extension : filterExtensions) {
+                               allExtensions.add(extension);
+                               extensions[index] = extension;
+                               index++;
+                       }
+                       types.add(new FileChooserFilter(description, 
extensions));
+               }
+               
+               if (types.size() == 0) {
+                       return types;
+               }
+               
+               Collections.sort(types, new Comparator<FileChooserFilter>() {
+                       @Override
+                       public int compare(FileChooserFilter o1, 
FileChooserFilter o2) {
+                               return 
o1.getDescription().compareTo(o2.getDescription());
+                       }
+               });
+               
+               String description = String.format("All %1$s files", 
category.toString().toLowerCase());
+               types.add(new FileChooserFilter(description, new 
ArrayList<String>(allExtensions).toArray(new String[allExtensions.size()])));
+               return types;
+       }
+}


Property changes on: 
core3/work-swing-impl/trunk/src/main/java/org/cytoscape/work/internal/tunables/utils/SupportedFileTypesManager.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: 
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
===================================================================
--- 
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
      2010-09-22 22:17:02 UTC (rev 22018)
+++ 
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
      2010-09-22 22:33:00 UTC (rev 22019)
@@ -41,4 +41,13 @@
                filter="(cyPropertyName=bookmarks)" />
        <osgi:reference id="bookmarksUtilServiceRef"
                interface="org.cytoscape.property.bookmark.BookmarksUtil" />
+       
+       <osgi:set id="supportedFileTypes" 
+           interface="org.cytoscape.io.read.InputStreamTaskFactory"
+           cardinality="0..N">
+               <osgi:listener bind-method="addInputStreamTaskFactory"
+                              unbind-method="removeInputStreamTaskFactory" 
+                              ref="supportedFileTypesManager" />
+       </osgi:set>
+       
 </beans>

Modified: 
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
--- 
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
   2010-09-22 22:17:02 UTC (rev 22018)
+++ 
core3/work-swing-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
   2010-09-22 22:33:00 UTC (rev 22019)
@@ -27,6 +27,8 @@
        <bean id="guiHandlerFactory" 
class="org.cytoscape.work.internal.tunables.GUITunableHandlerFactory">
                <constructor-arg ref="bookmarkServiceRef" />
                <constructor-arg ref="bookmarksUtilServiceRef" />
+               <constructor-arg ref="supportedFileTypesManager" />
        </bean>
 
+       <bean id="supportedFileTypesManager" 
class="org.cytoscape.work.internal.tunables.utils.SupportedFileTypesManager" />
 </beans>

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