From eb4c81021d4e5cd2d1c6872d2ea643c940f35a85 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 29 Oct 2019 15:15:19 +0100
Subject: [PATCH] list of converters is resolved based on spring components

---
 converter-CellDesigner/pom.xml                   |  7 +++++++
 .../celldesigner/CellDesignerXmlParser.java      |  2 ++
 .../model/sbgnml/SbgnmlXmlConverter.java         |  2 ++
 .../converter/model/sbml/SbmlParser.java         |  2 ++
 .../lcsb/mapviewer/wikipathway/GpmlParser.java   |  2 ++
 .../java/lcsb/mapviewer/api/BaseRestImpl.java    | 16 +++++-----------
 .../lcsb/mapviewer/api/SpringRestApiConfig.java  |  2 +-
 .../lcsb/mapviewer/api/BaseRestImplTest.java     | 14 +++++++++++++-
 8 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/converter-CellDesigner/pom.xml b/converter-CellDesigner/pom.xml
index 6c63f5a768..733ba83e10 100644
--- a/converter-CellDesigner/pom.xml
+++ b/converter-CellDesigner/pom.xml
@@ -67,6 +67,13 @@
 			<scope>compile</scope>
 		</dependency>
 
+		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context</artifactId>
+			<version>${springframework.version}</version>
+		</dependency>
+
 	</dependencies>
 
 </project>
\ No newline at end of file
diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
index c6386575d6..34aaa538dc 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
@@ -11,6 +11,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.xerces.parsers.DOMParser;
+import org.springframework.stereotype.Component;
 import org.w3c.dom.*;
 
 import lcsb.mapviewer.common.*;
@@ -55,6 +56,7 @@ import lcsb.mapviewer.model.map.species.Element;
  * @author Piotr Gawron
  * 
  */
