Author: jm
Date: 2010-09-22 12:11:05 -0700 (Wed, 22 Sep 2010)
New Revision: 21973

Modified:
   
core3/psi-mi-impl/trunk/src/main/java/org/cytoscape/psi_mi/internal/plugin/PsiMiCyFileFilter.java
Log:
Fixed PsiMiCyFileFilter so it only accepts PSI-MI XML files.  Changed extension 
back to ".xml".

Modified: 
core3/psi-mi-impl/trunk/src/main/java/org/cytoscape/psi_mi/internal/plugin/PsiMiCyFileFilter.java
===================================================================
--- 
core3/psi-mi-impl/trunk/src/main/java/org/cytoscape/psi_mi/internal/plugin/PsiMiCyFileFilter.java
   2010-09-22 19:09:44 UTC (rev 21972)
+++ 
core3/psi-mi-impl/trunk/src/main/java/org/cytoscape/psi_mi/internal/plugin/PsiMiCyFileFilter.java
   2010-09-22 19:11:05 UTC (rev 21973)
@@ -1,21 +1,30 @@
 package org.cytoscape.psi_mi.internal.plugin;
 
+import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.URI;
 import java.util.HashSet;
 import java.util.Set;
 
 import org.cytoscape.io.CyFileFilter;
 import org.cytoscape.io.DataCategory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class PsiMiCyFileFilter implements CyFileFilter {
+       private static final String PSI_MI_XML_NAMESPACE = "net:sf:psidev:mi";
+
+       private static final int DEFAULT_LINES_TO_CHECK = 20;
+       
        private Set<String> extensions;
        private Set<String> contentTypes;
        private String description;
 
        private PsiMiCyFileFilter(String description) {
                extensions = new HashSet<String>();
-               extensions.add("psi");
+               extensions.add("xml");
                
                contentTypes = new HashSet<String>();
                contentTypes.add("text/psi-mi");
@@ -26,12 +35,39 @@
        
        @Override
        public boolean accept(URI uri, DataCategory category) {
-               return category.equals(DataCategory.NETWORK);
+               try {
+                       return accept(uri.toURL().openStream(), category);
+               } catch (IOException e) {
+                       Logger logger = LoggerFactory.getLogger(getClass());
+                       logger.error("Error while checking header", e);
+                       return false;
+               }
        }
 
+       private boolean checkHeader(InputStream stream) throws IOException {
+               BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream));
+               int linesToCheck = DEFAULT_LINES_TO_CHECK;
+               while (linesToCheck > 0) {
+                       if (reader.readLine().contains(PSI_MI_XML_NAMESPACE)) {
+                               return true;
+                       }
+                       linesToCheck--;
+               }
+               return false;
+       }
+
        @Override
        public boolean accept(InputStream stream, DataCategory category) {
-               return category.equals(DataCategory.NETWORK);
+               if (!category.equals(DataCategory.NETWORK)) {
+                       return false;
+               }
+               try {
+                       return checkHeader(stream);
+               } catch (IOException e) {
+                       Logger logger = LoggerFactory.getLogger(getClass());
+                       logger.error("Error while checking header", e);
+                       return false;
+               }
        }
 
        @Override

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