From 19c6d0827ff967d8c69f552f03deb9f7877e9609 Mon Sep 17 00:00:00 2001 From: msmock Date: Sat, 23 May 2015 12:25:26 +0200 Subject: [PATCH] implemented xml serialization for activity, action and value changes. --- .../src/main/java/li/strolch/model/Tags.java | 6 +++ .../li/strolch/model/activity/Action.java | 40 +++++++------- .../li/strolch/model/activity/Activity.java | 11 +++- .../strolch/model/timevalue/IValueChange.java | 9 ++++ .../model/timevalue/impl/ValueChange.java | 16 ++++++ .../li/strolch/model/activity/ActionTest.java | 16 +++--- .../strolch/model/activity/ActivityTest.java | 53 +++++++++++++++++-- .../java/li/strolch/model/activity/action.xml | 5 ++ .../li/strolch/model/activity/activity.xml | 8 +++ 9 files changed, 132 insertions(+), 32 deletions(-) create mode 100644 li.strolch.model/src/test/java/li/strolch/model/activity/action.xml create mode 100644 li.strolch.model/src/test/java/li/strolch/model/activity/activity.xml diff --git a/li.strolch.model/src/main/java/li/strolch/model/Tags.java b/li.strolch.model/src/main/java/li/strolch/model/Tags.java index 96a2569d5..92974fa20 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/Tags.java +++ b/li.strolch.model/src/main/java/li/strolch/model/Tags.java @@ -46,6 +46,12 @@ public class Tags { public static final String ACTION = "Action"; public static final String START = "Start"; public static final String END = "End"; + public static final String VALUE_CHANGE = "ValueChange"; + public static final String VALUE_CLASS = "Class"; + public static final String RESOURCE_ID = "ResourceId"; + public static final String RESOURCE_TYPE = "ResourceType"; + public static final String STATE_ID = "StateId"; + public class Audit { public static final String ID = Tags.ID; diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java b/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java index 348aed945..9f344f0f9 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java @@ -30,8 +30,7 @@ public class Action extends GroupedParameterizedElement implements IActivityElem protected static final long serialVersionUID = 1L; protected Activity parent; - protected String resourceId; - private String resourceType; + protected String resourceId, resourceType; protected State state = State.CREATED; protected final List> changes = new ArrayList<>(); @@ -104,14 +103,6 @@ public class Action extends GroupedParameterizedElement implements IActivityElem return changes; } - @Override - public Element toDom(Document doc) { - Element element = doc.createElement(Tags.ACTION); - fillElement(element); - element.setAttribute(Tags.STATE, this.state.toString()); - return element; - } - @Override public StrolchElement getParent() { return parent; @@ -177,20 +168,33 @@ public class Action extends GroupedParameterizedElement implements IActivityElem @Override public Long getStart() { - Long start = Long.MAX_VALUE; - for (IValueChange change : changes){ - start = Math.min(start, change.getTime()); + Long start = Long.MAX_VALUE; + for (IValueChange change : changes) { + start = Math.min(start, change.getTime()); } - return start; + return start; } @Override public Long getEnd() { - Long end = 0L; - for (IValueChange change : changes){ - end = Math.max(end, change.getTime()); + Long end = 0L; + for (IValueChange change : changes) { + end = Math.max(end, change.getTime()); } - return end; + return end; + } + + @Override + public Element toDom(Document doc) { + Element element = doc.createElement(Tags.ACTION); + fillElement(element); + element.setAttribute(Tags.STATE, this.state.toString()); + element.setAttribute(Tags.RESOURCE_ID, this.resourceId); + element.setAttribute(Tags.RESOURCE_TYPE, this.resourceType); + for (IValueChange change : changes) { + element.appendChild(change.toDom(doc)); + } + return element; } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java b/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java index 32a69f6d7..b98bb8297 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java @@ -146,7 +146,14 @@ public class Activity extends GroupedParameterizedElement implements IActivityEl @Override public Element toDom(Document doc) { - throw new StrolchException("not implemented yet"); + Element element = doc.createElement(Tags.ACTIVITY); + fillElement(element); + Iterator> elementIterator = elementIterator(); + while (elementIterator.hasNext()) { + IActivityElement activityElement = elementIterator.next().getValue(); + element.appendChild(activityElement.toDom(doc)); + } + return element; } @Override @@ -156,7 +163,7 @@ public class Activity extends GroupedParameterizedElement implements IActivityEl @Override public StrolchRootElement getRootElement() { - return (parent == null) ? null : parent.getRootElement(); + return (parent == null) ? this : parent.getRootElement(); } @Override diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValueChange.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValueChange.java index 5fcd1c3c2..f9b880239 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValueChange.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValueChange.java @@ -18,6 +18,9 @@ package li.strolch.model.timevalue; import li.strolch.model.timedstate.AbstractStrolchTimedState; import li.strolch.model.timevalue.impl.TimeVariable; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + /** * Interface for operators to be used to change the values of {@link ITimeValue} * in a {@link ITimeVariable} or {@link AbstractStrolchTimedState}. @@ -64,5 +67,11 @@ public interface IValueChange { * @return a copy of this */ IValueChange getClone(); + + /** + * @param doc + * @return a xml serialisation of this + */ + Element toDom(Document doc); } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/ValueChange.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/ValueChange.java index 02bab84f3..db56b0936 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/ValueChange.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/ValueChange.java @@ -17,9 +17,15 @@ package li.strolch.model.timevalue.impl; import java.io.Serializable; +import li.strolch.model.Tags; import li.strolch.model.timevalue.IValue; import li.strolch.model.timevalue.IValueChange; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import ch.eitchnet.utils.iso8601.ISO8601FormatFactory; + /** * @author Martin Smock */ @@ -148,4 +154,14 @@ public class ValueChange implements IValueChange, Serializa return new ValueChange(time, value); } + @Override + public Element toDom(Document doc) { + Element element = doc.createElement(Tags.VALUE_CHANGE); + element.setAttribute(Tags.STATE_ID, this.stateId); + element.setAttribute(Tags.TIME, ISO8601FormatFactory.getInstance().formatDate(time)); + element.setAttribute(Tags.VALUE, this.value.getValueAsString()); + element.setAttribute(Tags.VALUE_CLASS, this.value.getClass().getName()); + return element; + } + } diff --git a/li.strolch.model/src/test/java/li/strolch/model/activity/ActionTest.java b/li.strolch.model/src/test/java/li/strolch/model/activity/ActionTest.java index 17f662e10..d13369e62 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/activity/ActionTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/activity/ActionTest.java @@ -9,7 +9,6 @@ import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -37,6 +36,8 @@ public class ActionTest { public void init() { // create action action = new Action("action_1", "Action 1", "Use"); + action.setResourceId("dummyRe"); + action.setResourceType("dummyReType"); IValueChange startChange = new ValueChange<>(STATE_TIME_10, new IntegerValue(1)); startChange.setStateId(STATE_INTEGER_ID); @@ -71,18 +72,15 @@ public class ActionTest { @Test public void testToDOM() throws ParserConfigurationException, TransformerException { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document document = db.newDocument(); Element dom = action.toDom(document); document.appendChild(dom); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - StringWriter writer = new StringWriter(); - transformer.transform(new DOMSource(document), new StreamResult(writer)); - String content = writer.getBuffer().toString(); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + StringWriter stringWriter = new StringWriter(); + transformer.transform(new DOMSource(document), new StreamResult(stringWriter)); + String content = stringWriter.getBuffer().toString(); System.out.println(content); } diff --git a/li.strolch.model/src/test/java/li/strolch/model/activity/ActivityTest.java b/li.strolch.model/src/test/java/li/strolch/model/activity/ActivityTest.java index 8917edd89..c0570c0d6 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/activity/ActivityTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/activity/ActivityTest.java @@ -1,11 +1,24 @@ package li.strolch.model.activity; +import java.io.StringWriter; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + import li.strolch.exception.StrolchException; import li.strolch.model.State; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class ActivityTest { @@ -19,11 +32,13 @@ public class ActivityTest { public void init() { // create activity element - activity = new Activity("activity", "Activity", "mayorType"); + activity = new Activity("activity", "Activity", "parentType"); // create action 1 action_1 = new Action("action_1", "Action 1", "Use"); action_1.setState(State.CREATED); + action_1.setResourceType("dummyType"); + action_1.setResourceId("dummyId"); activity.addElement(action_1); @@ -32,12 +47,16 @@ public class ActivityTest { // create action 2 action_2 = new Action("action_2", "Action 2", "Use"); action_2.setState(State.PLANNED); + action_2.setResourceType("dummyType"); + action_2.setResourceId("dummyId"); childActivity.addElement(action_2); // create action 3 action_3 = new Action("action_3", "Action 3", "Use"); action_3.setState(State.CREATED); + action_3.setResourceType("dummyType"); + action_3.setResourceId("dummyId"); childActivity.addElement(action_3); @@ -86,10 +105,38 @@ public class ActivityTest { } @Test - public void getParentTest(){ + public void parentTests(){ Assert.assertNull(activity.getParent()); - Assert.assertNull(activity.getRootElement()); + Assert.assertEquals(activity, activity.getRootElement()); Assert.assertTrue(activity.isRootElement()); + + Assert.assertEquals(activity, childActivity.getParent()); + Assert.assertEquals(activity, childActivity.getRootElement()); + Assert.assertFalse(childActivity.isRootElement()); + + Assert.assertEquals(childActivity, action_2.getParent()); + Assert.assertEquals(activity, action_2.getRootElement()); + Assert.assertFalse(action_2.isRootElement()); + } + + /** + * no test. Just to see the XML serialization in the console + */ + // @Test + public void testToDOM() throws ParserConfigurationException, TransformerException { + + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document document = db.newDocument(); + Element dom = activity.toDom(document); + document.appendChild(dom); + + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + StringWriter writer = new StringWriter(); + transformer.transform(new DOMSource(document), new StreamResult(writer)); + String content = writer.getBuffer().toString(); + System.out.println(content); + } } diff --git a/li.strolch.model/src/test/java/li/strolch/model/activity/action.xml b/li.strolch.model/src/test/java/li/strolch/model/activity/action.xml new file mode 100644 index 000000000..c7b4fd3ee --- /dev/null +++ b/li.strolch.model/src/test/java/li/strolch/model/activity/action.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/li.strolch.model/src/test/java/li/strolch/model/activity/activity.xml b/li.strolch.model/src/test/java/li/strolch/model/activity/activity.xml new file mode 100644 index 000000000..4549cfb8e --- /dev/null +++ b/li.strolch.model/src/test/java/li/strolch/model/activity/activity.xml @@ -0,0 +1,8 @@ + + + + + + + +