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 bfb4eb7ab87bf741be41f63801c9e3a1575f8010..833957198932b38a0ca3497a9f417c4d6bdabe37 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java @@ -700,7 +700,7 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi protienLinkPosition = protienLinkPosition + "/polypeptides/".length(); // 20; int j = page.indexOf('"', protienLinkPosition); String uniprotId = page.substring(protienLinkPosition, j); - MiriamData uniprotMiriam = new MiriamData(MiriamType.UNIPROT, uniprotId); + MiriamData uniprotMiriam = new MiriamData(MiriamType.UNIPROT, uniprotId, UniprotAnnotator.class); MiriamData hgncMiriam = uniprotAnnotator.uniProtToHgnc(uniprotMiriam); if (hgncMiriam == null || !hgncMiriam.equals(hgncTarget)) { logger.debug("Invalid target found. Expected " + hgncTarget + ", but found: " + hgncMiriam + " (" diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/ModelAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/ModelAnnotator.java index 8516fd4f6bd02b50d53bfe1b2b3ced40b6453d5e..792c63710303c061a1a4067a954d7dbafdb843d0 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/ModelAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/ModelAnnotator.java @@ -17,7 +17,6 @@ import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import lcsb.mapviewer.annotation.services.annotators.AnnotatorException; -import lcsb.mapviewer.annotation.services.annotators.AnnotatorParamDefinition; import lcsb.mapviewer.annotation.services.annotators.BrendaAnnotator; import lcsb.mapviewer.annotation.services.annotators.BiocompendiumAnnotator; import lcsb.mapviewer.annotation.services.annotators.CazyAnnotator; @@ -360,9 +359,11 @@ public class ModelAnnotator { for (ElementAnnotator elementAnnotator : list) { try { - List<UserAnnotatorsParam> params = annotatorsParams.get(elementAnnotator.getClass()); - if (params != null) { - elementAnnotator.annotateElement(element, params); + if (annotatorsParams != null){ + List<UserAnnotatorsParam> params = annotatorsParams.get(elementAnnotator.getClass()); + if (params != null) { + elementAnnotator.annotateElement(element, params); + } } else { elementAnnotator.annotateElement(element); } 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 b353a3f86bc3c59a627c6f070ca163292ac89dd8..7be1c6bde1f519f7f37e0999609b14df80d943bf 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 @@ -153,7 +153,16 @@ public abstract class ElementAnnotator extends CachableInterface { */ public abstract String getUrl(); - + /** + * Provides description of the extraction process + * for {@link ElementAnnotator} to be used in the front end. + * @return + * the description + */ + public String getDescription(){ + return ""; + } + /** * Provides description for {@link ElementAnnotator} and {@link MiriamType} pair * to be used in the frontend. @@ -161,9 +170,9 @@ public abstract class ElementAnnotator extends CachableInterface { * {@link MiriamType} annotated by this annotator. * @return * the description - */ + */ public String getDescription(MiriamType mt){ - return getCommonName(); + return ""; } /** @@ -177,7 +186,7 @@ public abstract class ElementAnnotator extends CachableInterface { * the description */ public String getDescription(MiriamType mt, MiriamRelationType relationType){ - return getCommonName(); + return ""; } /** diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java index 2097537be826e16e5138bbe13c2b96680a230580..180871318e2cb1d19870d965ea2dc928d729b0d3 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java @@ -271,6 +271,12 @@ public class KeggAnnotator extends ElementAnnotator implements IExternalService public String getUrl() { return "http://www.genome.jp/kegg/"; } + + @Override + public String getDescription() { + return "Annotations extracted from KEGG ENZYME Database based on species EC numbers. " + + "Annotation include relevant publications and homologous genes for given EC numbers."; + } @Override protected WebPageDownloader getWebPageDownloader() { diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/ModelAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/ModelAnnotatorTest.java index 17af451888c1984d054a889e30c2e2757e48333f..0efd208ec9a7f4fba7e7abc16ccf0673547ff2e4 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/ModelAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/ModelAnnotatorTest.java @@ -88,6 +88,8 @@ public class ModelAnnotatorTest extends AnnotationTestFunctions { assertTrue(model.getElementByElementId("a1").getMiriamData().size() > 0); assertTrue(model.getElementByElementId("a2").getMiriamData().size() >= 1); + + modelAnnotator.annotateModel(model, updater, null); } catch (Exception e) { e.printStackTrace(); @@ -129,6 +131,7 @@ public class ModelAnnotatorTest extends AnnotationTestFunctions { } } + @Test public void testCopyMissingAnnotationsInCD() throws Exception { try { diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/CazyAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/CazyAnnotatorTest.java index 66f7e4f58f9bcd68cf909bf378ed9c89d024c25b..e00ab893038e73a1e8bf3da96de651eba6f2ea8c 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/CazyAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/CazyAnnotatorTest.java @@ -41,7 +41,7 @@ public class CazyAnnotatorTest extends AnnotationTestFunctions { @Test public void testUniprotToCazy() throws Exception { try { - assertEquals(new MiriamData(MiriamType.CAZY, "GH5_7"), + assertEquals(new MiriamData(MiriamType.CAZY, "GH5_7", CazyAnnotator.class), cazyAnnotator.uniprotToCazy(new MiriamData(MiriamType.UNIPROT, "Q9SG95"))); } catch (Exception e) { e.printStackTrace(); diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotatorTest.java index a000cdc242deaf393ac42530947149713043b521..0c25808d4f4252c451ad10100309f35cf1e48536 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ChebiAnnotatorTest.java @@ -59,7 +59,7 @@ public class ChebiAnnotatorTest extends AnnotationTestFunctions { public void testGetIdByName() throws Exception { try { MiriamData id = backend.getChebiForChebiName("adenine"); - assertEquals(new MiriamData(MiriamType.CHEBI, "CHEBI:16708"), id); + assertEquals(new MiriamData(MiriamType.CHEBI, "CHEBI:16708", ChebiAnnotator.class), id); id = backend.getChebiForChebiName("asdf bvclcx lcxj vxlcvkj"); assertNull(id); assertNull(backend.getChebiForChebiName(null)); @@ -250,7 +250,7 @@ public class ChebiAnnotatorTest extends AnnotationTestFunctions { try { // easy tests with some molecule MiriamData result = backend.getChebiForChebiName("Ca2+"); - assertEquals(new MiriamData(MiriamType.CHEBI, "CHEBI:29108"), result); + assertEquals(new MiriamData(MiriamType.CHEBI, "CHEBI:29108", ChebiAnnotator.class), result); } catch (Exception e) { e.printStackTrace(); @@ -271,7 +271,7 @@ public class ChebiAnnotatorTest extends AnnotationTestFunctions { assertNotNull(res); assertTrue(res.size() > 1); assertTrue( - res.contains(new MiriamData(MiriamRelationType.BQ_BIOL_IS_DESCRIBED_BY, MiriamType.CHEBI, "CHEBI:24431"))); + res.contains(new MiriamData(MiriamRelationType.BQ_BIOL_IS_DESCRIBED_BY, MiriamType.CHEBI, "CHEBI:24431", ChebiAnnotator.class))); } catch (Exception e) { e.printStackTrace(); throw e; diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotatorTest.java index 8366b4f6c7766a789235186030f86aa89f126138..6c92f994812683c903498c83e673f96547b33aa6 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EnsemblAnnotatorTest.java @@ -240,7 +240,7 @@ public class EnsemblAnnotatorTest extends AnnotationTestFunctions { try { MiriamData ensembl = new MiriamData(MiriamType.ENSEMBL, "ENSG00000154930"); MiriamData entrez = ensemblAnnotator.ensemblIdToEntrezId(ensembl); - assertEquals(new MiriamData(MiriamType.ENTREZ, "84532"), entrez); + assertEquals(new MiriamData(MiriamType.ENTREZ, "84532", EnsemblAnnotator.class), entrez); } catch (Exception e) { e.printStackTrace(); diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EntrezAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EntrezAnnotatorTest.java index be988ab5020c6a4ae950d3184a2d05e82f1693e6..b83f4b449ede900bca2abaae8e3855df33290165 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EntrezAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/EntrezAnnotatorTest.java @@ -172,7 +172,7 @@ public class EntrezAnnotatorTest extends AnnotationTestFunctions { @Test public void testGetHgncFromEntrez() throws Exception { try { - assertEquals(new MiriamData(MiriamType.HGNC, "11179"), entrezAnnotator.getHgncIdFromEntrez(new MiriamData(MiriamType.ENTREZ, "6647"))); + assertEquals(new MiriamData(MiriamType.HGNC, "11179", EntrezAnnotator.class), entrezAnnotator.getHgncIdFromEntrez(new MiriamData(MiriamType.ENTREZ, "6647", EntrezAnnotator.class))); } catch (Exception e) { e.printStackTrace(); throw e; diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotatorTest.java index 2a286755299c830ffaa48e1c6a8ba7157c467f2c..71347a9620d10f39b0269c9f292b835750eef416 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/HgncAnnotatorTest.java @@ -289,8 +289,8 @@ public class HgncAnnotatorTest extends AnnotationTestFunctions { try { List<MiriamData> result = hgncAnnotator.hgncToUniprot(new MiriamData(MiriamType.HGNC, "11138")); assertEquals(1, result.size()); - assertEquals(new MiriamData(MiriamType.UNIPROT, "P37840"), result.get(0)); - assertEquals(0, hgncAnnotator.hgncToUniprot(new MiriamData(MiriamType.HGNC, "1")).size()); + assertEquals(new MiriamData(MiriamType.UNIPROT, "P37840", HgncAnnotator.class), result.get(0)); + assertEquals(0, hgncAnnotator.hgncToUniprot(new MiriamData(MiriamType.HGNC, "1", HgncAnnotator.class)).size()); } catch (Exception e) { e.printStackTrace(); throw e; @@ -300,8 +300,8 @@ public class HgncAnnotatorTest extends AnnotationTestFunctions { @Test public void testHgncIdToName() throws Exception { try { - assertEquals(new MiriamData(MiriamType.HGNC_SYMBOL, "FSD2"), hgncAnnotator.hgncIdToHgncName(new MiriamData(MiriamType.HGNC, "18024"))); - assertEquals(new MiriamData(MiriamType.HGNC_SYMBOL, "LMOD1"), hgncAnnotator.hgncIdToHgncName(new MiriamData(MiriamType.HGNC, "6647"))); + assertEquals(new MiriamData(MiriamType.HGNC_SYMBOL, "FSD2", HgncAnnotator.class), hgncAnnotator.hgncIdToHgncName(new MiriamData(MiriamType.HGNC, "18024"))); + assertEquals(new MiriamData(MiriamType.HGNC_SYMBOL, "LMOD1", HgncAnnotator.class), hgncAnnotator.hgncIdToHgncName(new MiriamData(MiriamType.HGNC, "6647"))); } catch (Exception e) { e.printStackTrace(); throw e; @@ -430,13 +430,13 @@ public class HgncAnnotatorTest extends AnnotationTestFunctions { MiriamData data1 = new MiriamData(MiriamType.HGNC_SYMBOL, "PTGS1"); MiriamData entrez = hgncAnnotator.hgncToEntrez(data1); assertNotNull(entrez); - assertTrue(new MiriamData(MiriamType.ENTREZ, "5742").equals(entrez)); + assertTrue(new MiriamData(MiriamType.ENTREZ, "5742", HgncAnnotator.class).equals(entrez)); // check by id data1 = new MiriamData(MiriamType.HGNC, "11138"); entrez = hgncAnnotator.hgncToEntrez(data1); assertNotNull(entrez); - assertTrue(new MiriamData(MiriamType.ENTREZ, "6622").equals(entrez)); + assertTrue(new MiriamData(MiriamType.ENTREZ, "6622", HgncAnnotator.class).equals(entrez)); } catch (Exception e) { e.printStackTrace(); diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/TairAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/TairAnnotatorTest.java index 10d1bb10e709c6ce2736301e207db103cd37a333..c7700dbb953174b43985056f0355216a4a599ba0 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/TairAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/TairAnnotatorTest.java @@ -154,7 +154,7 @@ public class TairAnnotatorTest extends AnnotationTestFunctions { @Test public void testTairToUniprot() throws Exception { try { - assertEquals(new MiriamData(MiriamType.UNIPROT, "Q9MAN1"), + assertEquals(new MiriamData(MiriamType.UNIPROT, "Q9MAN1", TairAnnotator.class), tairAnnotator.tairToUniprot(new MiriamData(MiriamType.TAIR_LOCUS, "AT1G01030"))); } catch (Exception e) { e.printStackTrace(); diff --git a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/UniprotAnnotatorTest.java b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/UniprotAnnotatorTest.java index aec70cf429c87b9fcc0a8c64696a9629e51ac64a..18172cd7d104adb1db9faf515d6674117f95d724 100644 --- a/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/UniprotAnnotatorTest.java +++ b/annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/UniprotAnnotatorTest.java @@ -87,8 +87,8 @@ public class UniprotAnnotatorTest extends AnnotationTestFunctions { Collection<MiriamData> mds = uniprotAnnotator.uniProtToEC(new MiriamData(MiriamType.UNIPROT, "P12345")); assertEquals(mds.size(), 2); - MiriamData md1 = new MiriamData(MiriamType.EC, "2.6.1.1"); - MiriamData md2 = new MiriamData(MiriamType.EC, "2.6.1.7"); + MiriamData md1 = new MiriamData(MiriamType.EC, "2.6.1.1", UniprotAnnotator.class); + MiriamData md2 = new MiriamData(MiriamType.EC, "2.6.1.7", UniprotAnnotator.class); for (MiriamData md: mds) { assertTrue(md.compareTo(md1) == 0 || md.compareTo(md2) == 0); } @@ -244,7 +244,7 @@ public class UniprotAnnotatorTest extends AnnotationTestFunctions { @Test public void testUniprotToHgnc() throws Exception { try { - assertEquals(new MiriamData(MiriamType.HGNC_SYMBOL, "KDR"), uniprotAnnotator.uniProtToHgnc(new MiriamData(MiriamType.UNIPROT, "P35968"))); + assertEquals(new MiriamData(MiriamType.HGNC_SYMBOL, "KDR", UniprotAnnotator.class), uniprotAnnotator.uniProtToHgnc(new MiriamData(MiriamType.UNIPROT, "P35968"))); } catch (Exception e) { e.printStackTrace(); throw e; diff --git a/frontend-js/src/main/css/global.css b/frontend-js/src/main/css/global.css index b0b3be3a99bb4d2deba795108868a9b31fb26680..0c3e27b0bea4abb7fb60092ea51b9b608571e17c 100644 --- a/frontend-js/src/main/css/global.css +++ b/frontend-js/src/main/css/global.css @@ -582,9 +582,8 @@ h1 { font-weight: bold; } -.minerva-annotator-param-name .annotator-tooltip { - visibility: hidden; - width: 50%; +.minerva-annotator-param-name .annotator-tooltip, .minerva-annotation-group .annotator-tooltip{ + visibility: hidden; background-color: rgba(0, 0, 0, .5); color: #fff; text-align: left; @@ -596,7 +595,27 @@ h1 { z-index: 1; } -.minerva-annotator-param-name:hover .annotator-tooltip { +.minerva-annotator-param-name .annotator-tooltip { + width: 50%; +} + +.minerva-annotation-group .annotator-tooltip { + width: 250px; +} + +.minerva-annotator-param-name>span:hover .annotator-tooltip, .minerva-annotation-group-header>span:hover .annotator-tooltip { visibility: visible; } +.minerva-annotation-group-header>span { + position: relative; +} + +.minerva-annotation-group .tooltip-icon, .minerva-annotator-param-name .tooltip-icon{ + font-size: 0.8em; + left: 3px; + top: -3px; + font-weight: 700; +} + + diff --git a/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js b/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js index 9c4e8b9c567f247bcf94d679a51ea72c690ca701..aafcd3820745fdd4c6dc6512b1bc8ae750e7db64 100644 --- a/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js +++ b/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js @@ -88,7 +88,7 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) { className: "minerva-multi-select" }); - var annotators = configuration.getElementAnnotators(elementType); + var annotators = configuration.getElementAnnotators(elementType); var selectedAnnotators = user.getPreferences().getElementAnnotators(elementType.className); @@ -149,14 +149,21 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) { className: "minerva-annotator-param-name", content: param.name }); - - var toolTip = Functions.createElement({ + + var tooltipContainer = Functions.createElement({ + type: "span" + }); + tooltipContainer.appendChild(Functions.createElement({ + type: "span", + className: "glyphicon glyphicon-question-sign tooltip-icon" + })); + tooltipContainer.appendChild(Functions.createElement({ type: "span", className: "annotator-tooltip", content: param.description - }); + })); - paramName.appendChild(toolTip) + paramName.appendChild(tooltipContainer) paramElement.appendChild(paramName); var paramValue; diff --git a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js index 1ac0e509283c1d9055e9f498d2d9d3cf8bc78fee..2e1caa085133762d21a7bcd9953fed3dfb7ddf3d 100644 --- a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js +++ b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js @@ -182,23 +182,56 @@ GuiUtils.prototype.createAnnotationList = function (annotations, options) { var self = this; var result = document.createElement("div"); + var annotators = this.getConfiguration().getAnnotators(); + var annotatorsClassMapping = {}; + for (var i = 0; i < annotators.length; i++) { + annotatorsClassMapping[annotators[i].getClassName()] = annotators[i]; + } + var grouppedAnnotations = {}; for (var i = 0; i < annotations.length; i++) { - var desc = annotations[i].getDescription(); - if (desc == "") desc = "Annotated by curator" - if (!(desc in grouppedAnnotations)) grouppedAnnotations[desc] = []; - grouppedAnnotations[desc].push(annotations[i]) + var clazz = annotations[i].getAnnotatorClassName(); + if (!(clazz in grouppedAnnotations)) grouppedAnnotations[clazz] = []; + grouppedAnnotations[clazz].push(annotations[i]) } + // = annotatorClasName ? annotatorsClassMapping[annotatorClasName].getName() : "Annotated by curator"; + var cntAnnotations = 0; - // for (var i = 0; i < grouppedAnnotations.keys().length; i++) { - Object.keys(grouppedAnnotations).sort().forEach(function(desc){ + + Object.keys(grouppedAnnotations).sort().forEach(function(annotatorClass){ // var desc = grouppedAnnotations.keys()[i]; var groupContainer = (inline ? document.createElement("span") : document.createElement("div")); var descContainer = (inline ? document.createElement("span") : document.createElement("div")); - descContainer.innerHTML = (inline ? desc + ': ' : desc); + var annotatorName = annotatorClass ? annotatorsClassMapping[annotatorClass].getName() : "Annotated by curator"; + + if (inline) { + descContainer.innerHTML = annotatorName + ': '; + } else { + descContainer.innerHTML = annotatorName; + + if (annotatorClass) { + var annotatorDescription = annotatorsClassMapping[annotatorClass].getDescription(); + if (annotatorDescription) { + var tooltipContainer = Functions.createElement({ + type: "span" + }); + tooltipContainer.appendChild(Functions.createElement({ + type: "span", + className: "glyphicon glyphicon-question-sign tooltip-icon" + })); + tooltipContainer.appendChild(Functions.createElement({ + type: "span", + className: "annotator-tooltip", + content: annotatorsClassMapping[annotatorClass].getDescription() + })); + + descContainer.appendChild(tooltipContainer); + } + } + } descContainer.className = "minerva-annotation-group-header"; if (!inline) groupContainer.className = "minerva-annotation-group"; groupContainer.appendChild(descContainer); @@ -209,7 +242,7 @@ GuiUtils.prototype.createAnnotationList = function (annotations, options) { groupContainer.appendChild(par); } - grouppedAnnotations[desc] = grouppedAnnotations[desc].sort(function(a, b) { + grouppedAnnotations[annotatorClass] = grouppedAnnotations[annotatorClass].sort(function(a, b) { const aType = a.getType().toUpperCase(); const bType = b.getType().toUpperCase(); if (aType < bType) return -1; @@ -217,11 +250,11 @@ GuiUtils.prototype.createAnnotationList = function (annotations, options) { else return 0; }); - for (var j = 0; j < grouppedAnnotations[desc].length; j++) { + for (var j = 0; j < grouppedAnnotations[annotatorClass].length; j++) { cntAnnotations += 1; - var element = grouppedAnnotations[desc][j]; + var element = grouppedAnnotations[annotatorClass][j]; var link = self.createAnnotationLink(element, showType); if (inline) { if (j > 0) { @@ -262,39 +295,7 @@ GuiUtils.prototype.createAnnotationList = function (annotations, options) { result.appendChild(groupContainer); }); - - // for (var i = 0; i < annotations.length; i++) { - // var element = annotations[i]; - // var link = self.createAnnotationLink(element, showType); - // if (inline) { - // if (i > 0) { - // var coma = document.createElement("span"); - // coma.innerHTML = ", "; - // result.appendChild(coma); - // } - // result.appendChild(link); - // } else { - // - // var row = document.createElement("div"); - // row.style.height = "26px"; - // if (i % 2 === 0) { - // row.className = "minerva-annotation-row-odd"; - // } else { - // row.className = "minerva-annotation-row-even"; - // } - // var header = document.createElement("div"); - // header.style.width = "24px"; - // header.style.float = "left"; - // header.innerHTML = "[" + (i + 1) + "]"; - // row.appendChild(header); - // - // var body = document.createElement("div"); - // body.style.float = "left"; - // body.appendChild(link); - // row.appendChild(body); - // result.appendChild(row); - // } - // } + return result; }; diff --git a/frontend-js/src/main/js/map/data/Annotation.js b/frontend-js/src/main/js/map/data/Annotation.js index 1496051649dedd03440ca4c2b04ade12f7798bca..489e4a3dc71b70c1740229dc8251b16d52f66003 100644 --- a/frontend-js/src/main/js/map/data/Annotation.js +++ b/frontend-js/src/main/js/map/data/Annotation.js @@ -15,7 +15,9 @@ function Annotation(javaObject) { } this.setType(javaObject.getType()); this.setResource(javaObject.getResource()); - this.setDescription(javaObject.getDescription()); + this.setAnnotatorClassName(javaObject.getAnnotatorClassName()); + this.setDescriptionByType(javaObject.getDescriptionByType()); + this.setDescriptionByTypeRelation(javaObject.getDescriptionByTypeRelation()); } else { this.setLink(javaObject.link); this.setId(javaObject.id); @@ -24,7 +26,7 @@ function Annotation(javaObject) { } this.setType(javaObject.type); this.setResource(javaObject.resource); - this.setDescription(javaObject.description); + this.setAnnotatorClassName(javaObject.annotatorClassName); } } @@ -74,12 +76,28 @@ Annotation.prototype.getArticle = function() { return this._article; }; -Annotation.prototype.setDescription = function(description) { - this._description = description; +Annotation.prototype.setAnnotatorClassName = function(annotatorClassName) { + this._annotatorClassName = annotatorClassName; }; -Annotation.prototype.getDescription = function() { - return this._description; +Annotation.prototype.getAnnotatorClassName = function() { + return this._annotatorClassName; +}; + +Annotation.prototype.setDescriptionByType = function(descriptionByType) { + this._descriptionByType = descriptionByType; +}; + +Annotation.prototype.getDescriptionByType = function() { + return this.descriptionByType; +}; + +Annotation.prototype.setDescriptionByTypeRelation = function(descriptionByTypeRelation) { + this._descriptionByTypeRelation = descriptionByTypeRelation; +}; + +Annotation.prototype.getDescriptionByTypeRelation = function() { + return this.descriptionByTypeRelation; }; module.exports = Annotation; diff --git a/frontend-js/src/main/js/map/data/Annotator.js b/frontend-js/src/main/js/map/data/Annotator.js index 74d342558aa94e65fa4c5c1c601efd1d371598c0..4ab6dc69be536194de1ed0ae6e18f23665227cbb 100644 --- a/frontend-js/src/main/js/map/data/Annotator.js +++ b/frontend-js/src/main/js/map/data/Annotator.js @@ -12,12 +12,14 @@ function Annotator(javaObject, configuration) { self.setClassName(javaObject.getClassName()); this._elementTypes = javaObject.getElementTypes(); self.setName(javaObject.getName()); + self.setDescription(javaObject.getDescription()); self.setParametersDefinitions(javaObject.getParametersDefinitions()); self.setUrl(javaObject.getUrl()); } else { self.setClassName(javaObject.className); self.setElementTypes(javaObject.elementClassNames, configuration); self.setName(javaObject.name); + self.setDescription(javaObject.description); self.setParametersDefinitions(javaObject.parametersDefinitions); self.setUrl(javaObject.url); } @@ -39,6 +41,14 @@ Annotator.prototype.getName = function () { return this._name; }; +Annotator.prototype.setDescription = function (description) { + this._description = description; +}; + +Annotator.prototype.getDescription = function () { + return this._description; +}; + Annotator.prototype.setUrl = function (url) { this._url = url; }; diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java index 6a53cd7b7252a16dd3845b583a42c5e1258fae36..a42e0686b808cdd5be83bec4d48ec32d740633b4 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java @@ -110,17 +110,26 @@ public abstract class BaseRestImpl { if (annotation.getAnnotator() != null) { try { - result.put("description", - ((ElementAnnotator) annotation.getAnnotator().getConstructor().newInstance()).getDescription( - annotation.getDataType(), - annotation.getRelationType()) - ); - }catch(Exception e) { //TODO + result.put("annotatorClassName", annotation.getAnnotator().getName()); + result.put("descriptionByType", + ((ElementAnnotator) annotation.getAnnotator().getConstructor().newInstance()).getDescription( annotation.getDataType()) + ); + result.put("descriptionByTypeRelation", + ((ElementAnnotator) annotation.getAnnotator().getConstructor().newInstance()).getDescription( + annotation.getDataType(), + annotation.getRelationType()) + ); + + }catch(Exception e) { logger.error("Problem with retrieving description from annotator", e); - result.put("description", ""); + result.put("annotatorClassName", ""); + result.put("descriptionByType", ""); + result.put("descriptionByTypeRelation", ""); } } else { - result.put("description", ""); + result.put("annotatorClassName", ""); + result.put("descriptionByType", ""); + result.put("descriptionByTypeRelation", ""); } return result; 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 29a85d63d37dbd32982ce2c6b29388bdd7e2e46e..c6519c98fb86243be4b8d2c1ded9622e98e1712b 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 { Map<String, Object> result = new HashMap<>(); result.put("className", annotator.getClass().getName()); result.put("name", annotator.getCommonName()); + result.put("description", annotator.getDescription()); result.put("url", annotator.getUrl()); result.put("elementClassNames", annotator.getValidClasses()); result.put("parametersDefinitions", annotator.getParametersDefinitions());