Skip to content

Commit 3d1eea5

Browse files
tarilabsetirelli
authored andcommitted
XStream marshall startNode/endNode (#2)
.. XML unmarsh/marsh NEW test ignored as not everything is fully working yet.
1 parent 483b619 commit 3d1eea5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2308
-39
lines changed

kie-dmn/kie-dmn-backend/pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,24 @@
3838
<artifactId>junit</artifactId>
3939
<scope>test</scope>
4040
</dependency>
41+
42+
<dependency>
43+
<groupId>org.xmlunit</groupId>
44+
<artifactId>xmlunit-core</artifactId>
45+
<scope>test</scope>
46+
</dependency>
47+
<dependency>
48+
<groupId>net.java.dev.stax-utils</groupId>
49+
<artifactId>stax-utils</artifactId>
50+
<exclusions>
51+
<exclusion>
52+
<groupId>com.bea.xml</groupId>
53+
<artifactId>jsr173-ri</artifactId>
54+
</exclusion>
55+
</exclusions>
56+
</dependency>
57+
58+
4159
</dependencies>
4260

4361
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.kie.dmn.backend.unmarshalling.v1_1.xstream;
2+
3+
import com.thoughtworks.xstream.XStream;
4+
import com.thoughtworks.xstream.converters.MarshallingContext;
5+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
6+
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
7+
8+
public abstract class ArtifactConverter extends DMNElementConverter {
9+
10+
public ArtifactConverter(XStream xstream) {
11+
super(xstream);
12+
}
13+
14+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.kie.dmn.backend.unmarshalling.v1_1.xstream;
2+
3+
import org.kie.dmn.feel.model.v1_1.Association;
4+
import org.kie.dmn.feel.model.v1_1.AssociationDirection;
5+
import org.kie.dmn.feel.model.v1_1.DMNElementReference;
6+
7+
import com.thoughtworks.xstream.XStream;
8+
import com.thoughtworks.xstream.converters.MarshallingContext;
9+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
10+
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
11+
12+
public class AssociationConverter extends ArtifactConverter {
13+
public static final String TARGET_REF = "targetRef";
14+
public static final String SOURCE_REF = "sourceRef";
15+
public static final String ASSOCIATION_DIRECTION = "associationDirection";
16+
17+
public AssociationConverter(XStream xstream) {
18+
super(xstream);
19+
}
20+
21+
@Override
22+
protected Object createModelObject() {
23+
return new Association();
24+
}
25+
26+
@Override
27+
public boolean canConvert(Class clazz) {
28+
return clazz.equals( Association.class );
29+
}
30+
31+
@Override
32+
protected void assignChildElement(Object parent, String nodeName, Object child) {
33+
Association a = (Association) parent;
34+
35+
if( SOURCE_REF.equals( nodeName ) ) {
36+
a.setSourceRef( (DMNElementReference) child );
37+
} else if( TARGET_REF.equals( nodeName ) ) {
38+
a.setTargetRef( (DMNElementReference) child );
39+
} else {
40+
super.assignChildElement( parent, nodeName, child );
41+
}
42+
}
43+
44+
@Override
45+
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
46+
super.assignAttributes(reader, parent);
47+
Association a = (Association) parent;
48+
49+
String associationDirectionValue = reader.getAttribute(ASSOCIATION_DIRECTION);
50+
51+
if (associationDirectionValue != null) a.setAssociationDirection(AssociationDirection.fromValue(associationDirectionValue));
52+
}
53+
54+
@Override
55+
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
56+
super.writeChildren(writer, context, parent);
57+
Association a = (Association) parent;
58+
59+
writeChildrenNode(writer, context, a.getSourceRef(), SOURCE_REF);
60+
writeChildrenNode(writer, context, a.getTargetRef(), TARGET_REF);
61+
}
62+
63+
@Override
64+
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
65+
super.writeAttributes(writer, parent);
66+
Association a = (Association) parent;
67+
68+
if (a.getAssociationDirection() != null) writer.addAttribute(ASSOCIATION_DIRECTION, a.getAssociationDirection().value());
69+
}
70+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.kie.dmn.backend.unmarshalling.v1_1.xstream;
2+
3+
import org.kie.dmn.feel.model.v1_1.AuthorityRequirement;
4+
import org.kie.dmn.feel.model.v1_1.DMNElementReference;
5+
6+
import com.thoughtworks.xstream.XStream;
7+
import com.thoughtworks.xstream.converters.MarshallingContext;
8+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
9+
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
10+
11+
public class AuthorityRequirementConverter extends DMNModelInstrumentedBaseConverter {
12+
public static final String REQUIRED_AUTHORITY = "requiredAuthority";
13+
public static final String REQUIRED_INPUT = "requiredInput";
14+
public static final String REQUIRED_DECISION = "requiredDecision";
15+
16+
@Override
17+
protected void assignChildElement(Object parent, String nodeName, Object child) {
18+
AuthorityRequirement ar = (AuthorityRequirement) parent;
19+
20+
if (REQUIRED_DECISION.equals(nodeName)) {
21+
ar.setRequiredDecision( (DMNElementReference) child );
22+
} else if (REQUIRED_INPUT.equals(nodeName)) {
23+
ar.setRequiredInput( (DMNElementReference) child );
24+
} else if (REQUIRED_AUTHORITY.equals(nodeName)) {
25+
ar.setRequiredAuthority( (DMNElementReference) child );
26+
} else {
27+
super.assignChildElement(parent, nodeName, child);
28+
}
29+
}
30+
31+
@Override
32+
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
33+
super.assignAttributes(reader, parent);
34+
35+
// no attributes.
36+
}
37+
38+
@Override
39+
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
40+
super.writeChildren(writer, context, parent);
41+
AuthorityRequirement ar = (AuthorityRequirement) parent;
42+
43+
if (ar.getRequiredDecision() != null) writeChildrenNode(writer, context, ar.getRequiredDecision(), REQUIRED_DECISION);
44+
// TODO or if else?
45+
if (ar.getRequiredInput() != null) writeChildrenNode(writer, context, ar.getRequiredInput(), REQUIRED_INPUT);
46+
if (ar.getRequiredAuthority() != null) writeChildrenNode(writer, context, ar.getRequiredAuthority(), REQUIRED_AUTHORITY);
47+
}
48+
49+
@Override
50+
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
51+
super.writeAttributes(writer, parent);
52+
53+
// no attributes.
54+
}
55+
56+
public AuthorityRequirementConverter(XStream xstream) {
57+
super(xstream);
58+
}
59+
60+
@Override
61+
protected Object createModelObject() {
62+
return new AuthorityRequirement();
63+
}
64+
65+
@Override
66+
public boolean canConvert(Class clazz) {
67+
return clazz.equals( AuthorityRequirement.class );
68+
}
69+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.kie.dmn.backend.unmarshalling.v1_1.xstream;
2+
3+
import org.kie.dmn.feel.model.v1_1.Binding;
4+
import org.kie.dmn.feel.model.v1_1.Expression;
5+
import org.kie.dmn.feel.model.v1_1.InformationItem;
6+
7+
import com.thoughtworks.xstream.XStream;
8+
import com.thoughtworks.xstream.converters.MarshallingContext;
9+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
10+
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
11+
12+
public class BindingConverter extends DMNModelInstrumentedBaseConverter {
13+
public static final String EXPRESSION = "expression";
14+
public static final String PARAMETER = "parameter";
15+
16+
@Override
17+
protected void assignChildElement(Object parent, String nodeName, Object child) {
18+
Binding b = (Binding) parent;
19+
20+
if (PARAMETER.equals(nodeName)) {
21+
b.setParameter((InformationItem) child);
22+
} else if (EXPRESSION.equals(nodeName)) {
23+
b.setExpression((Expression) child);
24+
} else {
25+
super.assignChildElement(parent, nodeName, child);
26+
}
27+
}
28+
29+
@Override
30+
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
31+
super.assignAttributes(reader, parent);
32+
33+
// no attributes.
34+
}
35+
36+
@Override
37+
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
38+
super.writeChildren(writer, context, parent);
39+
Binding b = (Binding) parent;
40+
41+
writeChildrenNode(writer, context, b.getParameter(), PARAMETER);
42+
if (b.getExpression() != null) writeChildrenNode(writer, context, b.getExpression(), EXPRESSION);
43+
}
44+
45+
@Override
46+
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
47+
super.writeAttributes(writer, parent);
48+
49+
// no attributes.
50+
}
51+
52+
public BindingConverter(XStream xstream) {
53+
super(xstream);
54+
}
55+
56+
@Override
57+
protected Object createModelObject() {
58+
return new Binding();
59+
}
60+
61+
@Override
62+
public boolean canConvert(Class clazz) {
63+
return clazz.equals( Binding.class );
64+
}
65+
66+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.kie.dmn.backend.unmarshalling.v1_1.xstream;
2+
3+
import org.kie.dmn.feel.model.v1_1.BusinessContextElement;
4+
5+
import com.thoughtworks.xstream.XStream;
6+
import com.thoughtworks.xstream.converters.MarshallingContext;
7+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
8+
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
9+
10+
public abstract class BusinessContextElementConverter extends NamedElementConverter {
11+
public static final String URI = "URI";
12+
13+
public BusinessContextElementConverter(XStream xstream) {
14+
super(xstream);
15+
}
16+
17+
@Override
18+
protected void assignChildElement(Object parent, String nodeName, Object child) {
19+
super.assignChildElement(parent, nodeName, child);
20+
}
21+
22+
@Override
23+
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
24+
super.assignAttributes(reader, parent);
25+
BusinessContextElement bce = (BusinessContextElement) parent;
26+
27+
String uri = reader.getAttribute(URI);
28+
29+
bce.setURI(uri);
30+
}
31+
32+
@Override
33+
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
34+
super.writeChildren(writer, context, parent);
35+
}
36+
37+
@Override
38+
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
39+
super.writeAttributes(writer, parent);
40+
BusinessContextElement bce = (BusinessContextElement) parent;
41+
42+
if (bce.getURI() != null) writer.addAttribute(URI, bce.getURI());
43+
}
44+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.kie.dmn.backend.unmarshalling.v1_1.xstream;
2+
3+
import org.kie.dmn.feel.model.v1_1.Context;
4+
import org.kie.dmn.feel.model.v1_1.ContextEntry;
5+
6+
import com.thoughtworks.xstream.XStream;
7+
import com.thoughtworks.xstream.converters.MarshallingContext;
8+
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
9+
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
10+
11+
public class ContextConverter extends ExpressionConverter {
12+
public static final String CONTEXT_ENTRY = "contextEntry";
13+
14+
@Override
15+
protected void assignChildElement(Object parent, String nodeName, Object child) {
16+
Context c = (Context) parent;
17+
18+
if (CONTEXT_ENTRY.equals(nodeName)) {
19+
c.getContextEntry().add((ContextEntry) child);
20+
} else {
21+
super.assignChildElement(parent, nodeName, child);
22+
}
23+
}
24+
25+
@Override
26+
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
27+
super.assignAttributes(reader, parent);
28+
29+
// no attributes.
30+
}
31+
32+
@Override
33+
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
34+
super.writeChildren(writer, context, parent);
35+
Context c = (Context) parent;
36+
37+
for (ContextEntry ce : c.getContextEntry()) {
38+
writeChildrenNode(writer, context, ce, CONTEXT_ENTRY);
39+
}
40+
}
41+
42+
@Override
43+
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
44+
super.writeAttributes(writer, parent);
45+
46+
// no attributes.
47+
}
48+
49+
public ContextConverter(XStream xstream) {
50+
super(xstream);
51+
}
52+
53+
@Override
54+
protected Object createModelObject() {
55+
return new Context();
56+
}
57+
58+
@Override
59+
public boolean canConvert(Class clazz) {
60+
return clazz.equals( Context.class );
61+
}
62+
63+
}

0 commit comments

Comments
 (0)