[Major] changed XML format of time value of TimedStates to be ISO8601

This commit is contained in:
Robert von Burg 2014-10-04 17:45:33 +02:00
parent c1cdfbb4ea
commit 8f50a159b1
6 changed files with 55 additions and 34 deletions

View File

@ -15,6 +15,7 @@
*/ */
package li.strolch.model.timedstate; package li.strolch.model.timedstate;
import java.util.Date;
import java.util.SortedSet; import java.util.SortedSet;
import li.strolch.model.Tags; import li.strolch.model.Tags;
@ -25,6 +26,8 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
@ -50,7 +53,10 @@ public class BooleanTimedState extends AbstractStrolchTimedState<BooleanValue> {
NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE); NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE);
for (int i = 0; i < timeValueElems.getLength(); i++) { for (int i = 0; i < timeValueElems.getLength(); i++) {
Element timeValueElem = (Element) timeValueElems.item(i); Element timeValueElem = (Element) timeValueElems.item(i);
Long time = Long.valueOf(timeValueElem.getAttribute(Tags.TIME)); String timeS = timeValueElem.getAttribute(Tags.TIME);
Date date = ISO8601FormatFactory.getInstance().parseDate(timeS);
long time = date.getTime();
Boolean value = Boolean.valueOf(timeValueElem.getAttribute(Tags.VALUE)); Boolean value = Boolean.valueOf(timeValueElem.getAttribute(Tags.VALUE));
BooleanValue booleanValue = new BooleanValue(value); BooleanValue booleanValue = new BooleanValue(value);
this.state.getTimeEvolution().setValueAt(time, booleanValue); this.state.getTimeEvolution().setValueAt(time, booleanValue);
@ -67,7 +73,7 @@ public class BooleanTimedState extends AbstractStrolchTimedState<BooleanValue> {
Long time = timeValue.getTime(); Long time = timeValue.getTime();
BooleanValue value = timeValue.getValue(); BooleanValue value = timeValue.getValue();
Element valueElem = doc.createElement(Tags.VALUE); Element valueElem = doc.createElement(Tags.VALUE);
valueElem.setAttribute(Tags.TIME, time.toString()); valueElem.setAttribute(Tags.TIME, ISO8601FormatFactory.getInstance().formatDate(time));
valueElem.setAttribute(Tags.VALUE, value.getValue().toString()); valueElem.setAttribute(Tags.VALUE, value.getValue().toString());
stateElement.appendChild(valueElem); stateElement.appendChild(valueElem);
} }

View File

@ -15,6 +15,7 @@
*/ */
package li.strolch.model.timedstate; package li.strolch.model.timedstate;
import java.util.Date;
import java.util.SortedSet; import java.util.SortedSet;
import li.strolch.model.Tags; import li.strolch.model.Tags;
@ -25,6 +26,8 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
@ -50,7 +53,10 @@ public class FloatTimedState extends AbstractStrolchTimedState<FloatValue> {
NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE); NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE);
for (int i = 0; i < timeValueElems.getLength(); i++) { for (int i = 0; i < timeValueElems.getLength(); i++) {
Element timeValueElem = (Element) timeValueElems.item(i); Element timeValueElem = (Element) timeValueElems.item(i);
Long time = Long.valueOf(timeValueElem.getAttribute(Tags.TIME)); String timeS = timeValueElem.getAttribute(Tags.TIME);
Date date = ISO8601FormatFactory.getInstance().parseDate(timeS);
long time = date.getTime();
Double value = Double.valueOf(timeValueElem.getAttribute(Tags.VALUE)); Double value = Double.valueOf(timeValueElem.getAttribute(Tags.VALUE));
FloatValue floatValue = new FloatValue(value); FloatValue floatValue = new FloatValue(value);
this.state.getTimeEvolution().setValueAt(time, floatValue); this.state.getTimeEvolution().setValueAt(time, floatValue);
@ -67,7 +73,7 @@ public class FloatTimedState extends AbstractStrolchTimedState<FloatValue> {
Long time = timeValue.getTime(); Long time = timeValue.getTime();
FloatValue value = timeValue.getValue(); FloatValue value = timeValue.getValue();
Element valueElem = doc.createElement(Tags.VALUE); Element valueElem = doc.createElement(Tags.VALUE);
valueElem.setAttribute(Tags.TIME, time.toString()); valueElem.setAttribute(Tags.TIME, ISO8601FormatFactory.getInstance().formatDate(time));
valueElem.setAttribute(Tags.VALUE, value.getValue().toString()); valueElem.setAttribute(Tags.VALUE, value.getValue().toString());
stateElement.appendChild(valueElem); stateElement.appendChild(valueElem);
} }

View File

@ -15,6 +15,7 @@
*/ */
package li.strolch.model.timedstate; package li.strolch.model.timedstate;
import java.util.Date;
import java.util.SortedSet; import java.util.SortedSet;
import li.strolch.model.Tags; import li.strolch.model.Tags;
@ -25,6 +26,8 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
@ -50,7 +53,10 @@ public class IntegerTimedState extends AbstractStrolchTimedState<IntegerValue> {
NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE); NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE);
for (int i = 0; i < timeValueElems.getLength(); i++) { for (int i = 0; i < timeValueElems.getLength(); i++) {
Element timeValueElem = (Element) timeValueElems.item(i); Element timeValueElem = (Element) timeValueElems.item(i);
Long time = Long.valueOf(timeValueElem.getAttribute(Tags.TIME)); String timeS = timeValueElem.getAttribute(Tags.TIME);
Date date = ISO8601FormatFactory.getInstance().parseDate(timeS);
long time = date.getTime();
Integer value = Integer.valueOf(timeValueElem.getAttribute(Tags.VALUE)); Integer value = Integer.valueOf(timeValueElem.getAttribute(Tags.VALUE));
IntegerValue integerValue = new IntegerValue(value); IntegerValue integerValue = new IntegerValue(value);
this.state.getTimeEvolution().setValueAt(time, integerValue); this.state.getTimeEvolution().setValueAt(time, integerValue);
@ -67,7 +73,7 @@ public class IntegerTimedState extends AbstractStrolchTimedState<IntegerValue> {
Long time = timeValue.getTime(); Long time = timeValue.getTime();
IntegerValue value = timeValue.getValue(); IntegerValue value = timeValue.getValue();
Element valueElem = doc.createElement(Tags.VALUE); Element valueElem = doc.createElement(Tags.VALUE);
valueElem.setAttribute(Tags.TIME, time.toString()); valueElem.setAttribute(Tags.TIME, ISO8601FormatFactory.getInstance().formatDate(time));
valueElem.setAttribute(Tags.VALUE, value.getValue().toString()); valueElem.setAttribute(Tags.VALUE, value.getValue().toString());
stateElement.appendChild(valueElem); stateElement.appendChild(valueElem);
} }

View File

@ -15,6 +15,7 @@
*/ */
package li.strolch.model.timedstate; package li.strolch.model.timedstate;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
@ -29,6 +30,8 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
@ -54,7 +57,9 @@ public class StringSetTimedState extends AbstractStrolchTimedState<StringSetValu
NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE); NodeList timeValueElems = element.getElementsByTagName(Tags.VALUE);
for (int i = 0; i < timeValueElems.getLength(); i++) { for (int i = 0; i < timeValueElems.getLength(); i++) {
Element timeValueElem = (Element) timeValueElems.item(i); Element timeValueElem = (Element) timeValueElems.item(i);
Long time = Long.valueOf(timeValueElem.getAttribute(Tags.TIME)); String timeS = timeValueElem.getAttribute(Tags.TIME);
Date date = ISO8601FormatFactory.getInstance().parseDate(timeS);
long time = date.getTime();
String valueAsString = timeValueElem.getAttribute(Tags.VALUE); String valueAsString = timeValueElem.getAttribute(Tags.VALUE);
Set<AString> value = new HashSet<>(); Set<AString> value = new HashSet<>();
@ -90,7 +95,7 @@ public class StringSetTimedState extends AbstractStrolchTimedState<StringSetValu
String valueAsString = sb.toString(); String valueAsString = sb.toString();
Element valueElem = doc.createElement(Tags.VALUE); Element valueElem = doc.createElement(Tags.VALUE);
valueElem.setAttribute(Tags.TIME, time.toString()); valueElem.setAttribute(Tags.TIME, ISO8601FormatFactory.getInstance().formatDate(time));
valueElem.setAttribute(Tags.VALUE, valueAsString); valueElem.setAttribute(Tags.VALUE, valueAsString);
stateElement.appendChild(valueElem); stateElement.appendChild(valueElem);
} }

