From d4d54148bf88fb0af6d1392929e894a5df6a1d19 Mon Sep 17 00:00:00 2001 From: Fabian Meisinger <37404125+SoccerFive18@users.noreply.github.com> Date: Tue, 6 Feb 2024 19:55:42 +0100 Subject: [PATCH] New design finished & ready for regression test --- pom.xml | 14 +- src/module-info.java | 3 - .../api/datastorage/DataContainer.java | 189 ++++++++++-------- .../api/datastorage/JSONDataContainer.java | 20 +- .../api/datastorage/XMLDataContainer.java | 24 +-- .../api/datastorage/YAMLDataContainer.java | 21 +- .../api/dispatcher/BaseDispatchComponent.java | 26 +-- .../api/dispatcher/BaseDispatcher.java | 8 +- 8 files changed, 138 insertions(+), 167 deletions(-) diff --git a/pom.xml b/pom.xml index 95df3b9..a419767 100644 --- a/pom.xml +++ b/pom.xml @@ -137,7 +137,7 @@ --> - + org.apache.maven.plugins maven-surefire-plugin @@ -191,15 +191,5 @@ snakeyaml 2.0 - - javax.validation - validation-api - 2.0.1.Final - - - org.apache.commons - commons-csv - 1.9.0 - diff --git a/src/module-info.java b/src/module-info.java index 9c6c408..b0db868 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -21,8 +21,5 @@ requires transitive org.json; requires transitive org.apache.commons.lang3; requires transitive org.apache.commons.codec; -// requires transitive org.apache.tika.core; requires transitive org.yaml.snakeyaml; - requires java.validation; - requires commons.csv; } \ No newline at end of file diff --git a/src/org/opentdk/api/datastorage/DataContainer.java b/src/org/opentdk/api/datastorage/DataContainer.java index 130754a..d2ff25d 100644 --- a/src/org/opentdk/api/datastorage/DataContainer.java +++ b/src/org/opentdk/api/datastorage/DataContainer.java @@ -97,34 +97,6 @@ public class DataContainer implements SpecificContainer { */ private EContainerFormat containerFormat = EContainerFormat.TEXT; - /** - * Gets used if only the orientation is known without any present data. E.g. - * Format TREE points to XML and COLUMN to CSV. TEXT gets used by default. - * - * @param type {@link org.opentdk.api.datastorage.EHeader} - */ - public static DataContainer newContainer(EHeader type) { - return new DataContainer(type); - } - - private DataContainer(EHeader type) { - switch (type) { - case COLUMN: - containerFormat = EContainerFormat.CSV; - break; - case ROW: - containerFormat = EContainerFormat.PROPERTIES; - break; - case TREE: - containerFormat = EContainerFormat.XML; - break; - default: - containerFormat = EContainerFormat.TEXT; - break; - } - instance = adaptContainer(); - } - /** * The non argument constructor get used to have an empty container instance * without a connected file, stream or result set and without knowing the @@ -138,6 +110,42 @@ public static DataContainer newContainer() { private DataContainer() { instance = adaptContainer(); } + + /** + * Gets used if the exact type is known but without any present data. + * In this case no adaption process is necessary, because the format gets explicitly set. + * + * @param type {@link org.opentdk.api.datastorage.EHeader} + */ + public static DataContainer newContainer(EContainerFormat type) { + return new DataContainer(type); + } + + private DataContainer(EContainerFormat type) { + containerFormat = type; + switch (type) { + case CSV: + instance = CSVDataContainer.newInstance(); + break; + case PROPERTIES: + instance = PropertiesDataContainer.newInstance(); + break; + case RESULTSET: + instance = RSDataContainer.newInstance(); + break; + case XML: + instance = XMLDataContainer.newInstance(); + break; + case JSON: + instance = JSONDataContainer.newInstance(); + break; + case YAML: + instance = YAMLDataContainer.newInstance(); + break; + default: + instance = TextDataContainer.newInstance(); + } + } /** * Gets used to initialize from a source path string that gets committed to a @@ -326,7 +334,7 @@ public CSVDataContainer tabInstance() { } else if (instance instanceof RSDataContainer) { return (RSDataContainer) instance; } else if (instance instanceof CSVDataContainer) { - return (CSVDataContainer) instance; // default CSV (has to be checked at the end) + return (CSVDataContainer) instance; } else { throw new NullPointerException("TabularContainer not intialized"); } @@ -341,7 +349,7 @@ public RSDataContainer rsInstance() { } public XMLDataContainer xmlInstance() { - if (instance instanceof TextDataContainer) { + if (instance instanceof XMLDataContainer) { return (XMLDataContainer) instance; } else { throw new NullPointerException("XMLContainer not intialized"); @@ -529,6 +537,13 @@ public void setResultSet(ResultSet rs) { resultSet = rs; } + /** + * @return {@link #containerFormat} + */ + public EContainerFormat getContainerFormat() { + return containerFormat; + } + // -------------------------------------------------------------------- // Inherited methods that just link to the instance // -------------------------------------------------------------------- @@ -581,57 +596,67 @@ public void add(String name, String value, Filter filter) { } } } -// -// public void delete(String params, String attrName, String attrValue, Filter fltr) { -// checkInstance(); -// if (isTabular()) { -// tabInstance().deleteValue(params); -// } else if (isTree()) { -// if(isXML()) { -// xmlInstance().delete(params, attrName, attrValue, fltr); -// } else if (isJSON()) { -// jsonInstance().delete(params, attrName, attrValue, fltr); -// } else if(isYAML()) { -// yamlInstance().delete(params, attrName, attrValue, fltr); -// } -// } -// } -// -// public String[] get(String parameterName) { -// return get(parameterName, new Filter()); -// } -// -// public String[] get(String parameterName, Filter fltr) { -// String[] ret = new String[0]; -// if (isTabular()) { -// ret = tabInstance().getColumn(parameterName, fltr); -// } else if (isTree()) { -// ret = treeInstance().get(parameterName, fltr); -// for (int i = 0; i < ret.length; i++) { -// ret[i] = ret[i].trim(); -// } -// } -// return ret; -// } -// -// public void set(String parameterName, String value) { -// set(parameterName, value, new Filter(), false); -// } -// -// public void set(String parameterName, String value, Filter filter) { -// set(parameterName, value, filter, false); -// } -// -// public void set(String parameterName, String value, Filter fltr, boolean allOccurences) { -// if (isTabular()) { -// tabInstance().setValues(parameterName, value, fltr, allOccurences); -// } else if (isTree()) { -// if(isXML()) { -// treeInstance().xmlInstance().set(parameterName, value, fltr, allOccurences); -// } else if (instance instanceof JSONDataContainer || instance instanceof YAMLDataContainer) { -// treeInstance().jsonInstance().set(parameterName, value, fltr, allOccurences); -// } -// } -// } + + public void delete(String params, String attrName, String attrValue, Filter fltr) { + checkInstance(); + if (isTabular()) { + tabInstance().deleteValue(params); + } else if (isTree()) { + if(isXML()) { + xmlInstance().delete(params, attrName, attrValue, fltr); + } else if (isJSON()) { + jsonInstance().delete(params, fltr); + } else if(isYAML()) { + yamlInstance().delete(params, fltr); + } + } + } + + public String[] get(String parameterName) { + return get(parameterName, new Filter()); + } + + public String[] get(String parameterName, Filter fltr) { + String[] ret = new String[0]; + checkInstance(); + if (isTabular()) { + ret = tabInstance().getColumn(parameterName, fltr); + } else if (isTree()) { + if(isXML()) { + ret = xmlInstance().get(parameterName, fltr); + } else if (isJSON()) { + ret = jsonInstance().get(parameterName, fltr); + } else if(isYAML()) { + ret = yamlInstance().get(parameterName, fltr); + } + for (int i = 0; i < ret.length; i++) { + ret[i] = ret[i].trim(); + } + } + return ret; + } + + public void set(String parameterName, String value) { + set(parameterName, value, new Filter(), false); + } + + public void set(String parameterName, String value, Filter filter) { + set(parameterName, value, filter, false); + } + + public void set(String parameterName, String value, Filter fltr, boolean allOccurences) { + checkInstance(); + if (isTabular()) { + tabInstance().setValues(parameterName, value, fltr, allOccurences); + } else if (isTree()) { + if(isXML()) { + xmlInstance().set(parameterName, value, fltr); + } else if (isJSON()) { + jsonInstance().set(parameterName, value, fltr); + } else if(isYAML()) { + yamlInstance().set(parameterName, value, fltr); + } + } + } } diff --git a/src/org/opentdk/api/datastorage/JSONDataContainer.java b/src/org/opentdk/api/datastorage/JSONDataContainer.java index 68a3589..0f3bc59 100644 --- a/src/org/opentdk/api/datastorage/JSONDataContainer.java +++ b/src/org/opentdk/api/datastorage/JSONDataContainer.java @@ -204,15 +204,7 @@ public void add(String headerName, String fieldName, String oldFieldValue, Strin MLogger.getInstance().log(Level.INFO, "Method not used", getClass().getSimpleName(), "add"); } - public void delete(String name, String value) { - delete(name, value, new Filter()); - } - - public void delete(String name, String value, Filter filter) { - delete(name, "", "", new Filter()); - } - - public void delete(String name, String fieldName, String fieldValue, Filter filter) { + public void delete(String name, Filter filter) { if (filter.getFilterRules().isEmpty()) { json.remove(name); } @@ -339,12 +331,8 @@ Map getJsonAsMap() { public void set(String name, String value) { set(name, value, new Filter()); } - - public void set(String name, String value, Filter filter) { - set(name, value, filter, false); // No double occurrences possible in JSONObject - } - public void set(String name, String value, Filter filter, boolean allOccurences) { + public void set(String name, String value, Filter filter) { if (filter.getFilterRules().isEmpty()) { Object newValue = this.getDataType(value); json.put(name, newValue); @@ -381,10 +369,6 @@ public void set(String name, String value, Filter filter, boolean allOccurences) } } - public void set(String name, String attributeName, String oldAttributeValue, String attributeValue, Filter filter) { - MLogger.getInstance().log(Level.WARNING, "Method not used", getClass().getSimpleName(), "set"); - } - /** * Possibility to set the content of the {@link #json} object from other containers. * diff --git a/src/org/opentdk/api/datastorage/XMLDataContainer.java b/src/org/opentdk/api/datastorage/XMLDataContainer.java index 759318e..786d373 100644 --- a/src/org/opentdk/api/datastorage/XMLDataContainer.java +++ b/src/org/opentdk/api/datastorage/XMLDataContainer.java @@ -61,16 +61,16 @@ public class XMLDataContainer implements SpecificContainer { */ private XMLEditor xEdit; - private String rootNode = ""; + private String rootNode = "root"; public static XMLDataContainer newInstance() { return new XMLDataContainer(); } private XMLDataContainer() { - StringBuilder sb = new StringBuilder(); - sb.append("<").append(rootNode).append("/>"); - xEdit = new XMLEditor(sb.toString()); +// StringBuilder sb = new StringBuilder(); +// sb.append("<").append(rootNode).append("/>"); + xEdit = new XMLEditor(rootNode); } @Override @@ -352,18 +352,14 @@ public void set(String name, String value) { set(name, value, new Filter()); } - public void set(String name, String value, Filter filter) { - set(name, value, filter, false); - } - - public void set(String tagName, String tagValue, Filter filter, boolean allOccurences) { + public void set(String tagName, String tagValue, Filter filter) { for (FilterRule fltrRule : filter.getFilterRules()) { if (fltrRule.getHeaderName().equalsIgnoreCase("XPath")) { - xEdit.checkXPath(fltrRule.getValue() + "/" + tagName, true); // Creates the hierarchy if not present - Element[] elements = (Element[]) get(tagName, filter, "elements"); - for (int i = 0; i < elements.length; i++) { - xEdit.setElementValue(elements[i], tagValue); - } + xEdit.checkXPath(fltrRule.getValue() + "/" + tagName, true); // Creates the hierarchy if not present + Element[] elements = (Element[]) get(tagName, filter, "elements"); + for (int i = 0; i < elements.length; i++) { + xEdit.setElementValue(elements[i], tagValue); + } break; } } diff --git a/src/org/opentdk/api/datastorage/YAMLDataContainer.java b/src/org/opentdk/api/datastorage/YAMLDataContainer.java index f7b3024..b98a18a 100644 --- a/src/org/opentdk/api/datastorage/YAMLDataContainer.java +++ b/src/org/opentdk/api/datastorage/YAMLDataContainer.java @@ -142,18 +142,10 @@ public void add(String name, String fieldName, String oldFieldValue, String newF json.add(name, fieldName, oldFieldValue, newFieldValue, filter); } - public void delete(String name, String value) { - json.set(name, value); - } - - public void delete(String name, String value, Filter filter) { - json.delete(name, value, filter); + public void delete(String name, Filter filter) { + json.delete(name, filter); } - public void delete(String headerName, String fieldName, String fieldValue, Filter filter) { - json.delete(headerName, fieldName, fieldValue, filter); - } - public String[] get(String name) { return json.get(name); } @@ -170,13 +162,4 @@ public void set(String name, String value, Filter filter) { json.set(name, value, filter); } - public void set(String name, String value, Filter filter, boolean allOccurences) { - json.set(name, value, filter, allOccurences); - } - - public void set(String name, String attr, String value, String oldValue, Filter filter) { - json.set(name, attr, value, oldValue, filter); - - } - } diff --git a/src/org/opentdk/api/dispatcher/BaseDispatchComponent.java b/src/org/opentdk/api/dispatcher/BaseDispatchComponent.java index 54e9770..724e2bf 100644 --- a/src/org/opentdk/api/dispatcher/BaseDispatchComponent.java +++ b/src/org/opentdk/api/dispatcher/BaseDispatchComponent.java @@ -30,7 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.opentdk.api.application.EBaseSettings; import org.opentdk.api.datastorage.DataContainer; -import org.opentdk.api.datastorage.EHeader; +import org.opentdk.api.datastorage.EContainerFormat; import org.opentdk.api.filter.Filter; import org.opentdk.api.mapping.EOperator; import org.opentdk.api.util.ListUtil; @@ -171,15 +171,11 @@ public BaseDispatchComponent(Class parentClass, String paramName, String pxp, defaultValue = dVal; if (!BaseDispatcher.dcMap.containsKey(settingsKey)) { - DataContainer dc = null; - if (StringUtils.isNotBlank(parentXPath)) { - dc = DataContainer.newContainer(EHeader.TREE); - if(dc.isXML()) { - dc.xmlInstance().setRootNode(getRootNode()); - } - } else { - dc = DataContainer.newContainer(); - } + DataContainer dc = DataContainer.newContainer(EContainerFormat.CSV); + if (StringUtils.isNotBlank(parentXPath)) { + dc = DataContainer.newContainer(EContainerFormat.XML); + dc.xmlInstance().setRootNode(getRootNode()); + } BaseDispatcher.setDataContainer(parentClass, dc); } } @@ -446,7 +442,7 @@ public String getAttribute(String attrName) { DataContainer dc = BaseDispatcher.getDataContainer(settingsKey); String[] attributes = new String[0]; if (dc.isTree() && dc.isXML()) { - attributes = dc.treeInstance().xmlInstance().get(expr, attrName); + attributes = dc.xmlInstance().get(expr, attrName); } if (attributes.length == 0) { return ""; @@ -482,7 +478,7 @@ public String getAttribute(String params, String attrName) { DataContainer dc = BaseDispatcher.getDataContainer(settingsKey); String[] attributes = new String[0]; if (dc.isTree() && dc.isXML()) { - attributes = dc.treeInstance().xmlInstance().get(expr, attrName); + attributes = dc.xmlInstance().get(expr, attrName); } if (attributes.length == 0) { return ""; @@ -514,7 +510,7 @@ public String[] getAttributes(String attrName) { DataContainer dc = BaseDispatcher.getDataContainer(settingsKey); String[] attributes = new String[0]; if (dc.isTree() && dc.isXML()) { - attributes = dc.treeInstance().xmlInstance().get(expr, attrName); + attributes = dc.xmlInstance().get(expr, attrName); } if (attributes.length == 0) { return new String[0]; @@ -550,7 +546,7 @@ public String[] getAttributes(String params, String attrName) { DataContainer dc = BaseDispatcher.getDataContainer(settingsKey); String[] attributes = new String[0]; if (dc.isTree() && dc.isXML()) { - attributes = dc.treeInstance().xmlInstance().get(expr, attrName); + attributes = dc.xmlInstance().get(expr, attrName); } if (attributes.length == 0) { return new String[0]; @@ -808,7 +804,7 @@ public void setAttribute(String oldValue, String params, String attrName, String fltr.addFilterRule("XPath", xPath, EOperator.EQUALS); DataContainer dc = BaseDispatcher.getDataContainer(settingsKey); if(dc.isTree() && dc.isXML()) { - dc.treeInstance().xmlInstance().set(parameterName, attrName, oldValue, attrValue, fltr); + dc.xmlInstance().set(parameterName, attrName, oldValue, attrValue, fltr); } } diff --git a/src/org/opentdk/api/dispatcher/BaseDispatcher.java b/src/org/opentdk/api/dispatcher/BaseDispatcher.java index 2255364..f27c082 100644 --- a/src/org/opentdk/api/dispatcher/BaseDispatcher.java +++ b/src/org/opentdk/api/dispatcher/BaseDispatcher.java @@ -197,11 +197,11 @@ public static void setDataContainer(Class dispatcherClass, DataContainer dc, } } if (createFile) { - if (dc.isTree()) { - if (StringUtils.isBlank(dc.treeInstance().getRootNode())) { - dc.treeInstance().setRootNode(rn); + if (dc.isTree() && dc.isXML()) { + if (StringUtils.isBlank(dc.xmlInstance().getRootNode())) { + dc.xmlInstance().setRootNode(rn); } else { - if (!dc.treeInstance().getRootNode().contentEquals(rn)) { + if (!dc.xmlInstance().getRootNode().contentEquals(rn)) { throw new IllegalArgumentException("Root node of dispatcher class and data container are not equal"); } }