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 b8290d1debcad0b374ccd9a74a70ce9ebd68335a..eba7bcc27f1a624b86d776829e47641caa9e8da5 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 89a337c57b034e09aa13cdb92a073dfe94daa27f..f4eabb639f48f3f3fbfcf320674243a24cdc0769 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 8776febb8348cb20c14c66e27a9940b7df96b6e5..8bfde8e75d977d5d40cc5c25c353ce6d8cc40d78 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