From a5578611f5ebd2ad4eeb20e59ae14e4b50a2fe84 Mon Sep 17 00:00:00 2001 From: David Hoksza <david.hoksza@uni.lu> Date: Tue, 23 Jan 2018 14:42:35 +0100 Subject: [PATCH] Implemented paramaters for all annotators + createMiriamData for all annotators --- .../annotators/AnnotatorParamDefinition.java | 35 +++++++ .../services/annotators/ChebiAnnotator.java | 8 +- .../services/annotators/ElementAnnotator.java | 97 ++++++++++++++++++- .../services/annotators/EnsemblAnnotator.java | 4 +- .../services/annotators/HgncAnnotator.java | 2 +- .../annotators/AllAnnotatorTests.java | 1 + .../annotators/AnnotatorExceptionTest.java | 6 +- .../annotators/AnnotatorParamDefTest.java | 30 ++++++ .../annotators/ElementAnnotatorTest.java | 5 +- .../annotators/StitchAnnotatorTest.java | 2 - .../configuration/ConfigurationRestImpl.java | 1 + 11 files changed, 177 insertions(+), 14 deletions(-) create mode 100644 annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java create mode 100644 annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java new file mode 100644 index 0000000000..c3c3bda40c --- /dev/null +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefinition.java @@ -0,0 +1,35 @@ +package lcsb.mapviewer.annotation.services.annotators; + +/** + * Definition of a single parameter of an annotator. + * + * @author David Hoksza + * + */ +public class AnnotatorParamDefinition { + private String name; + + private String decription; + + private Class<?> type; + + public AnnotatorParamDefinition(String name, String decription, Class<?> type) { + super(); + this.name = name; + this.decription = decription; + this.type = type; + } + + public String getName() { + return name; + } + + public String getDecription() { + return decription; + } + + public Class<?> getType() { + return type; + } + +} diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java index 224ea171fb..b526374026 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotator.java @@ -178,14 +178,14 @@ public class ChebiAnnotator extends ElementAnnotator implements IExternalService String synonym = dataItem.getData(); if (synonym.trim().equalsIgnoreCase(name)) { setCacheValue("name: " + name, entity.getChebiId()); - return new MiriamData(MiriamType.CHEBI, entity.getChebiId()); + return createMiriamData(MiriamType.CHEBI, entity.getChebiId()); } } for (DataItem dataItem : entity.getSynonyms()) { String synonym = dataItem.getData(); if (synonym.trim().equalsIgnoreCase(name)) { setCacheValue("name: " + name, entity.getChebiId()); - return new MiriamData(MiriamType.CHEBI, entity.getChebiId()); + return createMiriamData(MiriamType.CHEBI, entity.getChebiId()); } } } @@ -197,14 +197,14 @@ public class ChebiAnnotator extends ElementAnnotator implements IExternalService String formula = dataItem.getData(); if (formula.trim().equalsIgnoreCase(name)) { setCacheValue("name: " + name, entity.getChebiId()); - return new MiriamData(MiriamType.CHEBI, entity.getChebiId()); + return createMiriamData(MiriamType.CHEBI, entity.getChebiId()); } } for (DataItem dataItem : entity.getSynonyms()) { String synonym = dataItem.getData(); if (synonym.trim().equalsIgnoreCase(name)) { setCacheValue("name: " + name, entity.getChebiId()); - return new MiriamData(MiriamType.CHEBI, entity.getChebiId()); + return createMiriamData(MiriamType.CHEBI, entity.getChebiId()); } } } diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java index 98da3ebf29..26a8389a2f 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotator.java @@ -44,6 +44,11 @@ public abstract class ElementAnnotator extends CachableInterface { * Should be this annotator used as a default annotator. */ private boolean isDefault = false; + + /** + * Parameters which this annotator can be provided. Should be set in constructor. + */ + protected List<AnnotatorParamDefinition> paramsDefs = new ArrayList<>(); /** * Default constructor. @@ -78,6 +83,22 @@ public abstract class ElementAnnotator extends CachableInterface { * data */ public abstract void annotateElement(BioEntity element) throws AnnotatorException; + + /** + * Annotate element using parameters. + * + * @param element + * object to be annotated + * @param parameters + * list of parameters passed to the annotator which is expected to + * be in the same order as its {@link this#parameterDefs} + * @throws AnnotatorException + * thrown when there is a problem with annotating not related to + * data + */ + public void annotateElement(BioEntity element, List<Object> parameters) throws AnnotatorException { + annotateElement(element); + } /** * Returns a list of all classes that can be annotated using this annotator. @@ -130,6 +151,42 @@ public abstract class ElementAnnotator extends CachableInterface { * @return url */ public abstract String getUrl(); + + + /** + * Provides description for {@link ElementAnnotator} and {@link MiriamType} pair + * to be used in the frontend. + * @param mt + * {@link MiriamType} annotated by this annotator. + * @return + * the description + */ + public String getDescription(MiriamType mt){ + return ""; + } + + /** + * Provides description for {@link ElementAnnotator}, {@link MiriamType} and + * {@link MiriamRelationType} triplet to be used in the frontend. + * @param mt + * {@link MiriamType} annotated by this annotator + * @param relationType + * {@link MiriamRelationType} annotated by this annotator. + * @return + * the description + */ + public String getDescription(MiriamType mt, MiriamRelationType relationType){ + return ""; + } + + /** + * Returns list with definitions of the parameters available for this annotator. + * @return the parameters {@link AnnotatorParamDefinition} list + */ + + public Collection<AnnotatorParamDefinition> getParametersDefinitions(){ + return paramsDefs; + } /** * Returns <code>true</code> if this annotator can annotate the object of @@ -475,33 +532,69 @@ public abstract class ElementAnnotator extends CachableInterface { } } + /** + * Sets MiriamData.annotator to this annotator + * + * @param md + * data for which the annotator is to be set + */ private void setAnnotator(MiriamData md){ md.setAnnotator(this.getClass()); } + /** + * Creates {@link MiriamData} and sets its annotator to this annotator + * @return + * created {@link MiriamData} + */ protected MiriamData createMiriamData(){ MiriamData md = new MiriamData(); setAnnotator(md); return md; } + /** + * Creates {@link MiriamData} and sets its annotator to this annotator + * @param _md + * {@link MiriamData} based on which the new {@link MiriamData} should be created + * @return + * created {@link MiriamData} + */ protected MiriamData createMiriamData(MiriamData _md){ MiriamData md = new MiriamData(_md); setAnnotator(md); return md; } + /** + * Creates {@link MiriamData} and sets its annotator to this annotator + * @param mt + * {@link MiriamType} to be set + * @param resource + * resource to be set + * @return + * created {@link MiriamData} + */ protected MiriamData createMiriamData(MiriamType mt, String resource){ MiriamData md = new MiriamData(mt, resource); setAnnotator(md); return md; } + /** + * Creates {@link MiriamData} and sets its annotator to this annotator + * @param relationType + * {@link MiriamRelationType} to be set + * @param mt + * {@link MiriamType} to be set + * @param resource + * resource to be set + * @return + * created {@link MiriamData} + */ protected MiriamData createMiriamData(MiriamRelationType relationType, MiriamType mt, String resource){ MiriamData md = new MiriamData(relationType, mt, resource); setAnnotator(md); return md; } - - } diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java index 2a680742e7..65d3eebe51 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotator.java @@ -230,11 +230,11 @@ public class EnsemblAnnotator extends ElementAnnotator implements IExternalServi String hgncId = super.getNodeAttr("primary_id", node); if (hgncId != null && !hgncId.isEmpty()) { hgncId = hgncId.replaceAll("HGNC:", ""); - annotatedObject.addMiriamData(new MiriamData(MiriamType.HGNC, hgncId)); + annotatedObject.addMiriamData(createMiriamData(MiriamType.HGNC, hgncId)); } String hgncSymbol = super.getNodeAttr("display_id", node); if (hgncSymbol != null && !hgncSymbol.isEmpty()) { - annotatedObject.addMiriamData(new MiriamData(MiriamType.HGNC_SYMBOL, hgncSymbol)); + annotatedObject.addMiriamData(createMiriamData(MiriamType.HGNC_SYMBOL, hgncSymbol)); } NodeList synonymNodeList = node.getChildNodes(); diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java index b1b4678ce8..a8b5d0184f 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotator.java @@ -232,7 +232,7 @@ public class HgncAnnotator extends ElementAnnotator implements IExternalService for (int j = 0; j < sublist.getLength(); j++) { Node subnode = sublist.item(j); if (subnode.getNodeType() == Node.ELEMENT_NODE) { - element.addMiriamData(new MiriamData(MiriamType.UNIPROT, getNodeValue(subnode))); + element.addMiriamData(createMiriamData(MiriamType.UNIPROT, getNodeValue(subnode))); } } } diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java index 0bd9c6f3f8..8490ffda2b 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AllAnnotatorTests.java @@ -6,6 +6,7 @@ import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ AnnotatorExceptionTest.class, // + AnnotatorParamDefTest.class, // BrendaAnnotatorTest.class, // BiocompendiumAnnotatorTest.class, // CazyAnnotatorTest.class, // diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java index c8ecdc1029..a18773f47d 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorExceptionTest.java @@ -23,8 +23,10 @@ public class AnnotatorExceptionTest { @Test public void testConstructor() { - AnnotatorException e = new AnnotatorException("messss"); - assertEquals("messss",e.getMessage()); + AnnotatorParamDefinition d = new AnnotatorParamDefinition("name", "description", String.class); + assertEquals(d.getName(), "name"); + assertEquals(d.getDecription(), "description"); + assertEquals(d.getType(), String.class); } } diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java new file mode 100644 index 0000000000..90682ba6e3 --- /dev/null +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/AnnotatorParamDefTest.java @@ -0,0 +1,30 @@ +package lcsb.mapviewer.annotation.services.annotators; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; + +public class AnnotatorParamDefTest { + + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testConstructor() { + AnnotatorException e = new AnnotatorException("messss"); + assertEquals("messss",e.getMessage()); + } + +} diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java index f4c613ca90..bf0e806a68 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ElementAnnotatorTest.java @@ -225,6 +225,9 @@ public class ElementAnnotatorTest extends AnnotationTestFunctions { assertEquals(md2.getAnnotator(), annotator.getClass()); } - + @Test + public void testEmptyParamsDefs() { + assertEquals(annotator.getParametersDefinitions().size(), 0); + } } diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java index 2016f4875e..b3d3e31e77 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/StitchAnnotatorTest.java @@ -87,8 +87,6 @@ public class StitchAnnotatorTest extends AnnotationTestFunctions { assertEquals(1, bioEntity.getMiriamData().size()); - assertEquals(1, getWarnings().size()); - } catch (Exception e) { e.printStackTrace(); throw e; diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java index 581b00bb73..0ca63135b5 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java @@ -247,6 +247,7 @@ public class ConfigurationRestImpl extends BaseRestImpl { result.put("name", annotator.getCommonName()); result.put("url", annotator.getUrl()); result.put("elementClassNames", annotator.getValidClasses()); + result.put("parametersDefinitions", annotator.getParametersDefinitions()); return result; } -- GitLab