From 72577a2512fd7783919d88745f4d5543a0a470d3 Mon Sep 17 00:00:00 2001 From: Sonia Zorba <sonia.zorba@inaf.it> Date: Thu, 18 Nov 2021 12:13:18 +0100 Subject: [PATCH] Added possibility to load XML models also from config folder --- .../it/inaf/ia2/tsm/model/SchemaModels.java | 16 ++++++++- .../inaf/ia2/tsm/model/XMLModelsLoader.java | 36 ++++++++++++++----- install_template.sh | 4 +-- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java index b8290d1..eba7bcc 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java @@ -53,12 +53,26 @@ public class SchemaModels { String[] tapSchemaModelFiles = getXMLModelFileNames(properties, "tap_schema_models"); String[] ivoaModelFiles = getXMLModelFileNames(properties, "ivoa_schema_models"); - TAP_SCHEMA_MODELS = new XMLModelsLoader(tapSchemaModelFiles).load(); + TAP_SCHEMA_MODELS = new XMLModelsLoader(tapSchemaModelFiles, getTapSchemaModelsFromExternalFolder()).load(); IVOA_SCHEMA_MODELS = new XMLModelsLoader(ivoaModelFiles).load(); } catch (IOException e) { throw new ExceptionInInitializerError(e); } } + + private static File[] getTapSchemaModelsFromExternalFolder() { + + String tasmanConfigFolder = System.getenv("TASMAN_CONFIG_FOLDER"); + + if (tasmanConfigFolder != null) { + File tapSchemaModelsExternalFolder = new File(tasmanConfigFolder).toPath().resolve("schema_definition").toFile(); + if (tapSchemaModelsExternalFolder.exists()) { + return tapSchemaModelsExternalFolder.listFiles(); + } + } + + return new File[]{}; + } private static Properties getCoreProperties() throws IOException { Properties props = new Properties(); diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java index 89a337c..f4eabb6 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java @@ -22,6 +22,8 @@ */ package it.inaf.ia2.tsm.model; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -52,13 +54,19 @@ public class XMLModelsLoader { private static final Logger LOG = LoggerFactory.getLogger(XMLModelsLoader.class); private final String[] xmlModelFileNames; + private final File[] xmlModelExternalFiles; // key: doc version private final Map<String, Document> documents; private final Map<String, String> inheritanceGraph; private final Map<Integer, List<Document>> inheritanceLevels; public XMLModelsLoader(String[] xmlModelFileNames) { + this(xmlModelFileNames, new File[]{}); + } + + public XMLModelsLoader(String[] xmlModelFileNames, File[] xmlModelExternalFiles) { this.xmlModelFileNames = xmlModelFileNames; + this.xmlModelExternalFiles = xmlModelExternalFiles; this.documents = new HashMap<>(); inheritanceGraph = new HashMap<>(); inheritanceLevels = new HashMap<>(); @@ -110,19 +118,29 @@ public class XMLModelsLoader { for (String xmlModelFileName : xmlModelFileNames) { try (InputStream in = classLoader.getResourceAsStream(xmlModelFileName)) { - Document doc = builder.parse(in); - Element root = doc.getDocumentElement(); - String version = root.getAttribute("version"); - // TODO: XML Model validation - - // Documents loaded in a single XMLModelsLoader instance must - // have different versions. - assert documents.get(version) == null; - documents.put(version, doc); + loadFile(builder, in); + } + } + + for (File xmlModelExternalFile : xmlModelExternalFiles) { + try (FileInputStream fis = new FileInputStream(xmlModelExternalFile)) { + loadFile(builder, fis); } } } + private void loadFile(DocumentBuilder builder, InputStream in) throws IOException, SAXException { + Document doc = builder.parse(in); + Element root = doc.getDocumentElement(); + String version = root.getAttribute("version"); + // TODO: XML Model validation + + // Documents loaded in a single XMLModelsLoader instance must + // have different versions. + assert documents.get(version) == null; + documents.put(version, doc); + } + private void buildInheritanceGraph() { for (Document document : documents.values()) { Element root = document.getDocumentElement(); diff --git a/install_template.sh b/install_template.sh index 8776feb..8bfde8e 100644 --- a/install_template.sh +++ b/install_template.sh @@ -110,8 +110,8 @@ cd - 1> /dev/null # Creating executable tasman_bin="$install_dir""tasman" -echo "#!/bin/bash" > $tasman_bin -echo "java -jar $install_dir""tasman-embedded.jar \$1" >> $tasman_bin +echo "#!/bin/sh" > $tasman_bin +echo "TASMAN_CONFIG_FOLDER=$tasman_config_dir java -jar $install_dir""tasman-embedded.jar \$1" >> $tasman_bin chmod +x $tasman_bin # Creating executable symbolic link -- GitLab