+@Component
 public class CellDesignerXmlParser extends Converter {
 
   /**
diff --git a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java
index 95ed20c123..892dab8549 100644
--- a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java
+++ b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java
@@ -9,12 +9,14 @@ import org.apache.commons.text.StringEscapeUtils;
 import org.apache.logging.log4j.core.LogEvent;
 import org.sbgn.SbgnUtil;
 import org.sbgn.bindings.Sbgn;
+import org.springframework.stereotype.Component;
 
 import lcsb.mapviewer.common.MimeType;
 import lcsb.mapviewer.common.MinervaLoggerAppender;
 import lcsb.mapviewer.converter.*;
 import lcsb.mapviewer.model.map.model.Model;
 
+@Component
 public class SbgnmlXmlConverter extends Converter {
 
   @Override
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
index 1e47dc8e3b..9e0bd55f28 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
@@ -13,6 +13,7 @@ import org.sbml.jsbml.ext.SBasePlugin;
 import org.sbml.jsbml.ext.layout.Layout;
 import org.sbml.jsbml.ext.layout.LayoutModelPlugin;
 import org.sbml.jsbml.ext.multi.MultiModelPlugin;
+import org.springframework.stereotype.Component;
 
 import lcsb.mapviewer.commands.CommandExecutionException;
 import lcsb.mapviewer.commands.layout.ApplySimpleLayoutModelCommand;
@@ -33,6 +34,7 @@ import lcsb.mapviewer.model.map.species.*;
 import lcsb.mapviewer.model.map.species.field.ModificationResidue;
 import lcsb.mapviewer.model.map.species.field.SpeciesWithModificationResidue;
 
+@Component
 public class SbmlParser extends Converter {
 
   /**
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java
index 964b5e026f..796d4a006e 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java
@@ -5,6 +5,7 @@ import java.io.IOException;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
 
 import lcsb.mapviewer.common.MimeType;
 import lcsb.mapviewer.converter.*;
@@ -13,6 +14,7 @@ import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.wikipathway.XML.GPMLToModel;
 import lcsb.mapviewer.wikipathway.XML.ModelToGPML;
 
+@Component
 public class GpmlParser extends Converter {
   Logger logger = LogManager.getLogger();
 
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 ec0ab44c31..5ab4674620 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
@@ -23,9 +23,6 @@ import lcsb.mapviewer.annotation.services.*;
 import lcsb.mapviewer.common.comparator.StringComparator;
 import lcsb.mapviewer.common.exception.*;
 import lcsb.mapviewer.converter.Converter;
-import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
-import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter;
-import lcsb.mapviewer.converter.model.sbml.SbmlParser;
 import lcsb.mapviewer.model.map.*;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.reaction.Reaction;
@@ -33,7 +30,6 @@ import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.model.user.annotator.*;
 import lcsb.mapviewer.services.interfaces.*;
 import lcsb.mapviewer.services.search.ElementMatcher;
-import lcsb.mapviewer.wikipathway.GpmlParser;
 
 @Transactional
 public abstract class BaseRestImpl {
@@ -61,6 +57,9 @@ public abstract class BaseRestImpl {
   @Autowired
   private PubmedParser pubmedParser;
 
+  @Autowired
+  private List<Converter> modelConverters;
+
   private ElementMatcher elementMatcher = new ElementMatcher();
 
   private Transformer mathMlTransformer;
@@ -162,7 +161,7 @@ public abstract class BaseRestImpl {
    * @param modelId
    *          list of model identifiers separated by "," or '*' when all models
    *          should be returned
-   * @throws QueryException 
+   * @throws QueryException
    */
   protected List<Model> getModels(String projectId, String modelId) throws QueryException {
     Model model = modelService.getLastModelByProjectId(projectId);
@@ -319,12 +318,7 @@ public abstract class BaseRestImpl {
   }
 
   protected List<Converter> getModelConverters() {
-    List<Converter> result = new ArrayList<>();
-    result.add(new CellDesignerXmlParser());
-    result.add(new SbgnmlXmlConverter());
-    result.add(new SbmlParser());
-    result.add(new GpmlParser());
-    return result;
+    return modelConverters;
   }
 
   protected String getFirstValue(List<Object> list) {
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java b/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java
index 2836562969..57b92597b0 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java
@@ -8,7 +8,7 @@ import lcsb.mapviewer.services.SpringServiceConfig;
 @Configuration
 @EnableWebMvc
 @Import({ SpringServiceConfig.class })
-@ComponentScan(basePackages = { "lcsb.mapviewer.api" })
+@ComponentScan(basePackages = { "lcsb.mapviewer" })
 public class SpringRestApiConfig {
 
 }
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java
index 77e415ea34..84d9f956a0 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java
@@ -15,16 +15,21 @@ import org.springframework.beans.factory.annotation.Autowired;
 import lcsb.mapviewer.annotation.services.MiriamConnector;
 import lcsb.mapviewer.annotation.services.PubmedParser;
 import lcsb.mapviewer.annotation.services.annotators.ElementAnnotator;
+import lcsb.mapviewer.api.projects.ProjectRestImpl;
+import lcsb.mapviewer.converter.Converter;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.user.annotator.AnnotatorData;
 
 public class BaseRestImplTest extends RestTestFunctions {
-  Logger logger = LogManager.getLogger(BaseRestImplTest.class);
+  Logger logger = LogManager.getLogger();
 
   @Autowired
   MiriamConnector mc;
 
+  @Autowired
+  ProjectRestImpl restImpl;
+
   @Autowired
   PubmedParser pubmedParser;
 
@@ -107,4 +112,11 @@ public class BaseRestImplTest extends RestTestFunctions {
     Integer x = controller.parseInteger(null);
     assertNull(x);
   }
+
+  @Test
+  public void testGetConverters() throws Exception {
+    List<Converter> list = restImpl.getModelConverters();
+    assertTrue(list.size() > 0);
+  }
+
 }
-- 
GitLab