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 d4bfb99a236e3ec903624b3e3f13588214dd341a..bc053783e1b3b2bfa1fe975d5e132a9bfd1ad12d 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/ModelAnnotator.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/ModelAnnotator.java @@ -12,10 +12,12 @@ import java.util.Set; import javax.annotation.PostConstruct; +import org.apache.commons.logging.Log; 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; @@ -41,6 +43,7 @@ import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.reaction.Reaction; import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.Species; +import lcsb.mapviewer.model.user.UserAnnotatorsParam; import lcsb.mapviewer.modelutils.map.ClassTreeNode; import lcsb.mapviewer.modelutils.map.ElementUtils; @@ -227,7 +230,7 @@ public class ModelAnnotator { * callback function used for updating progress of the function */ public void performAnnotations(Model model, final IProgressUpdater progressUpdater) { - performAnnotations(model, progressUpdater, null); + performAnnotations(model, progressUpdater, null, null); } /** @@ -241,7 +244,8 @@ public class ModelAnnotator { * @param progressUpdater * callback function used for updating progress of the function */ - public void performAnnotations(Model model, final IProgressUpdater progressUpdater, Map<Class<?>, List<ElementAnnotator>> annotators) { + public void performAnnotations(Model model, final IProgressUpdater progressUpdater, Map<Class<?>, + List<ElementAnnotator>> annotators, Map<Class<?>, List<UserAnnotatorsParam>> annotatorsParams) { progressUpdater.setProgress(0); List<Model> models = new ArrayList<Model>(); models.add(model); @@ -264,7 +268,7 @@ public class ModelAnnotator { progressUpdater .setProgress(ratio * IProgressUpdater.MAX_PROGRESS + (COPYING_RATIO * IProgressUpdater.MAX_PROGRESS + progress * ANNOTATING_RATIO) / size); } - }, annotators); + }, annotators, annotatorsParams); counter++; } } @@ -303,7 +307,7 @@ public class ModelAnnotator { progressUpdater.setProgress(counter / amount * IProgressUpdater.MAX_PROGRESS); } } - + /** * Annotates all elements in the model using set of {@link ElementAnnotator} * given in the param. If the set is empty then all annotators will be used. @@ -315,14 +319,37 @@ public class ModelAnnotator { * model where annotation shoud be updated * @param progressUpdater * callback function used to refresh progress of function execution - */ + */ protected void annotateModel(Model model, IProgressUpdater progressUpdater, Map<Class<?>, List<ElementAnnotator>> annotators) { + annotateModel(model, progressUpdater, annotators, null); + } + + /** + * Annotates all elements in the model using set of {@link ElementAnnotator} + * given in the param. If the set is empty then all annotators will be used. + * + * @param annotators + * this map contains lists of {@link ElementAnnotator} objects that + * should be used for a given classes + * @param annotatorsParams + * this map contains lists of {@link UserAnnotatorsParam} objects that + * should be used for a given {@link ElementAnnotator} class + * @param model + * model where annotation should be updated + * @param progressUpdater + * callback function used to refresh progress of function execution + */ + protected void annotateModel(Model model, IProgressUpdater progressUpdater, Map<Class<?>, List<ElementAnnotator>> annotators, + Map<Class<?>, List<UserAnnotatorsParam>> annotatorsParams) { ElementUtils elementUtils = new ElementUtils(); progressUpdater.setProgress(0); double counter = 0; double amount = model.getElements().size() + model.getReactions().size(); + + logger.debug("annotatorsParams"); + logger.debug(annotatorsParams); // annotate all elements for (Element element : model.getElements()) { @@ -336,7 +363,15 @@ public class ModelAnnotator { for (ElementAnnotator elementAnnotator : list) { try { - elementAnnotator.annotateElement(element); + List<UserAnnotatorsParam> params = annotatorsParams.get(elementAnnotator.getClass()); + logger.debug("params"); + logger.debug(params); + if (params != null) { + elementAnnotator.annotateElement(element, params); + } else { + elementAnnotator.annotateElement(element); + } + } catch (AnnotatorException e) { logger.warn(elementUtils.getElementTag(element) + " " + elementAnnotator.getCommonName() + " annotation problem: " + e.getMessage()); } 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 a3fe33f3d337c9c841e0905945554c91b0fe64d0..b353a3f86bc3c59a627c6f070ca163292ac89dd8 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 @@ -18,6 +18,7 @@ import lcsb.mapviewer.model.map.reaction.Reaction; import lcsb.mapviewer.model.map.species.Chemical; import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.Species; +import lcsb.mapviewer.model.user.UserAnnotatorsParam; /** * Interface that allows to annotate {@link BioEntity elements} in the system. @@ -96,7 +97,7 @@ public abstract class ElementAnnotator extends CachableInterface { * thrown when there is a problem with annotating not related to * data */ - public void annotateElement(BioEntity element, List<Object> parameters) throws AnnotatorException { + public void annotateElement(BioEntity element, List<UserAnnotatorsParam> parameters) throws AnnotatorException { annotateElement(element); } 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 95f7c6be70dd753e142dbbfa1108596251446ded..51654c7b6b91da4148a2f7ee8a85108b650e7936 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 @@ -148,8 +148,6 @@ public class KeggAnnotator extends ElementAnnotator implements IExternalService } if (mdUniprot != null) uniprotAnnotator.annotateElement(object); - - Set<String> ecs = new HashSet<String>(); for (MiriamData md : object.getMiriamData()) { if (md.getDataType().equals(MiriamType.EC)) { @@ -201,11 +199,16 @@ public class KeggAnnotator extends ElementAnnotator implements IExternalService * @return {@link MiriamType#PUBMED}s found on the page */ private Collection<MiriamData> parseKegg(String pageContent) { + + //Retrieve Pubmeds Collection<MiriamData> result = new HashSet<MiriamData>(); Matcher m = pubmedMatcher.matcher(pageContent); while (m.find()) { result.add(createMiriamData(MiriamType.PUBMED, m.group(1))); } + + //Retrieve homologous organisms based on parameterization + return result; } 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 a18773f47d3f23aca17c07b4ef1aa146a691f0d9..05162124a482e76d0ad7d42c26d07ccb7cf706e2 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,7 +23,7 @@ public class AnnotatorExceptionTest { @Test public void testConstructor() { - AnnotatorParamDefinition d = new AnnotatorParamDefinition("name", "description", String.class); + AnnotatorParamDefinition d = new AnnotatorParamDefinition("name", String.class, "description"); assertEquals(d.getName(), "name"); assertEquals(d.getDecription(), "description"); assertEquals(d.getType(), String.class); diff --git a/frontend-js/src/main/css/global.css b/frontend-js/src/main/css/global.css index d599f5b6cac82fa4a882af8668287d97aaedce1e..95aebcc2da50a37d20e7b0c21aaf0fd32c1143fd 100644 --- a/frontend-js/src/main/css/global.css +++ b/frontend-js/src/main/css/global.css @@ -547,7 +547,7 @@ h1 { .minerva-annotator-param { display: table; width: 100%; - + padding-bottom: 5px; } .minerva-annotator-param-name { diff --git a/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java b/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java index e892d82d38466dbc33b1089f8934921fbe173f71..398f339169ef5fd4b8c9a0c6588e7f7f791edb53 100644 --- a/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java +++ b/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java @@ -98,7 +98,7 @@ public class UserAnnotationSchema implements Serializable { @Cascade({ CascadeType.ALL }) @OneToMany(mappedBy = "annotationSchema") @OrderBy("id") - private List<UserAnnotatorsParams> annotatorsParams = new ArrayList<>(); + private List<UserAnnotatorsParam> annotatorsParams = new ArrayList<>(); /** * List of valid annotations for given object type. @@ -170,7 +170,7 @@ public class UserAnnotationSchema implements Serializable { /** * @return the annotatorsParams */ - public List<UserAnnotatorsParams> getAnnotatorsParams() { + public List<UserAnnotatorsParam> getAnnotatorsParams() { return annotatorsParams; } @@ -178,7 +178,7 @@ public class UserAnnotationSchema implements Serializable { * @param annotatorsParams * the annotatorsParams to set */ - public void setAnnotatorsParams(List<UserAnnotatorsParams> annotatorsParams) { + public void setAnnotatorsParams(List<UserAnnotatorsParam> annotatorsParams) { this.annotatorsParams = annotatorsParams; } @@ -226,13 +226,13 @@ public class UserAnnotationSchema implements Serializable { } /** - * Adds (or updates) {@link UserAnnotatorsParams} information + * Adds (or updates) {@link UserAnnotatorsParam} information * to {@link #annotatorsParams}. * * @param ap * object to add/update */ - public void addAnnotatorParam(UserAnnotatorsParams ap) { + public void addAnnotatorParam(UserAnnotatorsParam ap) { if (ap.getAnnotatorClassName() == null) { throw new InvalidArgumentException("Class name cannot be null"); } @@ -244,7 +244,7 @@ public class UserAnnotationSchema implements Serializable { } for (int i = 0; i < this.annotatorsParams.size(); i++) { - UserAnnotatorsParams params = this.annotatorsParams.get(i); + UserAnnotatorsParam params = this.annotatorsParams.get(i); if (params.getAnnotatorClassName().equals(ap.getAnnotatorClassName()) && params.getParamName().equals(ap.getParamName())) { this.annotatorsParams.get(i).setParamValue(ap.getParamValue()); diff --git a/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotatorsParams.java b/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotatorsParam.java similarity index 90% rename from model/src/main/java/lcsb/mapviewer/model/user/UserAnnotatorsParams.java rename to model/src/main/java/lcsb/mapviewer/model/user/UserAnnotatorsParam.java index 36822aaafc57918c2f5cead97fffdefe634798fc..da0802ac8e4f2f22f633df7e2b5ee68546a25a27 100644 --- a/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotatorsParams.java +++ b/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotatorsParam.java @@ -19,7 +19,7 @@ import javax.persistence.Table; */ @Entity @Table(name = "annotators_params_table") -public class UserAnnotatorsParams implements Serializable { +public class UserAnnotatorsParam implements Serializable { /** * @@ -63,7 +63,7 @@ public class UserAnnotatorsParams implements Serializable { /** * Default constructor. */ - public UserAnnotatorsParams() { + public UserAnnotatorsParam() { } @@ -75,7 +75,7 @@ public class UserAnnotatorsParams implements Serializable { * @param annotators * {@link #annotators} */ - public UserAnnotatorsParams(Class<?> annotatorClassName, String paramName, String paramValue) { + public UserAnnotatorsParam(Class<?> annotatorClassName, String paramName, String paramValue) { setAnnotatorClassName(annotatorClassName); setParamName(paramName); setParamValue(paramValue); @@ -142,7 +142,7 @@ public class UserAnnotatorsParams implements Serializable { /** * @param paramName - * the {@link UserAnnotatorsParams#paramName} to set + * the {@link UserAnnotatorsParam#paramName} to set */ public void setParamName(String paramName) { this.paramName = paramName; @@ -158,7 +158,7 @@ public class UserAnnotatorsParams implements Serializable { /** * @param parameter value - * the {@link UserAnnotatorsParams#paramValue} to set + * the {@link UserAnnotatorsParam#paramValue} to set */ public void setParamValue(String paramValue) { this.paramValue = paramValue; diff --git a/persist/src/main/resources/applicationContext-persist.xml b/persist/src/main/resources/applicationContext-persist.xml index 248cba42b26e77fca1552795dfb79ff4a79698a1..78e734c11603252d7d623f05bd9add03cf071741 100644 --- a/persist/src/main/resources/applicationContext-persist.xml +++ b/persist/src/main/resources/applicationContext-persist.xml @@ -85,7 +85,7 @@ <value>lcsb.mapviewer.model.user.Configuration</value> <value>lcsb.mapviewer.model.user.ObjectPrivilege</value> <value>lcsb.mapviewer.model.user.User</value> - <value>lcsb.mapviewer.model.user.UserAnnotatorsParams</value> + <value>lcsb.mapviewer.model.user.UserAnnotatorsParam</value> <value>lcsb.mapviewer.model.user.UserAnnotationSchema</value> <value>lcsb.mapviewer.model.user.UserClassAnnotators</value> <value>lcsb.mapviewer.model.user.UserClassValidAnnotations</value> diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java index c4351cfc3f91625eab1bad18a557156ee3ec4ee4..a0b4397921162cd2007669e2afee661113170693 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java @@ -552,6 +552,7 @@ public class ProjectRestImpl extends BaseRestImpl { params.requiredAnnotations(projectService.createClassAnnotatorTree(user)); params.validAnnotations(projectService.createClassAnnotatorTree(user)); } + params.setAnnotatorParams(projectService.getAnnotatorsParams(user)); getProjectService().createProject(params); return getProject(projectId, token); diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java index 0ab3525244623103e439f03b4eb9d47993595cf8..8873966ab08cd92c805f8e6afcec1b5a5ce43867 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java @@ -22,7 +22,7 @@ import lcsb.mapviewer.model.user.ObjectPrivilege; import lcsb.mapviewer.model.user.PrivilegeType; import lcsb.mapviewer.model.user.User; import lcsb.mapviewer.model.user.UserAnnotationSchema; -import lcsb.mapviewer.model.user.UserAnnotatorsParams; +import lcsb.mapviewer.model.user.UserAnnotatorsParam; import lcsb.mapviewer.model.user.UserClassAnnotators; import lcsb.mapviewer.model.user.UserClassRequiredAnnotations; import lcsb.mapviewer.model.user.UserClassValidAnnotations; @@ -138,9 +138,9 @@ public class UserRestImpl extends BaseRestImpl { * @param annotatorsParams * @return */ - private Map<String, Object> prepareAnnotatorsParams(List<UserAnnotatorsParams> annotatorsParams) { + private Map<String, Object> prepareAnnotatorsParams(List<UserAnnotatorsParam> annotatorsParams) { Map<String, Object> result = new HashMap<>(); - for (UserAnnotatorsParams param : annotatorsParams) { + for (UserAnnotatorsParam param : annotatorsParams) { String className = param.getAnnotatorClassName().getName(); Map<String, String> annotatorParams = (Map<String, String>)result.get(className); if (annotatorParams == null) { @@ -186,7 +186,7 @@ public class UserRestImpl extends BaseRestImpl { for (String name: nameValueS.keySet()) { String value = (String)nameValueS.get(name); try { - UserAnnotatorsParams param = new UserAnnotatorsParams(Class.forName(annotatorClassname), name, value); + UserAnnotatorsParam param = new UserAnnotatorsParam(Class.forName(annotatorClassname), name, value); schema.addAnnotatorParam(param); } catch (ClassNotFoundException e) { throw new QueryException("Unknown annotator class name: " + annotatorClassname); @@ -401,9 +401,6 @@ public class UserRestImpl extends BaseRestImpl { for (String key : preferencesData.keySet()) { Map<String, Object> value = (Map<String, Object>) preferencesData.get(key); - logger.debug(key); - logger.debug(value); - if (key.equals("project-upload")) { updateUploadPreferences(schema, value); } else if (key.equals("element-annotators")) { diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index 8c0c2eda1812a616168fa520a712ec04569cab03..dbc7b67f57587dae89cdcecff5446a064884fdd1 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -77,6 +77,7 @@ import lcsb.mapviewer.model.user.ObjectPrivilege; import lcsb.mapviewer.model.user.PrivilegeType; import lcsb.mapviewer.model.user.User; import lcsb.mapviewer.model.user.UserAnnotationSchema; +import lcsb.mapviewer.model.user.UserAnnotatorsParam; import lcsb.mapviewer.model.user.UserClassAnnotators; import lcsb.mapviewer.model.user.UserClassRequiredAnnotations; import lcsb.mapviewer.model.user.UserClassValidAnnotations; @@ -819,7 +820,7 @@ public class ProjectService implements IProjectService { public void setProgress(final double progress) { updateProjectStatus(project, ProjectStatus.ANNOTATING, progress, params); } - }, annotators); + }, annotators, params.getAnnotatorsParamsAsMap()); logger.debug("Annotations updated"); } updateProjectStatus(project, ProjectStatus.EXTENDING_MODEL, 0.0, params); @@ -1450,6 +1451,18 @@ public class ProjectService implements IProjectService { userService.updateUser(dbUser); user.setAnnotationSchema(annotationSchema); } + + @Override + public List<UserAnnotatorsParam> getAnnotatorsParams(User user) { + User dbUser = userDao.getById(user.getId()); + UserAnnotationSchema annotationSchema = dbUser.getAnnotationSchema(); + if (annotationSchema == null) { + annotationSchema = new UserAnnotationSchema(); + dbUser.setAnnotationSchema(annotationSchema); + } + + return annotationSchema.getAnnotatorsParams(); + } /** * Sends email about unsuccessfull project creation. diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java index 651d472fdcc757bed1fd81696880cb7fa5151003..9d504bffe34a272052035caa6d0d4d04fdee4830 100644 --- a/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/IProjectService.java @@ -7,6 +7,7 @@ import org.primefaces.model.TreeNode; import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.user.User; import lcsb.mapviewer.model.user.UserAnnotationSchema; +import lcsb.mapviewer.model.user.UserAnnotatorsParam; import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.UserAccessException; import lcsb.mapviewer.services.utils.CreateProjectParams; @@ -189,5 +190,12 @@ public interface IProjectService { byte[] getInputDataForProject(ProjectView projectView); UserAnnotationSchema prepareUserAnnotationSchema(User user); + + /** + * Retrieves list of annotators {@link UserAnnotatorsParam parameters} + * @return + * list of annotators parameters + */ + List<UserAnnotatorsParam> getAnnotatorsParams(User user); } diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java index a1f3ab33bcb611c39b4a409d0dbcec2429ec1a0e..55ae065a3b7305063f459141a76cb39e41cb2da0 100644 --- a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java +++ b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java @@ -16,10 +16,12 @@ import java.util.Set; import org.apache.commons.io.IOUtils; import org.primefaces.model.TreeNode; +import lcsb.mapviewer.annotation.services.annotators.AnnotatorParamDefinition; import lcsb.mapviewer.converter.IConverter; import lcsb.mapviewer.converter.zip.ZipEntryFile; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.MiriamType; +import lcsb.mapviewer.model.user.UserAnnotatorsParam; import lcsb.mapviewer.services.overlay.AnnotatedObjectTreeRow; import lcsb.mapviewer.services.view.AuthenticationToken; @@ -159,6 +161,11 @@ public class CreateProjectParams { * obigatory for which class. */ private Map<Class<? extends BioEntity>, Set<MiriamType>> requiredAnnotations = null; + + /** + * List with annotators parameters. + */ + private List<UserAnnotatorsParam> annotatorsParams = null; /** * @param projectId @@ -543,6 +550,36 @@ public class CreateProjectParams { public void setAnnotatorsMap(Map<Class<?>, List<String>> annotatorsMap) { this.annotatorsMap = annotatorsMap; } + + /** + * @return the annotators params + */ + public List<UserAnnotatorsParam> getAnnotatorsParams() { + return annotatorsParams; + } + + public Map<Class<?>, List<UserAnnotatorsParam>> getAnnotatorsParamsAsMap(){ + + Map<Class<?>, List<UserAnnotatorsParam>> paramsMap = new HashMap<>(); + + for (UserAnnotatorsParam param: getAnnotatorsParams()){ + Class<?> annotatorClassName = param.getAnnotatorClassName(); + if (!paramsMap.containsKey(annotatorClassName)) { + paramsMap.put(annotatorClassName, new ArrayList<>()); + } + paramsMap.get(annotatorClassName).add(param); + } + + return paramsMap; + } + + /** + * @param annotatorsParams + * the annotatorsParams to set + */ + public void setAnnotatorParams(List<UserAnnotatorsParam> annotatorsParams) { + this.annotatorsParams = annotatorsParams; + } /** * Creates {@link #validAnnotations}.