diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java index 3c680b67aeae3351d4c03390bb786ad157dc28ec..2ac0d8b89c35145bba24a4f73149494543eaaf46 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java @@ -302,13 +302,8 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi * @return list of drug {@link Target} parsed from input string */ List<Target> getTargetsForDrug(String page) throws DrugSearchException { - List<Target> result = new ArrayList<>(); try { - int pageStart; - Target target = new Target(); - target.setType(TargetType.SINGLE_PROTEIN); - - pageStart = page.indexOf("bond-list-container targets"); + int pageStart = page.indexOf("bond-list-container targets"); int end = page.indexOf("bond-list-container enzymes"); if (end < 0) { @@ -325,28 +320,35 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi } } - while (pageStart > 0 && pageStart < end) { - int targetStart = page.indexOf("Details</a>", pageStart); - if (targetStart < 0) { - break; - } - int nextTargetStart = page.indexOf("Details</a>", targetStart + 1); - if (nextTargetStart < 0) { - nextTargetStart = end; - } - - target = parseTarget(page.substring(targetStart, nextTargetStart)); - if (target != null) { - result.add(target); - } - pageStart = nextTargetStart; - - } + List<Target> result = extractTargetsFromPageContent(page, pageStart, end); + return result; } catch (TaxonomySearchException e) { throw new DrugSearchException("Problem with finidng information about organism", e); } catch (UniprotSearchException e) { throw new DrugSearchException("Problem with finidng information about protein", e); } + } + + List<Target> extractTargetsFromPageContent(String page, int pageStart, int end) + throws UniprotSearchException, TaxonomySearchException { + List<Target> result = new ArrayList<>(); + while (pageStart > 0 && pageStart < end) { + int targetStart = page.indexOf("Details</a>", pageStart); + if (targetStart < 0 || targetStart > end) { + break; + } + int nextTargetStart = page.indexOf("Details</a>", targetStart + 1); + if (nextTargetStart < 0) { + nextTargetStart = end; + } + + Target target = parseTarget(page.substring(targetStart, nextTargetStart)); + if (target != null) { + result.add(target); + } + pageStart = nextTargetStart; + + } return result; } @@ -706,7 +708,8 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi String uniprotId = page.substring(protienLinkPosition, j); MiriamData uniprotMiriam = new MiriamData(MiriamType.UNIPROT, uniprotId); MiriamData hgncMiriam = uniprotAnnotator.uniProtToHgnc(uniprotMiriam); - if (hgncMiriam != null) hgncMiriam.setAnnotator(null); + if (hgncMiriam != null) + hgncMiriam.setAnnotator(null); if (hgncMiriam == null || !hgncMiriam.equals(hgncTarget)) { logger.debug("Invalid target found. Expected " + hgncTarget + ", but found: " + hgncMiriam + " (" + uniprotMiriam + ")"); diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParserTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParserTest.java index 017020c440ccdc238e516b1474776197bb24d7c0..d17d83c79ae90e9e771607b0948a913171ccf75e 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParserTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParserTest.java @@ -828,5 +828,22 @@ public class DrugbankHTMLParserTest extends AnnotationTestFunctions { } } + + @Test + public void testExtractTargetsFromPageContent() throws Exception { + try { + String pageContent = " Details</a>blablablablabla Details</a>"; + List<Target> result = drugBankHTMLParser.extractTargetsFromPageContent(pageContent,2,3); + + assertEquals(0, result.size()); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + + } diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/drugs/DrugRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/drugs/DrugRestImplTest.java index 515b299b95cb273d81bc33d98bb9f88d01452c4a..39ca0834077745edc702fad16b36e5299312ca04 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/drugs/DrugRestImplTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/drugs/DrugRestImplTest.java @@ -53,8 +53,9 @@ public class DrugRestImplTest extends RestTestFunctions { throw e; } } + @Test - public void test() throws Exception { + public void testTargetWithEmptyMechanism() throws Exception { try { DrugRestImpl drugRestImpl = createMockProjectRest("testFiles/model/sample.xml"); Map<String, Object> result = drugRestImpl.getDrugsByQuery(token, "sample", "", "Picato").get(0); @@ -66,7 +67,6 @@ public class DrugRestImplTest extends RestTestFunctions { } } - private DrugRestImpl createMockProjectRest(String string) throws Exception { Model model = super.getModelForFile(string, true); IModelService mockModelService = Mockito.mock(IModelService.class);