View File

@ -213,19 +213,18 @@ public class XmlModelSaxReader extends DefaultHandler {
case Tags.VALUE: case Tags.VALUE:
String valueTime = attributes.getValue(Tags.TIME); String valueTime = attributes.getValue(Tags.TIME);
Date date = ISO8601FormatFactory.getInstance().parseDate(valueTime);
long time = date.getTime();
String valueValue = attributes.getValue(Tags.VALUE); String valueValue = attributes.getValue(Tags.VALUE);
switch (this.stateType) { switch (this.stateType) {
case FloatTimedState.TYPE: case FloatTimedState.TYPE:
((FloatTimedState) this.state).getTimeEvolution().setValueAt(Long.valueOf(valueTime), ((FloatTimedState) this.state).getTimeEvolution().setValueAt(time, new FloatValue(valueValue));
new FloatValue(valueValue));
break; break;
case IntegerTimedState.TYPE: case IntegerTimedState.TYPE:
((IntegerTimedState) this.state).getTimeEvolution().setValueAt(Long.valueOf(valueTime), ((IntegerTimedState) this.state).getTimeEvolution().setValueAt(time, new IntegerValue(valueValue));
new IntegerValue(valueValue));
break; break;
case BooleanTimedState.TYPE: case BooleanTimedState.TYPE:
((BooleanTimedState) this.state).getTimeEvolution().setValueAt(Long.valueOf(valueTime), ((BooleanTimedState) this.state).getTimeEvolution().setValueAt(time, new BooleanValue(valueValue));
new BooleanValue(valueValue));
break; break;
case StringSetTimedState.TYPE: case StringSetTimedState.TYPE:
@ -236,8 +235,7 @@ public class XmlModelSaxReader extends DefaultHandler {
} }
StringSetValue stringSetValue = new StringSetValue(value); StringSetValue stringSetValue = new StringSetValue(value);
((StringSetTimedState) this.state).getTimeEvolution().setValueAt(Long.valueOf(valueTime), ((StringSetTimedState) this.state).getTimeEvolution().setValueAt(time, stringSetValue);
stringSetValue);
break; break;
default: default:
break; break;

View File

@ -15,30 +15,30 @@
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" /> <Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
</ParameterBag> </ParameterBag>
<TimedState Id="@booleanState" Name="Boolean State" Type="BooleanState"> <TimedState Id="@booleanState" Name="Boolean State" Type="BooleanState">
<Value Time="0" Value="false" /> <Value Time="1970-01-01T00:00:00.000+01:00" Value="false" />
<Value Time="1" Value="true" /> <Value Time="1970-01-01T00:01:00.000+01:00" Value="true" />
<Value Time="2" Value="false" /> <Value Time="1970-01-01T00:02:00.000+01:00" Value="false" />
</TimedState> </TimedState>
<TimedState Id="@integerState" Name="Integer State" Type="IntegerState"> <TimedState Id="@integerState" Name="Integer State" Type="IntegerState">
<Value Time="0" Value="1" /> <Value Time="1970-01-01T00:00:00.000+01:00" Value="1" />
<Value Time="1" Value="2" /> <Value Time="1970-01-01T00:01:00.000+01:00" Value="2" />
<Value Time="2" Value="3" /> <Value Time="1970-01-01T00:02:00.000+01:00" Value="3" />
<Value Time="3" Value="2" /> <Value Time="1970-01-01T00:03:00.000+01:00" Value="2" />
<Value Time="4" Value="1" /> <Value Time="1970-01-01T00:04:00.000+01:00" Value="1" />
<Value Time="5" Value="0" /> <Value Time="1970-01-01T00:05:00.000+01:00" Value="0" />
</TimedState> </TimedState>
<TimedState Id="@floatState" Name="Float State" Type="FloatState"> <TimedState Id="@floatState" Name="Float State" Type="FloatState">
<Value Time="0" Value="1.1" /> <Value Time="1970-01-01T00:00:00.000+01:00" Value="1.1" />
<Value Time="1" Value="2.2" /> <Value Time="1970-01-01T00:01:00.000+01:00" Value="2.2" />
<Value Time="2" Value="3.3" /> <Value Time="1970-01-01T00:02:00.000+01:00" Value="3.3" />
<Value Time="3" Value="2.2" /> <Value Time="1970-01-01T00:03:00.000+01:00" Value="2.2" />
<Value Time="4" Value="1.1" /> <Value Time="1970-01-01T00:04:00.000+01:00" Value="1.1" />
<Value Time="5" Value="0.0" /> <Value Time="1970-01-01T00:05:00.000+01:00" Value="0.0" />
</TimedState> </TimedState>
<TimedState Id="@stringSetState" Name="StringSet State" Type="StringSetState"> <TimedState Id="@stringSetState" Name="StringSet State" Type="StringSetState">
<Value Time="0" Value="foo" /> <Value Time="1970-01-01T00:00:00.000+01:00" Value="foo" />
<Value Time="1" Value="foo, bar" /> <Value Time="1970-01-01T00:01:00.000+01:00" Value="foo, bar" />
<Value Time="2" Value="bar" /> <Value Time="1970-01-01T00:02:00.000+01:00" Value="bar" />
</TimedState> </TimedState>
</Resource> </Resource>
</StrolchModel> </StrolchModel>