From 532c1b30dfff3d4c9f9ceaf5e80cfc43947f5dba Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 22 Nov 2018 15:48:33 +0100
Subject: [PATCH] problem with parsing some of drugbank html

---
 .../services/DrugbankHTMLParser.java          | 51 ++++++++++---------
 .../services/DrugbankHTMLParserTest.java      | 17 +++++++
 .../api/projects/drugs/DrugRestImplTest.java  |  4 +-
 3 files changed, 46 insertions(+), 26 deletions(-)

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 3c680b67ae..2ac0d8b89c 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 017020c440..d17d83c79a 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 515b299b95..39ca083407 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);
-- 
GitLab