From 5834ba7fa9f97e01018a88f49b1dab3e675ae12e Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 9 Jun 2017 13:59:03 +0200 Subject: [PATCH] api for getting reaction and element types --- .../ConfigurationController.java | 2 + .../configuration/ConfigurationRestImpl.java | 55 ++++++++++++++++++- .../ConfigurationRestImplTest.java | 33 +++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java index 4b582a14a8..abe96fcaf9 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java @@ -26,6 +26,8 @@ public class ConfigurationController extends BaseController { result.put("imageFormats", configurationController.getImageFormats(token)); result.put("modelFormats", configurationController.getModelFormats(token)); result.put("overlayTypes", configurationController.getOverlayTypes(token)); + result.put("elementTypes", configurationController.getElementTypes(token)); + result.put("reactionTypes", configurationController.getReactionTypes(token)); 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 7c32c55034..13560acbd5 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 @@ -1,20 +1,31 @@ package lcsb.mapviewer.api.configuration; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Queue; +import java.util.Set; +import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.RequestParam; +import javassist.Modifier; import lcsb.mapviewer.common.Pair; import lcsb.mapviewer.converter.IConverter; import lcsb.mapviewer.converter.graphics.AbstractImageGenerator; import lcsb.mapviewer.converter.graphics.ImageGenerators; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser; import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter; +import lcsb.mapviewer.model.map.AnnotatedObject; +import lcsb.mapviewer.model.map.reaction.Reaction; +import lcsb.mapviewer.model.map.species.Element; +import lcsb.mapviewer.modelutils.map.ClassTreeNode; +import lcsb.mapviewer.modelutils.map.ElementUtils; import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.interfaces.IConfigurationService; import lcsb.mapviewer.services.interfaces.IUserService; @@ -23,6 +34,7 @@ import lcsb.mapviewer.services.view.ConfigurationView; @Transactional(value = "txManager") public class ConfigurationRestImpl { + private Logger logger = Logger.getLogger(ConfigurationRestImpl.class); @Autowired private IUserService userService; @@ -112,4 +124,45 @@ public class ConfigurationRestImpl { return result; } + public Set<String> getElementTypes(String token) throws SecurityException { + userService.getToken(token); + + return getClassStringTypesList(Element.class); + } + + private Set<String> getClassStringTypesList(Class<?> elementClass) { + Set<String> result = new HashSet<>(); + ElementUtils elementUtils = new ElementUtils(); + ClassTreeNode top = elementUtils.getAnnotatedElementClassTree(); + Queue<ClassTreeNode> queue = new LinkedList<>(); + queue.add(top); + while (!queue.isEmpty()) { + ClassTreeNode clazz = queue.poll(); + for (ClassTreeNode child : clazz.getChildren()) { + queue.add(child); + } + if (elementClass.isAssignableFrom(clazz.getClazz())) { + if (!Modifier.isAbstract(clazz.getClazz().getModifiers())) { + try { + if (elementClass.isAssignableFrom(Reaction.class)) { + result.add(((AnnotatedObject) (clazz.getClazz().getDeclaredConstructor().newInstance())).getStringType()); + } else { + result.add(((AnnotatedObject) (clazz.getClazz().getDeclaredConstructor(String.class).newInstance("id"))).getStringType()); + } + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException + | java.lang.SecurityException e) { + throw new RuntimeException(e); + } + } + } + } + return result; + } + + public Set<String> getReactionTypes(String token) throws SecurityException { + userService.getToken(token); + + return getClassStringTypesList(Reaction.class); + } + } diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java index 4d0c21c798..b88b846b41 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java @@ -4,7 +4,9 @@ import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Map; +import java.util.Set; +import org.apache.log4j.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -12,9 +14,14 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import lcsb.mapviewer.api.RestTestFunctions; +import lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction; +import lcsb.mapviewer.model.map.species.GenericProtein; import lcsb.mapviewer.services.view.ConfigurationView; public class ConfigurationRestImplTest extends RestTestFunctions { + + private Logger logger = Logger.getLogger(ConfigurationRestImplTest.class); + @Autowired public ConfigurationRestImpl configurationRestImpl; @@ -63,4 +70,30 @@ public class ConfigurationRestImplTest extends RestTestFunctions { } } + @Test + public void testGetElementTypes() throws Exception { + try { + Set<String> list = configurationRestImpl.getElementTypes(token.getId()); + GenericProtein protein = new GenericProtein("id"); + assertTrue(list.contains(protein.getStringType())); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + + @Test + public void testGetReactionTypes() throws Exception { + try { + Set<String> list = configurationRestImpl.getReactionTypes(token.getId()); + StateTransitionReaction protein = new StateTransitionReaction(); + assertTrue(list.contains(protein.getStringType())); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + } -- GitLab