From aaceda2c83f744645859008f4b37a54a840760a9 Mon Sep 17 00:00:00 2001 From: IgorRodchenkov Date: Thu, 4 Jul 2024 19:40:03 -0400 Subject: [PATCH] Fix for a NPE bug related to PathwayCommons/cpath2#321 case (when actual large blacklist of ubiquitous mol. was used) --- sbgn-converter/pom.xml | 5 ++++ .../paxtools/io/sbgn/L3ToSBGNPDConverter.java | 8 ++++--- .../paxtools/io/sbgn/SBGNConverterTest.java | 24 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/sbgn-converter/pom.xml b/sbgn-converter/pom.xml index faa4ee0f9..aadcdddc9 100644 --- a/sbgn-converter/pom.xml +++ b/sbgn-converter/pom.xml @@ -30,5 +30,10 @@ chilay-sbgn 3.1.0 + + org.biopax.paxtools + pattern + test + \ No newline at end of file diff --git a/sbgn-converter/src/main/java/org/biopax/paxtools/io/sbgn/L3ToSBGNPDConverter.java b/sbgn-converter/src/main/java/org/biopax/paxtools/io/sbgn/L3ToSBGNPDConverter.java index 2d5e56444..028c2638d 100644 --- a/sbgn-converter/src/main/java/org/biopax/paxtools/io/sbgn/L3ToSBGNPDConverter.java +++ b/sbgn-converter/src/main/java/org/biopax/paxtools/io/sbgn/L3ToSBGNPDConverter.java @@ -314,7 +314,9 @@ public Sbgn createSBGN(Model model) { //a Control without controlled process but with controller and is controlledOf if(control.getControlled().isEmpty()) { Glyph g = createControlStructure(control); - processControllers(control.getControlledOf(), g); + if(g != null) { + processControllers(control.getControlledOf(), g); + } }//else - do nothing - as it's converted anyway when the controlled interactions are processed } @@ -1280,8 +1282,8 @@ private void addPorts(Glyph g) { * Creates an arc from the source to the target, and sets its class to the specified clazz. * Puts the new arc in the sullied arcMap. * - * @param source source of the arc -- either Glyph or Port - * @param target target of the arc -- either Glyph or Port + * @param source - source of the arc -- either Glyph or Port + * @param target - target of the arc -- either Glyph or Port * @param clazz class of the arc */ private void createArc(Object source, Object target, String clazz, Stoichiometry stoic) diff --git a/sbgn-converter/src/test/java/org/biopax/paxtools/io/sbgn/SBGNConverterTest.java b/sbgn-converter/src/test/java/org/biopax/paxtools/io/sbgn/SBGNConverterTest.java index 035e472f2..4a37ec31e 100644 --- a/sbgn-converter/src/test/java/org/biopax/paxtools/io/sbgn/SBGNConverterTest.java +++ b/sbgn-converter/src/test/java/org/biopax/paxtools/io/sbgn/SBGNConverterTest.java @@ -7,7 +7,9 @@ import org.biopax.paxtools.model.BioPAXLevel; import org.biopax.paxtools.model.Model; import org.biopax.paxtools.model.level3.*; +import org.biopax.paxtools.pattern.util.Blacklist; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.sbgn.GlyphClazz; import org.sbgn.SbgnUtil; @@ -20,6 +22,8 @@ import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; @@ -383,4 +387,24 @@ private Collection filterGlyphsByClazz(Collection collection, Stri private Collection filterArcsByClazz(Collection collection, String clazz) { return collection.stream().filter(g -> g.getClazz().equals(clazz)).collect(Collectors.toUnmodifiableSet()); } + + @Disabled + @Test + public void convertPc14NearestNeighborhoodOfANK1_PTEN() throws Exception + { + Model level3 = handler.convertFromOWL(Files.newInputStream(Paths.get("/home/igor/Downloads/cpath2-issue-321-pc14-nhood-ank1-pten-data.owl"))); + String out = "target/cpath2-321.sbgn"; + + UbiqueDetector bl = new ListUbiqueDetector(new Blacklist("/home/igor/Workspace/pc-stack/work/downloads/blacklist.txt").getListed()); + L3ToSBGNPDConverter conv = new L3ToSBGNPDConverter(bl,null, false); + conv.writeSBGN(level3, out); + + File outFile = new File(out); + SbgnUtil.isValid(outFile); //ignore CName warning + // Now read the SBGN model back + Sbgn result = (Sbgn) unmarshaller.unmarshal (outFile); + // Assert that the sbgn result contains glyphs + List glyphList = result.getMap().getGlyph(); + assertFalse(glyphList.isEmpty()); + } }