Author: jm
Date: 2012-04-02 13:14:27 -0700 (Mon, 02 Apr 2012)
New Revision: 28714

Added:
   
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
   
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
Modified:
   core3/impl/trunk/biopax-impl/pom.xml
   
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
   
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
   
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
   core3/impl/trunk/cpath2-impl/pom.xml
   
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
Log:
Fixes #829: Re-added StaxHack to temporarily set the thread context ClassLoader 
when using SimpleIOHandler so it can locate a StAX implementation.  Also added 
dependency on WoodStox as StAX provider to ensure proper OSGi metadata gets 
added to biopax-impl and cpath2-impl bundles.


Modified: core3/impl/trunk/biopax-impl/pom.xml
===================================================================
--- core3/impl/trunk/biopax-impl/pom.xml        2012-04-02 19:04:06 UTC (rev 
28713)
+++ core3/impl/trunk/biopax-impl/pom.xml        2012-04-02 20:14:27 UTC (rev 
28714)
@@ -62,7 +62,12 @@
                <groupId>org.biopax.paxtools</groupId>
                <artifactId>biopax-converter</artifactId>
                <version>${paxtools.version}</version>
-        </dependency>        
+        </dependency>
+        <dependency>
+            <groupId>cytoscape-temp</groupId>
+            <artifactId>woodstox-core-lgpl</artifactId>
+            <version>4.0.5</version>
+        </dependency>
                <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>

Modified: 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
===================================================================
--- 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
  2012-04-02 19:04:06 UTC (rev 28713)
+++ 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/BioPaxMapper.java
  2012-04-02 20:14:27 UTC (rev 28714)
@@ -197,7 +197,7 @@
                // (converted to L3, processed) RDF/XML data
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                try {
-                       new SimpleIOHandler().convertToOWL(model, baos);
+                       convertToOWL(model, baos);
                        AttributeUtil.set(network, network, 
CyNetwork.HIDDEN_ATTRS, 
                                        BioPaxUtil.BIOPAX_DATA, 
baos.toString("UTF-8"), String.class);
                } catch (Exception e) {
@@ -207,6 +207,14 @@
                return network;
        }
 
+       private void convertToOWL(final Model model, final 
ByteArrayOutputStream stream) {
+               StaxHack.runWithHack(new Runnable() {
+                       @Override
+                       public void run() {
+                               new SimpleIOHandler().convertToOWL(model, 
stream);
+                       }
+               });
+       }
        
        private void createMemberEdges(CyNetwork network) {
                // for each PE,

Modified: 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
   2012-04-02 19:04:06 UTC (rev 28713)
+++ 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/CyActivator.java
   2012-04-02 20:14:27 UTC (rev 28714)
@@ -80,14 +80,14 @@
                
                
                //quick sanity test
-               try {
-                       Model model = (new SimpleIOHandler())
-                               
.convertFromOWL(this.getClass().getResourceAsStream("biopax3-short-metabolic-pathway.owl"));
-                       System.out.println("Started biopax-impl!");
-               } catch (Throwable t) {
-                       System.out.println("Failed test biopax-impl.");
-                       t.printStackTrace();
-               }
+//             try {
+//                     Model model = (new SimpleIOHandler())
+//                             
.convertFromOWL(this.getClass().getResourceAsStream("biopax3-short-metabolic-pathway.owl"));
+//                     System.out.println("Started biopax-impl!");
+//             } catch (Throwable t) {
+//                     System.out.println("Failed test biopax-impl.");
+//                     t.printStackTrace();
+//             }
        }
 }
 

Added: 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
===================================================================
--- 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
                              (rev 0)
+++ 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/StaxHack.java
      2012-04-02 20:14:27 UTC (rev 28714)
@@ -0,0 +1,16 @@
+package org.cytoscape.biopax.internal;
+
+import com.ctc.wstx.stax.WstxInputFactory;
+
+public class StaxHack {
+       public static final void runWithHack(Runnable runnable) {
+               Thread thread = Thread.currentThread();
+               ClassLoader loader = thread.getContextClassLoader();
+               try {
+                       
thread.setContextClassLoader(WstxInputFactory.class.getClassLoader());
+                       runnable.run();
+               } finally {
+                       thread.setContextClassLoader(loader);
+               }
+       }
+}

Modified: 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
===================================================================
--- 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
       2012-04-02 19:04:06 UTC (rev 28713)
+++ 
core3/impl/trunk/biopax-impl/src/main/java/org/cytoscape/biopax/internal/util/BioPaxUtil.java
       2012-04-02 20:14:27 UTC (rev 28714)
@@ -58,6 +58,7 @@
 import org.biopax.paxtools.model.level3.Xref;
 import org.biopax.paxtools.util.ClassFilterSet;
 import org.cytoscape.biopax.internal.BioPaxMapper;
+import org.cytoscape.biopax.internal.StaxHack;
 import org.cytoscape.model.CyNetwork;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -128,20 +129,30 @@
         * @throws FileNotFoundException 
         */
        public static Model read(final InputStream in) throws 
