Skip to content

Commit

Permalink
[#655] DMN 1.5: Activate 1.5 as latest version
Browse files Browse the repository at this point in the history
  • Loading branch information
opatrascoiu committed Oct 24, 2024
1 parent 5a31129 commit 42e44ec
Show file tree
Hide file tree
Showing 82 changed files with 16,730 additions and 832 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,21 @@

import com.gs.dmn.ast.TDefinitions;
import com.gs.dmn.log.BuildLogger;
import com.gs.dmn.serialization.xstream.DMN11ToLatestDialectTransformer;
import com.gs.dmn.serialization.xstream.DMN12ToLatestDialectTransformer;
import com.gs.dmn.serialization.xstream.DMN13ToLatestDialectTransformer;
import com.gs.dmn.serialization.xstream.DMN14ToLatestDialectTransformer;
import com.gs.dmn.serialization.xstream.*;

public class DMNDialectTransformer {
private final DMN11ToLatestDialectTransformer dmn11ToLatestDialectTransformer;
private final DMN12ToLatestDialectTransformer dmn12ToLatestDialectTransformer;
private final DMN13ToLatestDialectTransformer dmn13ToLatestDialectTransformer;
private final DMN14ToLatestDialectTransformer dmn14ToLatestDialectTransformer;
private final DMN15ToLatestDialectTransformer dmn15ToLatestDialectTransformer;

public DMNDialectTransformer(BuildLogger logger) {
this.dmn11ToLatestDialectTransformer = new DMN11ToLatestDialectTransformer(logger);
this.dmn12ToLatestDialectTransformer = new DMN12ToLatestDialectTransformer(logger);
this.dmn13ToLatestDialectTransformer = new DMN13ToLatestDialectTransformer(logger);
this.dmn14ToLatestDialectTransformer = new DMN14ToLatestDialectTransformer(logger);
this.dmn15ToLatestDialectTransformer = new DMN15ToLatestDialectTransformer(logger);
}

public TDefinitions transform11ToLatestDefinitions(TDefinitions sourceDefinitions) {
Expand All @@ -47,4 +46,8 @@ public TDefinitions transform13ToLatestDefinitions(TDefinitions sourceDefinition
public TDefinitions transform14ToLatestDefinitions(TDefinitions sourceDefinitions) {
return this.dmn14ToLatestDialectTransformer.transformDefinitions(sourceDefinitions);
}

public TDefinitions transform15ToLatestDefinitions(TDefinitions sourceDefinitions) {
return this.dmn15ToLatestDialectTransformer.transformDefinitions(sourceDefinitions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ private TDefinitions transform(TDefinitions definitions) {
return this.dmnTransformer.transform13ToLatestDefinitions(definitions);
} else if (dmnVersion == DMNVersion.DMN_14) {
return this.dmnTransformer.transform14ToLatestDefinitions(definitions);
} else if (dmnVersion == DMNVersion.DMN_15) {
return this.dmnTransformer.transform15ToLatestDefinitions(definitions);
} else {
throw new DMNRuntimeException(String.format("'%s' is not supported", definitions.getClass()));
}
Expand Down
17 changes: 15 additions & 2 deletions dmn-core/src/main/java/com/gs/dmn/serialization/DMNVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,22 @@ public class DMNVersion {
"org.omg.spec.dmn._20211108.model"
);

public static final DMNVersion LATEST = DMN_14;
protected static final LinkedHashMap<String, String> DMN_15_OTHER_NAMESPACES = new LinkedHashMap<>();
static {
DMN_15_OTHER_NAMESPACES.put("http://www.omg.org/spec/DMN/20180521/DC/", "dc");
DMN_15_OTHER_NAMESPACES.put("https://www.omg.org/spec/DMN/20230324/DMNDI/", "dmndi");
DMN_15_OTHER_NAMESPACES.put("http://www.omg.org/spec/DMN/20180521/DI/", "di");
}
public static final DMNVersion DMN_15 = new DMNVersion("1.5", "dmn/1.5/DMN15.xsd",
"", "https://www.omg.org/spec/DMN/20230324/MODEL/",
"feel", "https://www.omg.org/spec/DMN/20230324/FEEL/",
DMN_15_OTHER_NAMESPACES,
"org.omg.spec.dmn._20230324.model"
);

public static final DMNVersion LATEST = DMN_15;

protected static final List<DMNVersion> VALUES = Arrays.asList(DMN_11, DMN_12, DMN_13, DMN_14);
protected static final List<DMNVersion> VALUES = Arrays.asList(DMN_11, DMN_12, DMN_13, DMN_14, DMN_15);

public static DMNVersion fromVersion(String key) {
for (DMNVersion version: VALUES) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright 2016 Goldman Sachs.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.gs.dmn.serialization.xstream;

import com.gs.dmn.log.BuildLogger;
import com.gs.dmn.serialization.SimpleDMNDialectTransformer;

import static com.gs.dmn.serialization.DMNVersion.DMN_15;
import static com.gs.dmn.serialization.DMNVersion.LATEST;

public class DMN15ToLatestDialectTransformer extends SimpleDMNDialectTransformer {
public DMN15ToLatestDialectTransformer(BuildLogger logger) {
super(logger, DMN_15, LATEST);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ public static DMNVersion inferDMNVersion(DMNBaseElement from) {
DMNVersion result = null;
try {
Map<String, String> nsContext = from.getElementInfo().getNsContext();
if (nsContext.values().stream().anyMatch(s -> DMN_14.getNamespace().equals(s))) {
if (nsContext.values().stream().anyMatch(s -> DMN_15.getNamespace().equals(s))) {
result = DMN_15;
} else if (nsContext.values().stream().anyMatch(s -> DMN_14.getNamespace().equals(s))) {
result = DMN_14;
} else if (nsContext.values().stream().anyMatch(s -> DMN_13.getNamespace().equals(s))) {
result = DMN_13;
Expand All @@ -71,7 +73,9 @@ public static DMNVersion inferDMNVersion(DMNBaseElement from) {

private static DMNVersion inferDMNVersion(Map<String, String> nsContext) {
DMNVersion result = null;
if (nsContext.values().stream().anyMatch(s -> DMN_14.getNamespace().equals(s))) {
if (nsContext.values().stream().anyMatch(s -> DMN_15.getNamespace().equals(s))) {
result = DMN_15;
} else if (nsContext.values().stream().anyMatch(s -> DMN_14.getNamespace().equals(s))) {
result = DMN_14;
} else if (nsContext.values().stream().anyMatch(s -> DMN_13.getNamespace().equals(s))) {
result = DMN_13;
Expand Down Expand Up @@ -108,6 +112,7 @@ private static DMNVersion inferDMNVersion(Reader from) {
private final com.gs.dmn.serialization.xstream.v1_2.XStreamMarshaller xStream12;
private final com.gs.dmn.serialization.xstream.v1_3.XStreamMarshaller xStream13;
private final com.gs.dmn.serialization.xstream.v1_4.XStreamMarshaller xStream14;
private final com.gs.dmn.serialization.xstream.v1_5.XStreamMarshaller xStream15;

XStreamMarshaller() {
this(new ArrayList<>());
Expand All @@ -120,6 +125,7 @@ private static DMNVersion inferDMNVersion(Reader from) {
this.xStream12 = new com.gs.dmn.serialization.xstream.v1_2.XStreamMarshaller(extensionRegisters);
this.xStream13 = new com.gs.dmn.serialization.xstream.v1_3.XStreamMarshaller(extensionRegisters);
this.xStream14 = new com.gs.dmn.serialization.xstream.v1_4.XStreamMarshaller(extensionRegisters);
this.xStream15 = new com.gs.dmn.serialization.xstream.v1_5.XStreamMarshaller(extensionRegisters);
}

@Override
Expand Down Expand Up @@ -151,7 +157,9 @@ public TDefinitions unmarshal(Reader input, boolean validateSchema) {

private TDefinitions unmarshal(DMNVersion inferDMNVersion, Reader secondStringReader) {
TDefinitions result = null;
if (DMN_14.equals(inferDMNVersion)) {
if (DMN_15.equals(inferDMNVersion)) {
result = (TDefinitions) xStream15.unmarshal(secondStringReader);
} else if (DMN_14.equals(inferDMNVersion)) {
result = (TDefinitions) xStream14.unmarshal(secondStringReader);
} else if (DMN_13.equals(inferDMNVersion)) {
result = (TDefinitions) xStream13.unmarshal(secondStringReader);
Expand All @@ -164,28 +172,30 @@ private TDefinitions unmarshal(DMNVersion inferDMNVersion, Reader secondStringRe
}

@Override
public String marshal(TDefinitions definitions) {
if (definitions != null) {
DMNVersion dmnVersion = inferDMNVersion(definitions);
return marshall(definitions, dmnVersion);
public String marshal(TDefinitions o) {
if (o != null) {
DMNVersion dmnVersion = inferDMNVersion(o);
return marshall(o, dmnVersion);
} else {
LOGGER.error("Error marshalling object {}", definitions);
LOGGER.error("Error marshalling object {}", o);
}
return null;
}

@Override
public void marshal(TDefinitions definitions, Writer output) {
if (definitions != null) {
DMNVersion dmnVersion = inferDMNVersion(definitions);
marshall(definitions, output, dmnVersion);
public void marshal(TDefinitions o, Writer output) {
if (o != null) {
DMNVersion dmnVersion = inferDMNVersion(o);
marshall(o, output, dmnVersion);
} else {
LOGGER.error("Error marshalling object {}", definitions);
LOGGER.error("Error marshalling object {}", o);
}
}

private String marshall(TDefinitions o, DMNVersion dmnVersion) {
if (dmnVersion == DMN_14) {
if (dmnVersion == DMN_15) {
return xStream15.marshal(o);
} else if (dmnVersion == DMN_14) {
return xStream14.marshal(o);
} else if (dmnVersion == DMN_13) {
return xStream13.marshal(o);
Expand All @@ -198,15 +208,17 @@ private String marshall(TDefinitions o, DMNVersion dmnVersion) {
}
}

private void marshall(TDefinitions definitions, Writer out, DMNVersion dmnVersion) {
if (dmnVersion == DMN_14) {
xStream14.marshal(definitions, out);
private void marshall(TDefinitions o, Writer out, DMNVersion dmnVersion) {
if (dmnVersion == DMN_15) {
xStream15.marshal(o, out);
} else if (dmnVersion == DMN_14) {
xStream14.marshal(o, out);
} else if (dmnVersion == DMN_13) {
xStream13.marshal(definitions, out);
xStream13.marshal(o, out);
} else if (dmnVersion == DMN_12) {
xStream12.marshal(definitions, out);
xStream12.marshal(o, out);
} else if (dmnVersion == DMN_11) {
xStream11.marshal(definitions, out);
xStream11.marshal(o, out);
}
}

Expand All @@ -221,8 +233,8 @@ private boolean validateXMLSchema(Source source, String schemaPath) {
Validator validator = schema.newValidator();
validator.validate(source);
return true;
} catch (Exception e) {
LOGGER.error(String.format("Invalid DMN file: %s", e.getMessage()));
} catch (Exception e){
LOGGER.error("Invalid DMN file: " + e.getMessage());
throw new DMNRuntimeException(e);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public static String formatQName(QName qname, DMNBaseElement parent, DMNVersion
} else {
return qname.toString();
}
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14) {
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14 || version == DMNVersion.DMN_15) {
// DMN v1.2 namespace typeRef is imported with dot.
if (!XMLConstants.DEFAULT_NS_PREFIX.equals(qname.getPrefix())) {
String nsForPrefix = parent.getNamespaceURI(qname.getPrefix());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
if (parent instanceof TDefinitions) {
if (version == DMNVersion.DMN_11) {
// Do nothing
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14) {
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14 || version == DMNVersion.DMN_15) {
TDefinitions tDefinitions = (TDefinitions) parent;

String dmndiURI = version.getPrefixToNamespaceMap().get("dmndi");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void marshal(Object object, HierarchicalStreamWriter writer, MarshallingC
}
}
writer.setValue(DMNBaseConverter.formatQName(qname, null, version));
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14) {
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14 || version == DMNVersion.DMN_15) {
// DMN v1.2 semantic always local part.
QName qname = (QName) object;
writer.setValue(qname.getLocalPart());
Expand All @@ -72,7 +72,7 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co
return new QName(qnameURI, qname.getLocalPart(), qname.getPrefix());
}
return qname;
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14) {
} else if (version == DMNVersion.DMN_12 || version == DMNVersion.DMN_13 || version == DMNVersion.DMN_14 || version == DMNVersion.DMN_15) {
// DMN v1.2 semantic always local part.
QName qname = new QName(reader.getValue());
return qname;
Expand Down
Loading

0 comments on commit 42e44ec

Please sign in to comment.