From 9d92a9260977ecee10f596fe40028bf5e22f68e5 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 22 Nov 2018 15:20:15 +0100
Subject: [PATCH] some drugs didn't have mechanism target defined

---
 .../annotation/services/ChEMBLParser.java     | 26 ++++++++++++-------
 .../api/projects/drugs/DrugRestImplTest.java  | 13 ++++++++++
 2 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/ChEMBLParser.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/ChEMBLParser.java
index cedc92718e..ea67d90cda 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/ChEMBLParser.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/ChEMBLParser.java
@@ -153,6 +153,9 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
       throw new InvalidArgumentException(
           "Target must be of a type: " + MiriamType.CHEMBL_TARGET + ". But found: " + md.getDataType());
     }
+    if (md.getResource().isEmpty()) {
+      throw new InvalidArgumentException("Invalid target id" + md);
+    }
     try {
       Target target = new Target();
       target.setSource(md);
@@ -261,13 +264,13 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
   }
 
   /**
-   * REturns list of targes for given drug.
+   * Returns list of targets for given drug.
    * 
    * @param drugId
    *          identifier of a drug for which targets are looked
    * @throws DrugSearchException
    *           thrown when there are problems with connection to ChEMBL database
-   * @return list of targes for given drug
+   * @return list of targets for given drug
    */
   List<Target> getTargetsByDrugId(MiriamData drugId) throws DrugSearchException {
     if (!MiriamType.CHEMBL_COMPOUND.equals(drugId.getDataType())) {
@@ -275,8 +278,8 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
     }
     List<Target> targets = new ArrayList<>();
     try {
-
-      String page = getWebPageContent(TARGET_MECHANISM_BY_DRUG_ID_API_URL + drugId.getResource());
+      String url = TARGET_MECHANISM_BY_DRUG_ID_API_URL + drugId.getResource();
+      String page = getWebPageContent(url);
       Document document = getXmlDocumentFromString(page);
 
       Node response = getNode("response", document);
@@ -287,14 +290,17 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
         if (node.getNodeType() == Node.ELEMENT_NODE) {
           if (node.getNodeName().equalsIgnoreCase("mechanism")) {
             Node chemblTargetIdNode = getNode("target_chembl_id", node);
-            MiriamData targetMiriam = new MiriamData(MiriamType.CHEMBL_TARGET, chemblTargetIdNode.getTextContent());
+            String chemblTargetId = chemblTargetIdNode.getTextContent();
+            if (chemblTargetId != null && !chemblTargetId.isEmpty()) {
+              MiriamData targetMiriam = new MiriamData(MiriamType.CHEMBL_TARGET, chemblTargetId);
 
-            Target target = getTargetFromId(targetMiriam);
-            Node referenceNode = getNode("mechanism_refs", node);
+              Target target = getTargetFromId(targetMiriam);
+              Node referenceNode = getNode("mechanism_refs", node);
 
-            Set<MiriamData> references = parseReferences(referenceNode);
-            target.addReferences(references);
-            targets.add(target);
+              Set<MiriamData> references = parseReferences(referenceNode);
+              target.addReferences(references);
+              targets.add(target);
+            }
           }
         }
       }
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 89e6026906..515b299b95 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,6 +53,19 @@ public class DrugRestImplTest extends RestTestFunctions {
       throw e;
     }
   }
+  @Test
+  public void test() throws Exception {
+    try {
+      DrugRestImpl drugRestImpl = createMockProjectRest("testFiles/model/sample.xml");
+      Map<String, Object> result = drugRestImpl.getDrugsByQuery(token, "sample", "", "Picato").get(0);
+      assertNotNull(result);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
 
   private DrugRestImpl createMockProjectRest(String string) throws Exception {
     Model model = super.getModelForFile(string, true);
-- 
GitLab