FileNotFoundException {
-               Model model = null;
-               try {
-                       SimpleIOHandler handler = new SimpleIOHandler();
-                       handler.mergeDuplicates(true); // a workaround 
(illegal) BioPAX data having duplicated rdf:ID...
-                       model =  handler.convertFromOWL(in);    
-                       // immediately convert to BioPAX Level3 model
-                       if(model != null && 
BioPAXLevel.L2.equals(model.getLevel())) {
-                               model = new OneTwoThree().filter(model);
-                       }
-               } catch (Throwable e) {
-                       log.warn("Import failed: " + e);
+               Model model = convertFromOwl(in);
+               // immediately convert to BioPAX Level3 model
+               if(model != null && BioPAXLevel.L2.equals(model.getLevel())) {
+                       model = new OneTwoThree().filter(model);
                }
                return model;
        }
+       
+       private static Model convertFromOwl(final InputStream stream) {
+               final Model[] model = new Model[1];
+               final SimpleIOHandler handler = new SimpleIOHandler();
+               handler.mergeDuplicates(true); // a workaround (illegal) BioPAX 
data having duplicated rdf:ID...
+               StaxHack.runWithHack(new Runnable() {
+                       @Override
+                       public void run() {
+                               try {
+                                       model[0] =  
handler.convertFromOWL(stream);     
+                               } catch (Throwable e) {
+                                       log.warn("Import failed: " + e);
+                               }
+                       }
+               });
+               return model[0];
+       }
 
        
        /**
@@ -555,14 +566,19 @@
        }
        
        
-       public static String toOwl(BioPAXElement bpe) {
-               StringWriter writer = new StringWriter();
-               try {
-                       SimpleIOHandler simpleExporter = new 
SimpleIOHandler(BioPAXLevel.L3);
-                       simpleExporter.writeObject(writer, bpe);
-               } catch (Exception e) {
-                       log.error("Failed printing '" + bpe.getRDFId() + "' to 
OWL", e);
-               }
+       public static String toOwl(final BioPAXElement bpe) {
+               final StringWriter writer = new StringWriter();
+               final SimpleIOHandler simpleExporter = new 
SimpleIOHandler(BioPAXLevel.L3);
+               StaxHack.runWithHack(new Runnable() {
+                       @Override
+                       public void run() {
+                               try {
+                                       simpleExporter.writeObject(writer, bpe);
+                               } catch (Exception e) {
+                                       log.error("Failed printing '" + 
bpe.getRDFId() + "' to OWL", e);
+                               }
+                       }
+               });
                return writer.toString();
        }
        

Modified: core3/impl/trunk/cpath2-impl/pom.xml
===================================================================
--- core3/impl/trunk/cpath2-impl/pom.xml        2012-04-02 19:04:06 UTC (rev 
28713)
+++ core3/impl/trunk/cpath2-impl/pom.xml        2012-04-02 20:14:27 UTC (rev 
28714)
@@ -96,6 +96,11 @@
                <artifactId>biopax-converter</artifactId>
                <version>${paxtools.version}</version>
         </dependency>
+        <dependency>
+            <groupId>cytoscape-temp</groupId>
+            <artifactId>woodstox-core-lgpl</artifactId>
+            <version>4.0.5</version>
+        </dependency>
        </dependencies>
        
        <build>

Added: 
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
===================================================================
--- 
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
                              (rev 0)
+++ 
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/StaxHack.java
      2012-04-02 20:14:27 UTC (rev 28714)
@@ -0,0 +1,16 @@
+package org.cytoscape.cpath2.internal;
+
+import com.ctc.wstx.stax.WstxInputFactory;
+
+public class StaxHack {
+       public static final void runWithHack(Runnable runnable) {
+               Thread thread = Thread.currentThread();
+               ClassLoader loader = thread.getContextClassLoader();
+               try {
+                       
thread.setContextClassLoader(WstxInputFactory.class.getClassLoader());
+                       runnable.run();
+               } finally {
+                       thread.setContextClassLoader(loader);
+               }
+       }
+}

Modified: 
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
===================================================================
--- 
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
        2012-04-02 19:04:06 UTC (rev 28713)
+++ 
core3/impl/trunk/cpath2-impl/src/main/java/org/cytoscape/cpath2/internal/task/ExecuteGetRecordByCPathId.java
        2012-04-02 20:14:27 UTC (rev 28714)
@@ -4,6 +4,7 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -26,6 +27,7 @@
 import org.biopax.paxtools.model.level3.PhysicalEntity;
 import org.biopax.paxtools.model.level3.SimplePhysicalEntity;
 import org.cytoscape.cpath2.internal.CPath2Factory;
+import org.cytoscape.cpath2.internal.StaxHack;
 import org.cytoscape.cpath2.internal.util.AttributeUtil;
 import org.cytoscape.cpath2.internal.util.BioPaxUtil;
 import org.cytoscape.cpath2.internal.util.SelectUtil;
@@ -427,7 +429,7 @@
                        }
                        try {
                                final String xml = webApi.getRecordsByIds(ids, 
CPathResponseFormat.BIOPAX, new NullTaskMonitor());
-                               Model model = (new 
SimpleIOHandler()).convertFromOWL(new ByteArrayInputStream(xml.getBytes()));
+                               Model model = convertFromOwl(new 
ByteArrayInputStream(xml.getBytes()));
                                // convert L2 to L3 if required (L1 is 
converted to L2 always anyway - by the handler)
                                if(BioPAXLevel.L2.equals(model.getLevel())) { 
// 
                                        model = (new 
OneTwoThree()).filter(model);
@@ -467,6 +469,17 @@
                        }
                }
        }
+       
+       private Model convertFromOwl(final InputStream stream) {
+               final Model[] model = new Model[1];
+               StaxHack.runWithHack(new Runnable() {
+                       @Override
+                       public void run() {
+                               model[0] = (new 
SimpleIOHandler()).convertFromOWL(stream);
+                       }
+               });
+               return model[0];
+       }
 
        private List<List<CyNode>> createBatchArray(CyNetwork cyNetwork) {
                int max_ids_per_request = 50;

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