[New] Added proper marshalling to/from JSON for entire model
This commit is contained in:
parent
1d8dbf875f
commit
47df6b20c7
|
@ -315,7 +315,7 @@ public class ModelGenerator {
|
||||||
*/
|
*/
|
||||||
public static PolicyDefs createPolicyDefs() {
|
public static PolicyDefs createPolicyDefs() {
|
||||||
PolicyDefs policyDefs = new PolicyDefs();
|
PolicyDefs policyDefs = new PolicyDefs();
|
||||||
PolicyDef policyDef = new JavaPolicyDef("ObjectPolicy", "java.lang.Object");
|
PolicyDef policyDef = new JavaPolicyDef("ObjectPolicy", Object.class.getName());
|
||||||
policyDefs.addOrUpdate(policyDef);
|
policyDefs.addOrUpdate(policyDef);
|
||||||
return policyDefs;
|
return policyDefs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@ public class Tags {
|
||||||
public static final String ACTION = "Action";
|
public static final String ACTION = "Action";
|
||||||
public static final String START = "Start";
|
public static final String START = "Start";
|
||||||
public static final String END = "End";
|
public static final String END = "End";
|
||||||
|
public static final String VALUE_CHANGES = "ValueChanges";
|
||||||
public static final String VALUE_CHANGE = "ValueChange";
|
public static final String VALUE_CHANGE = "ValueChange";
|
||||||
public static final String RESOURCE_ID = "ResourceId";
|
public static final String RESOURCE_ID = "ResourceId";
|
||||||
public static final String RESOURCE_TYPE = "ResourceType";
|
public static final String RESOURCE_TYPE = "ResourceType";
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* 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 li.strolch.model.json;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.model.activity.Activity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public class ActivityFromJsonVisitor extends StrolchElementFromJsonVisitor {
|
||||||
|
|
||||||
|
public Activity visit(JsonObject jsonObject) {
|
||||||
|
Activity activity = new Activity();
|
||||||
|
fillElement(jsonObject, activity);
|
||||||
|
return activity;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,12 +8,16 @@ import li.strolch.model.activity.Activity;
|
||||||
|
|
||||||
public class ActivityToJsonVisitor extends StrolchElementToJsonVisitor implements ActivityVisitor<JsonObject> {
|
public class ActivityToJsonVisitor extends StrolchElementToJsonVisitor implements ActivityVisitor<JsonObject> {
|
||||||
|
|
||||||
|
private JsonObject jsonObject;
|
||||||
|
|
||||||
|
public JsonObject getJsonObject() {
|
||||||
|
return this.jsonObject;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonObject visit(Activity element) {
|
public JsonObject visit(Activity element) {
|
||||||
|
this.jsonObject = toJson(element);
|
||||||
JsonObject rootJ = toJson(element);
|
return this.jsonObject;
|
||||||
|
|
||||||
return rootJ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toJsonString(Activity element) {
|
public static String toJsonString(Activity element) {
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* 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 li.strolch.model.json;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.model.Order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public class OrderFromJsonVisitor extends StrolchElementFromJsonVisitor {
|
||||||
|
|
||||||
|
public Order visit(JsonObject jsonObject) {
|
||||||
|
Order order = new Order();
|
||||||
|
fillElement(jsonObject, order);
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,12 +8,16 @@ import li.strolch.model.OrderVisitor;
|
||||||
|
|
||||||
public class OrderToJsonVisitor extends StrolchElementToJsonVisitor implements OrderVisitor<JsonObject> {
|
public class OrderToJsonVisitor extends StrolchElementToJsonVisitor implements OrderVisitor<JsonObject> {
|
||||||
|
|
||||||
|
private JsonObject jsonObject;
|
||||||
|
|
||||||
|
public JsonObject getJsonObject() {
|
||||||
|
return this.jsonObject;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonObject visit(Order element) {
|
public JsonObject visit(Order element) {
|
||||||
|
this.jsonObject = toJson(element);
|
||||||
JsonObject rootJ = toJson(element);
|
return this.jsonObject;
|
||||||
|
|
||||||
return rootJ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toJsonString(Order element) {
|
public static String toJsonString(Order element) {
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* 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 li.strolch.model.json;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public class ResourceFromJsonVisitor extends StrolchElementFromJsonVisitor {
|
||||||
|
|
||||||
|
public Resource visit(JsonObject jsonObject) {
|
||||||
|
Resource resource = new Resource();
|
||||||
|
fillElement(jsonObject, resource);
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,12 +8,16 @@ import li.strolch.model.ResourceVisitor;
|
||||||
|
|
||||||
public class ResourceToJsonVisitor extends StrolchElementToJsonVisitor implements ResourceVisitor<JsonObject> {
|
public class ResourceToJsonVisitor extends StrolchElementToJsonVisitor implements ResourceVisitor<JsonObject> {
|
||||||
|
|
||||||
|
private JsonObject jsonObject;
|
||||||
|
|
||||||
|
public JsonObject getJsonObject() {
|
||||||
|
return this.jsonObject;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonObject visit(Resource element) {
|
public JsonObject visit(Resource element) {
|
||||||
|
this.jsonObject = toJson(element);
|
||||||
JsonObject rootJ = toJson(element);
|
return this.jsonObject;
|
||||||
|
|
||||||
return rootJ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toJsonString(Resource element) {
|
public static String toJsonString(Resource element) {
|
||||||
|
|
|
@ -0,0 +1,352 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* 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 li.strolch.model.json;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.exception.StrolchException;
|
||||||
|
import li.strolch.model.AbstractStrolchElement;
|
||||||
|
import li.strolch.model.GroupedParameterizedElement;
|
||||||
|
import li.strolch.model.Order;
|
||||||
|
import li.strolch.model.ParameterBag;
|
||||||
|
import li.strolch.model.ParameterizedElement;
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
import li.strolch.model.State;
|
||||||
|
import li.strolch.model.StrolchValueType;
|
||||||
|
import li.strolch.model.Tags;
|
||||||
|
import li.strolch.model.activity.Action;
|
||||||
|
import li.strolch.model.activity.Activity;
|
||||||
|
import li.strolch.model.parameter.Parameter;
|
||||||
|
import li.strolch.model.policy.PolicyDef;
|
||||||
|
import li.strolch.model.policy.PolicyDefs;
|
||||||
|
import li.strolch.model.timedstate.StrolchTimedState;
|
||||||
|
import li.strolch.model.timevalue.IValue;
|
||||||
|
import li.strolch.model.timevalue.impl.ValueChange;
|
||||||
|
import li.strolch.utils.dbc.DBC;
|
||||||
|
import li.strolch.utils.iso8601.ISO8601FormatFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public class StrolchElementFromJsonVisitor {
|
||||||
|
|
||||||
|
public void fillElement(JsonObject jsonObject, Order order) {
|
||||||
|
fillElement(jsonObject, (GroupedParameterizedElement) order);
|
||||||
|
|
||||||
|
// policies
|
||||||
|
PolicyDefs defs = parsePolicies(jsonObject);
|
||||||
|
if (defs.hasPolicyDefs())
|
||||||
|
order.setPolicyDefs(defs);
|
||||||
|
|
||||||
|
// attributes
|
||||||
|
if (jsonObject.has(Tags.DATE)) {
|
||||||
|
String date = jsonObject.get(Tags.DATE).getAsString();
|
||||||
|
order.setDate(ISO8601FormatFactory.getInstance().getDateFormat().parse(date));
|
||||||
|
} else {
|
||||||
|
order.setDate(ISO8601FormatFactory.getInstance().getDateFormat().parse("-")); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsonObject.has(Tags.STATE)) {
|
||||||
|
order.setState(State.valueOf(jsonObject.get(Tags.STATE).getAsString()));
|
||||||
|
} else {
|
||||||
|
order.setState(State.CREATED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fillElement(JsonObject jsonObject, Resource resource) {
|
||||||
|
fillElement(jsonObject, (GroupedParameterizedElement) resource);
|
||||||
|
|
||||||
|
// policies
|
||||||
|
PolicyDefs defs = parsePolicies(jsonObject);
|
||||||
|
if (defs.hasPolicyDefs())
|
||||||
|
resource.setPolicyDefs(defs);
|
||||||
|
|
||||||
|
// time states
|
||||||
|
if (!jsonObject.has(Tags.TIMED_STATES))
|
||||||
|
return;
|
||||||
|
|
||||||
|
JsonObject timedStatesJ = jsonObject.getAsJsonObject(Tags.TIMED_STATES);
|
||||||
|
Set<Entry<String, JsonElement>> entrySet = timedStatesJ.entrySet();
|
||||||
|
for (Entry<String, JsonElement> entry : entrySet) {
|
||||||
|
|
||||||
|
String stateId = entry.getKey();
|
||||||
|
JsonObject timeStateJ = entry.getValue().getAsJsonObject();
|
||||||
|
|
||||||
|
// evaluate type of TimedState
|
||||||
|
String typeS = timeStateJ.get(Tags.TYPE).getAsString();
|
||||||
|
DBC.PRE.assertNotEmpty("Type must be set on TimedState for resource with id " + resource.getId(), typeS);
|
||||||
|
StrolchValueType valueType = StrolchValueType.parse(typeS);
|
||||||
|
StrolchTimedState<? extends IValue<?>> timedState = valueType.timedStateInstance();
|
||||||
|
|
||||||
|
// attributes
|
||||||
|
fillElement(timeStateJ, (AbstractStrolchElement) timedState);
|
||||||
|
|
||||||
|
// consistency of JSON key and object.id
|
||||||
|
if (!stateId.equals(timedState.getId())) {
|
||||||
|
String msg = "Check the values of the jsonElement: {0} JsonObject key not same as object.id!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, timeStateJ);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// further attributes
|
||||||
|
if (timeStateJ.has(Tags.INTERPRETATION))
|
||||||
|
timedState.setInterpretation(timeStateJ.get(Tags.INTERPRETATION).getAsString());
|
||||||
|
if (timeStateJ.has(Tags.UOM))
|
||||||
|
timedState.setUom(timeStateJ.get(Tags.UOM).getAsString());
|
||||||
|
if (timeStateJ.has(Tags.INDEX))
|
||||||
|
timedState.setIndex(timeStateJ.get(Tags.INDEX).getAsInt());
|
||||||
|
if (timeStateJ.has(Tags.HIDDEN))
|
||||||
|
timedState.setHidden(timeStateJ.get(Tags.HIDDEN).getAsBoolean());
|
||||||
|
|
||||||
|
resource.addTimedState(timedState);
|
||||||
|
|
||||||
|
if (!timeStateJ.has(Tags.VALUES))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
JsonArray valuesJ = timeStateJ.getAsJsonArray(Tags.VALUES);
|
||||||
|
valuesJ.forEach(e -> {
|
||||||
|
|
||||||
|
JsonObject timeValueJ = e.getAsJsonObject();
|
||||||
|
|
||||||
|
String timeS = timeValueJ.get(Tags.TIME).getAsString();
|
||||||
|
long time = ISO8601FormatFactory.getInstance().parseDate(timeS).getTime();
|
||||||
|
|
||||||
|
String valueS = timeValueJ.get(Tags.VALUE).getAsString();
|
||||||
|
timedState.setStateFromStringAt(time, valueS);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fillElement(JsonObject jsonObject, Activity activity) {
|
||||||
|
fillElement(jsonObject, (GroupedParameterizedElement) activity);
|
||||||
|
|
||||||
|
// policies
|
||||||
|
PolicyDefs defs = parsePolicies(jsonObject);
|
||||||
|
if (defs.hasPolicyDefs())
|
||||||
|
activity.setPolicyDefs(defs);
|
||||||
|
|
||||||
|
if (!jsonObject.has(Tags.ELEMENTS))
|
||||||
|
return;
|
||||||
|
|
||||||
|
JsonArray elementsJsonArray = jsonObject.getAsJsonArray(Tags.ELEMENTS);
|
||||||
|
elementsJsonArray.forEach(e -> {
|
||||||
|
|
||||||
|
JsonObject elementJsonObject = e.getAsJsonObject();
|
||||||
|
String objectType = elementJsonObject.get(Tags.OBJECT_TYPE).getAsString();
|
||||||
|
|
||||||
|
switch (objectType) {
|
||||||
|
case Tags.ACTIVITY:
|
||||||
|
Activity childActivity = new Activity();
|
||||||
|
fillElement(elementJsonObject, childActivity);
|
||||||
|
activity.addElement(childActivity);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Tags.ACTION:
|
||||||
|
Action childAction = new Action();
|
||||||
|
fillElement(elementJsonObject, childAction);
|
||||||
|
activity.addElement(childAction);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
String msg = "Check the values of the jsonObject: {0} unknown object Type {1} !"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, elementJsonObject, objectType);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fillElement(JsonObject jsonObject, AbstractStrolchElement strolchElement) {
|
||||||
|
if (jsonObject.has(Tags.ID) && jsonObject.has(Tags.NAME)) {
|
||||||
|
strolchElement.setId(jsonObject.get(Tags.ID).getAsString());
|
||||||
|
strolchElement.setName(jsonObject.get(Tags.NAME).getAsString());
|
||||||
|
} else {
|
||||||
|
String msg = "Check the values of the jsonObject: {0} either id or name attribute is null!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonObject);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fillElement(JsonObject jsonObject, GroupedParameterizedElement groupedParameterizedElement) {
|
||||||
|
fillElement(jsonObject, (AbstractStrolchElement) groupedParameterizedElement);
|
||||||
|
|
||||||
|
if (jsonObject.has(Tags.TYPE)) {
|
||||||
|
groupedParameterizedElement.setType(jsonObject.get(Tags.TYPE).getAsString());
|
||||||
|
} else {
|
||||||
|
String msg = "Check the values of the jsonObject: {0} type attribute is null!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonObject);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add all the parameter bags
|
||||||
|
if (!jsonObject.has(Tags.PARAMETER_BAGS))
|
||||||
|
return;
|
||||||
|
|
||||||
|
JsonObject bagsJsonObject = jsonObject.getAsJsonObject(Tags.PARAMETER_BAGS);
|
||||||
|
|
||||||
|
Set<Entry<String, JsonElement>> bags = bagsJsonObject.entrySet();
|
||||||
|
for (Entry<String, JsonElement> entry : bags) {
|
||||||
|
String bagId = entry.getKey();
|
||||||
|
JsonElement jsonElement = entry.getValue();
|
||||||
|
if (!jsonElement.isJsonObject()) {
|
||||||
|
String msg = "Check the values of the jsonElement: {0} it is not a JsonObject!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonElement);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObject bagJsonObject = jsonElement.getAsJsonObject();
|
||||||
|
ParameterBag bag = new ParameterBag();
|
||||||
|
fillElement(bagJsonObject, bag);
|
||||||
|
if (!bagId.equals(bag.getId())) {
|
||||||
|
String msg = "Check the values of the jsonElement: {0} JsonObject key not same as object.id!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonElement);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
groupedParameterizedElement.addParameterBag(bag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fillElement(JsonObject jsonObject, ParameterizedElement parameterizedElement) {
|
||||||
|
fillElement(jsonObject, (AbstractStrolchElement) parameterizedElement);
|
||||||
|
|
||||||
|
if (jsonObject.has(Tags.TYPE)) {
|
||||||
|
parameterizedElement.setType(jsonObject.get(Tags.TYPE).getAsString());
|
||||||
|
} else {
|
||||||
|
String msg = "Check the values of the jsonObject: {0} type attribute is null!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonObject);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add all the parameters
|
||||||
|
if (!jsonObject.has(Tags.PARAMETERS))
|
||||||
|
return;
|
||||||
|
|
||||||
|
JsonObject parametersJsonObject = jsonObject.getAsJsonObject(Tags.PARAMETERS);
|
||||||
|
Set<Entry<String, JsonElement>> parameters = parametersJsonObject.entrySet();
|
||||||
|
for (Entry<String, JsonElement> entry : parameters) {
|
||||||
|
String paramId = entry.getKey();
|
||||||
|
JsonElement jsonElement = entry.getValue();
|
||||||
|
if (!jsonElement.isJsonObject()) {
|
||||||
|
String msg = "Check the values of the jsonElement: {0} it is not a JsonObject!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonElement);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObject paramJsonObject = jsonElement.getAsJsonObject();
|
||||||
|
String paramtype = paramJsonObject.get(Tags.TYPE).getAsString();
|
||||||
|
|
||||||
|
StrolchValueType paramValueType = StrolchValueType.parse(paramtype);
|
||||||
|
Parameter<?> parameter = paramValueType.parameterInstance();
|
||||||
|
fillElement(paramJsonObject, parameter);
|
||||||
|
if (!paramId.equals(parameter.getId())) {
|
||||||
|
String msg = "Check the values of the jsonElement: {0} JsonObject key not same as object.id!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, jsonElement);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
parameterizedElement.addParameter(parameter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fillElement(JsonObject jsonObject, Parameter<?> param) {
|
||||||
|
fillElement(jsonObject, (AbstractStrolchElement) param);
|
||||||
|
|
||||||
|
if (jsonObject.has(Tags.INTERPRETATION))
|
||||||
|
param.setInterpretation(jsonObject.get(Tags.INTERPRETATION).getAsString());
|
||||||
|
if (jsonObject.has(Tags.UOM))
|
||||||
|
param.setUom(jsonObject.get(Tags.UOM).getAsString());
|
||||||
|
if (jsonObject.has(Tags.INDEX))
|
||||||
|
param.setIndex(jsonObject.get(Tags.INDEX).getAsInt());
|
||||||
|
if (jsonObject.has(Tags.HIDDEN))
|
||||||
|
param.setHidden(jsonObject.get(Tags.HIDDEN).getAsBoolean());
|
||||||
|
|
||||||
|
String value = jsonObject.get(Tags.VALUE).getAsString();
|
||||||
|
param.setValueFromString(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fillElement(JsonObject jsonObject, Action action) {
|
||||||
|
fillElement(jsonObject, (GroupedParameterizedElement) action);
|
||||||
|
|
||||||
|
// attributes
|
||||||
|
if (jsonObject.has(Tags.RESOURCE_ID))
|
||||||
|
action.setResourceId(jsonObject.get(Tags.RESOURCE_ID).getAsString());
|
||||||
|
if (jsonObject.has(Tags.RESOURCE_TYPE))
|
||||||
|
action.setResourceType(jsonObject.get(Tags.RESOURCE_TYPE).getAsString());
|
||||||
|
if (jsonObject.has(Tags.STATE))
|
||||||
|
action.setState(State.valueOf(jsonObject.get(Tags.STATE).getAsString()));
|
||||||
|
|
||||||
|
// policies
|
||||||
|
PolicyDefs defs = parsePolicies(jsonObject);
|
||||||
|
if (defs.hasPolicyDefs())
|
||||||
|
action.setPolicyDefs(defs);
|
||||||
|
|
||||||
|
// value changes
|
||||||
|
if (!jsonObject.has(Tags.VALUE_CHANGES))
|
||||||
|
return;
|
||||||
|
|
||||||
|
JsonArray valueChangesJ = jsonObject.getAsJsonArray(Tags.VALUE_CHANGES);
|
||||||
|
valueChangesJ.forEach(e -> {
|
||||||
|
try {
|
||||||
|
JsonObject valueChangeJ = e.getAsJsonObject();
|
||||||
|
|
||||||
|
String stateId = valueChangeJ.get(Tags.STATE_ID).getAsString();
|
||||||
|
String timeS = valueChangeJ.get(Tags.TIME).getAsString();
|
||||||
|
String valueS = valueChangeJ.get(Tags.VALUE).getAsString();
|
||||||
|
String typeS = valueChangeJ.get(Tags.TYPE).getAsString();
|
||||||
|
|
||||||
|
StrolchValueType type = StrolchValueType.parse(typeS);
|
||||||
|
IValue<?> value = type.valueInstance(valueS);
|
||||||
|
|
||||||
|
long time = ISO8601FormatFactory.getInstance().getDateFormat().parse(timeS).getTime();
|
||||||
|
ValueChange<IValue<?>> valueChange = new ValueChange<>(time, value, stateId);
|
||||||
|
|
||||||
|
action.addChange(valueChange);
|
||||||
|
|
||||||
|
} catch (Exception e1) {
|
||||||
|
String msg = "Check the values of the jsonElement: {0} Fields invalid!"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, e);
|
||||||
|
throw new StrolchException(msg, e1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected PolicyDefs parsePolicies(JsonObject jsonObject) {
|
||||||
|
|
||||||
|
PolicyDefs policyDefs = new PolicyDefs();
|
||||||
|
|
||||||
|
if (!jsonObject.has(Tags.POLICIES))
|
||||||
|
return policyDefs;
|
||||||
|
|
||||||
|
JsonObject policiesJsonObject = jsonObject.getAsJsonObject(Tags.POLICIES);
|
||||||
|
|
||||||
|
Set<Entry<String, JsonElement>> entrySet = policiesJsonObject.entrySet();
|
||||||
|
for (Entry<String, JsonElement> entry : entrySet) {
|
||||||
|
|
||||||
|
String type = entry.getKey();
|
||||||
|
String value = entry.getValue().getAsString();
|
||||||
|
|
||||||
|
policyDefs.addOrUpdate(PolicyDef.valueOf(type, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
return policyDefs;
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,9 @@ import li.strolch.model.AbstractStrolchElement;
|
||||||
import li.strolch.model.GroupedParameterizedElement;
|
import li.strolch.model.GroupedParameterizedElement;
|
||||||
import li.strolch.model.Order;
|
import li.strolch.model.Order;
|
||||||
import li.strolch.model.ParameterBag;
|
import li.strolch.model.ParameterBag;
|
||||||
|
import li.strolch.model.PolicyContainer;
|
||||||
import li.strolch.model.Resource;
|
import li.strolch.model.Resource;
|
||||||
|
import li.strolch.model.StrolchModelConstants;
|
||||||
import li.strolch.model.Tags;
|
import li.strolch.model.Tags;
|
||||||
import li.strolch.model.activity.Action;
|
import li.strolch.model.activity.Action;
|
||||||
import li.strolch.model.activity.Activity;
|
import li.strolch.model.activity.Activity;
|
||||||
|
@ -22,6 +24,7 @@ import li.strolch.model.policy.PolicyDefs;
|
||||||
import li.strolch.model.timedstate.StrolchTimedState;
|
import li.strolch.model.timedstate.StrolchTimedState;
|
||||||
import li.strolch.model.timevalue.ITimeValue;
|
import li.strolch.model.timevalue.ITimeValue;
|
||||||
import li.strolch.model.timevalue.IValue;
|
import li.strolch.model.timevalue.IValue;
|
||||||
|
import li.strolch.model.timevalue.IValueChange;
|
||||||
import li.strolch.utils.iso8601.ISO8601FormatFactory;
|
import li.strolch.utils.iso8601.ISO8601FormatFactory;
|
||||||
|
|
||||||
public class StrolchElementToJsonVisitor {
|
public class StrolchElementToJsonVisitor {
|
||||||
|
@ -34,11 +37,8 @@ public class StrolchElementToJsonVisitor {
|
||||||
toJson(element, rootJ);
|
toJson(element, rootJ);
|
||||||
|
|
||||||
addParameterBags(element, rootJ);
|
addParameterBags(element, rootJ);
|
||||||
|
|
||||||
addTimedStates(element, rootJ);
|
addTimedStates(element, rootJ);
|
||||||
|
addPolicies(element, rootJ);
|
||||||
if (element.hasPolicyDefs())
|
|
||||||
addPolicies(element.getPolicyDefs(), rootJ);
|
|
||||||
|
|
||||||
return rootJ;
|
return rootJ;
|
||||||
}
|
}
|
||||||
|
@ -53,9 +53,7 @@ public class StrolchElementToJsonVisitor {
|
||||||
rootJ.addProperty(Tags.STATE, element.getState().name());
|
rootJ.addProperty(Tags.STATE, element.getState().name());
|
||||||
|
|
||||||
addParameterBags(element, rootJ);
|
addParameterBags(element, rootJ);
|
||||||
|
addPolicies(element, rootJ);
|
||||||
if (element.hasPolicyDefs())
|
|
||||||
addPolicies(element.getPolicyDefs(), rootJ);
|
|
||||||
|
|
||||||
return rootJ;
|
return rootJ;
|
||||||
}
|
}
|
||||||
|
@ -77,9 +75,7 @@ public class StrolchElementToJsonVisitor {
|
||||||
toJson((AbstractStrolchElement) element, rootJ);
|
toJson((AbstractStrolchElement) element, rootJ);
|
||||||
|
|
||||||
addParameterBags(element, rootJ);
|
addParameterBags(element, rootJ);
|
||||||
|
addPolicies(element, rootJ);
|
||||||
if (element.hasPolicyDefs())
|
|
||||||
addPolicies(element.getPolicyDefs(), rootJ);
|
|
||||||
|
|
||||||
Iterator<Entry<String, IActivityElement>> iter = element.elementIterator();
|
Iterator<Entry<String, IActivityElement>> iter = element.elementIterator();
|
||||||
if (iter.hasNext()) {
|
if (iter.hasNext()) {
|
||||||
|
@ -110,29 +106,51 @@ public class StrolchElementToJsonVisitor {
|
||||||
|
|
||||||
rootJ.addProperty(Tags.OBJECT_TYPE, Tags.ACTION);
|
rootJ.addProperty(Tags.OBJECT_TYPE, Tags.ACTION);
|
||||||
|
|
||||||
|
// attributes
|
||||||
toJson((AbstractStrolchElement) element, rootJ);
|
toJson((AbstractStrolchElement) element, rootJ);
|
||||||
rootJ.addProperty(Tags.RESOURCE_ID, element.getResourceId());
|
rootJ.addProperty(Tags.RESOURCE_ID, element.getResourceId());
|
||||||
rootJ.addProperty(Tags.RESOURCE_TYPE, element.getResourceType());
|
rootJ.addProperty(Tags.RESOURCE_TYPE, element.getResourceType());
|
||||||
rootJ.addProperty(Tags.STATE, element.getState().name());
|
rootJ.addProperty(Tags.STATE, element.getState().name());
|
||||||
|
|
||||||
addParameterBags(element, rootJ);
|
addParameterBags(element, rootJ);
|
||||||
|
addPolicies(element, rootJ);
|
||||||
|
|
||||||
if (element.hasPolicyDefs())
|
// value changes
|
||||||
addPolicies(element.getPolicyDefs(), rootJ);
|
Iterator<IValueChange<? extends IValue<?>>> iter = element.getChanges().iterator();
|
||||||
|
if (iter.hasNext()) {
|
||||||
|
|
||||||
|
JsonArray changesJ = new JsonArray();
|
||||||
|
rootJ.add(Tags.VALUE_CHANGES, changesJ);
|
||||||
|
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
IValueChange<? extends IValue<?>> valueChange = iter.next();
|
||||||
|
|
||||||
|
JsonObject changeJ = new JsonObject();
|
||||||
|
|
||||||
|
changeJ.addProperty(Tags.STATE_ID, valueChange.getStateId());
|
||||||
|
changeJ.addProperty(Tags.TIME, ISO8601FormatFactory.getInstance().formatDate(valueChange.getTime()));
|
||||||
|
changeJ.addProperty(Tags.VALUE, valueChange.getValue().getValueAsString());
|
||||||
|
changeJ.addProperty(Tags.TYPE, valueChange.getValue().getType());
|
||||||
|
|
||||||
|
changesJ.add(changeJ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return rootJ;
|
return rootJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addPolicies(PolicyDefs policyDefs, JsonObject rootJ) {
|
protected void addPolicies(PolicyContainer policyContainer, JsonObject rootJ) {
|
||||||
if (!policyDefs.hasPolicyDefs())
|
if (!policyContainer.hasPolicyDefs() || !policyContainer.getPolicyDefs().hasPolicyDefs())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
PolicyDefs policyDefs = policyContainer.getPolicyDefs();
|
||||||
|
|
||||||
JsonObject policyDefsJ = new JsonObject();
|
JsonObject policyDefsJ = new JsonObject();
|
||||||
rootJ.add(Tags.POLICIES, policyDefsJ);
|
rootJ.add(Tags.POLICIES, policyDefsJ);
|
||||||
|
|
||||||
for (String type : policyDefs.getPolicyTypes()) {
|
for (String type : policyDefs.getPolicyTypes()) {
|
||||||
PolicyDef policyDef = policyDefs.getPolicyDef(type);
|
PolicyDef policyDef = policyDefs.getPolicyDef(type);
|
||||||
policyDefsJ.addProperty(policyDef.getType(), policyDef.getValue());
|
policyDefsJ.addProperty(policyDef.getType(), policyDef.getValueForXml());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,27 +179,34 @@ public class StrolchElementToJsonVisitor {
|
||||||
|
|
||||||
toJson(bag, bagJ);
|
toJson(bag, bagJ);
|
||||||
|
|
||||||
addParameters(bag, bagJ);
|
if (!bag.hasParameters())
|
||||||
}
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
protected void addParameters(ParameterBag bag, JsonObject bagJ) {
|
JsonObject paramsJ = new JsonObject();
|
||||||
|
bagJ.add(Tags.PARAMETERS, paramsJ);
|
||||||
|
|
||||||
if (!bag.hasParameters())
|
for (String paramKey : bag.getParameterKeySet()) {
|
||||||
return;
|
Parameter<?> param = bag.getParameter(paramKey);
|
||||||
|
|
||||||
JsonObject paramsJ = new JsonObject();
|
JsonObject paramJ = new JsonObject();
|
||||||
bagJ.add(Tags.PARAMETERS, paramsJ);
|
paramsJ.add(paramKey, paramJ);
|
||||||
|
|
||||||
for (String paramKey : bag.getParameterKeySet()) {
|
toJson((AbstractStrolchElement) param, paramJ);
|
||||||
Parameter<?> param = bag.getParameter(paramKey);
|
|
||||||
|
|
||||||
JsonObject paramJ = new JsonObject();
|
if (!StrolchModelConstants.INTERPRETATION_NONE.equals(param.getInterpretation()))
|
||||||
paramsJ.add(paramKey, paramJ);
|
paramJ.addProperty(Tags.INTERPRETATION, param.getInterpretation());
|
||||||
|
|
||||||
toJson((AbstractStrolchElement) param, paramJ);
|
if (param.isHidden())
|
||||||
|
paramJ.addProperty(Tags.HIDDEN, param.isHidden());
|
||||||
|
|
||||||
paramJ.addProperty(Tags.VALUE, param.getValueAsString());
|
if (!StrolchModelConstants.UOM_NONE.equals(param.getUom()))
|
||||||
|
paramJ.addProperty(Tags.UOM, param.getUom());
|
||||||
|
|
||||||
|
if (param.getIndex() != 0)
|
||||||
|
paramJ.addProperty(Tags.INDEX, param.getIndex());
|
||||||
|
|
||||||
|
paramJ.addProperty(Tags.VALUE, param.getValueAsString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,9 +119,8 @@ public abstract class PolicyDef {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class.forName(value);
|
Class.forName(value);
|
||||||
|
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new StrolchPolicyException("Invalid policy configuration. Policy does not exist: " + value);
|
throw new StrolchPolicyException("Invalid policy configuration. Policy does not exist: " + value, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new JavaPolicyDef(type, value);
|
return new JavaPolicyDef(type, value);
|
||||||
|
|
|
@ -20,8 +20,10 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import li.strolch.exception.StrolchPolicyException;
|
import li.strolch.exception.StrolchPolicyException;
|
||||||
|
import li.strolch.model.Locator;
|
||||||
import li.strolch.model.StrolchElement;
|
import li.strolch.model.StrolchElement;
|
||||||
import li.strolch.model.StrolchRootElement;
|
import li.strolch.model.StrolchRootElement;
|
||||||
|
import li.strolch.model.Tags;
|
||||||
import li.strolch.utils.dbc.DBC;
|
import li.strolch.utils.dbc.DBC;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -99,4 +101,10 @@ public class PolicyDefs {
|
||||||
}
|
}
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Locator getLocator() {
|
||||||
|
if (this.parent == null)
|
||||||
|
return Locator.valueOf(Tags.POLICIES);
|
||||||
|
return this.parent.getLocator().append(Tags.POLICIES);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import li.strolch.model.Order;
|
||||||
import li.strolch.model.ParameterBag;
|
import li.strolch.model.ParameterBag;
|
||||||
import li.strolch.model.Resource;
|
import li.strolch.model.Resource;
|
||||||
import li.strolch.model.StrolchElement;
|
import li.strolch.model.StrolchElement;
|
||||||
|
import li.strolch.model.Tags;
|
||||||
import li.strolch.model.activity.Action;
|
import li.strolch.model.activity.Action;
|
||||||
import li.strolch.model.activity.Activity;
|
import li.strolch.model.activity.Activity;
|
||||||
import li.strolch.model.activity.IActivityElement;
|
import li.strolch.model.activity.IActivityElement;
|
||||||
|
@ -63,20 +64,20 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
protected void deepEquals(StrolchElement srcElement, StrolchElement dstElement) {
|
protected void deepEquals(StrolchElement srcElement, StrolchElement dstElement) {
|
||||||
DBC.PRE.assertEquals("Both elements should have the same ID", srcElement.getId(), dstElement.getId());
|
DBC.PRE.assertEquals("Both elements should have the same ID", srcElement.getId(), dstElement.getId());
|
||||||
if (!srcElement.getName().equals(dstElement.getName())) {
|
if (!srcElement.getName().equals(dstElement.getName())) {
|
||||||
this.mismatchedLocators.add(dstElement.getLocator());
|
this.mismatchedLocators.add(dstElement.getLocator().append(Tags.NAME));
|
||||||
}
|
}
|
||||||
if (!srcElement.getType().equals(dstElement.getType())) {
|
if (!srcElement.getType().equals(dstElement.getType())) {
|
||||||
this.mismatchedLocators.add(dstElement.getLocator());
|
this.mismatchedLocators.add(dstElement.getLocator().append(Tags.TYPE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void deepEquals(Order srcOrder, Order dstOrder) {
|
protected void deepEquals(Order srcOrder, Order dstOrder) {
|
||||||
deepEquals((StrolchElement) srcOrder, (StrolchElement) dstOrder);
|
deepEquals((StrolchElement) srcOrder, (StrolchElement) dstOrder);
|
||||||
if (!srcOrder.getState().equals(dstOrder.getState())) {
|
if (!srcOrder.getState().equals(dstOrder.getState())) {
|
||||||
this.mismatchedLocators.add(dstOrder.getLocator());
|
this.mismatchedLocators.add(dstOrder.getLocator().append(Tags.STATE));
|
||||||
}
|
}
|
||||||
if (!srcOrder.getDate().equals(dstOrder.getDate())) {
|
if (!srcOrder.getDate().equals(dstOrder.getDate())) {
|
||||||
this.mismatchedLocators.add(dstOrder.getLocator());
|
this.mismatchedLocators.add(dstOrder.getLocator().append(Tags.DATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
deepEquals((GroupedParameterizedElement) srcOrder, (GroupedParameterizedElement) dstOrder);
|
deepEquals((GroupedParameterizedElement) srcOrder, (GroupedParameterizedElement) dstOrder);
|
||||||
|
@ -84,7 +85,7 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
if (srcOrder.hasPolicyDefs() && dstOrder.hasPolicyDefs())
|
if (srcOrder.hasPolicyDefs() && dstOrder.hasPolicyDefs())
|
||||||
deepEquals(srcOrder.getPolicyDefs(), dstOrder.getPolicyDefs());
|
deepEquals(srcOrder.getPolicyDefs(), dstOrder.getPolicyDefs());
|
||||||
else if (srcOrder.hasPolicyDefs() != dstOrder.hasPolicyDefs())
|
else if (srcOrder.hasPolicyDefs() != dstOrder.hasPolicyDefs())
|
||||||
this.mismatchedLocators.add(srcOrder.getLocator());
|
this.mismatchedLocators.add(srcOrder.getPolicyDefs().getLocator());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deepEquals(PolicyDefs srcPolicyDefs, PolicyDefs dstPolicyDefs) {
|
private void deepEquals(PolicyDefs srcPolicyDefs, PolicyDefs dstPolicyDefs) {
|
||||||
|
@ -94,22 +95,22 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
PolicyDef srcPolicyDef = srcPolicyDefs.getPolicyDef(srcType);
|
PolicyDef srcPolicyDef = srcPolicyDefs.getPolicyDef(srcType);
|
||||||
|
|
||||||
if (!dstPolicyDefs.hasPolicyDef(srcType)) {
|
if (!dstPolicyDefs.hasPolicyDef(srcType)) {
|
||||||
this.mismatchedLocators.add(dstPolicyDefs.getParent().getLocator());
|
this.mismatchedLocators.add(dstPolicyDefs.getLocator().append(srcType));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
PolicyDef dstPolicyDef = dstPolicyDefs.getPolicyDef(srcType);
|
PolicyDef dstPolicyDef = dstPolicyDefs.getPolicyDef(srcType);
|
||||||
|
|
||||||
if (srcPolicyDef.getClass() != dstPolicyDef.getClass())
|
if (srcPolicyDef.getClass() != dstPolicyDef.getClass())
|
||||||
this.mismatchedLocators.add(dstPolicyDefs.getParent().getLocator());
|
this.mismatchedLocators.add(dstPolicyDefs.getLocator().append(srcType));
|
||||||
if (!srcPolicyDef.getValue().equals(dstPolicyDef.getValue()))
|
if (!srcPolicyDef.getValue().equals(dstPolicyDef.getValue()))
|
||||||
this.mismatchedLocators.add(dstPolicyDefs.getParent().getLocator());
|
this.mismatchedLocators.add(dstPolicyDefs.getLocator().append(srcType));
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> dstTypes = dstPolicyDefs.getPolicyTypes();
|
Set<String> dstTypes = dstPolicyDefs.getPolicyTypes();
|
||||||
for (String dstType : dstTypes) {
|
for (String dstType : dstTypes) {
|
||||||
if (!srcPolicyDefs.hasPolicyDef(dstType)) {
|
if (!srcPolicyDefs.hasPolicyDef(dstType)) {
|
||||||
this.mismatchedLocators.add(srcPolicyDefs.getParent().getLocator());
|
this.mismatchedLocators.add(srcPolicyDefs.getLocator().append(dstType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,7 +122,7 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
if (srcRes.hasPolicyDefs() && dstRes.hasPolicyDefs())
|
if (srcRes.hasPolicyDefs() && dstRes.hasPolicyDefs())
|
||||||
deepEquals(srcRes.getPolicyDefs(), dstRes.getPolicyDefs());
|
deepEquals(srcRes.getPolicyDefs(), dstRes.getPolicyDefs());
|
||||||
else if (srcRes.hasPolicyDefs() != dstRes.hasPolicyDefs())
|
else if (srcRes.hasPolicyDefs() != dstRes.hasPolicyDefs())
|
||||||
this.mismatchedLocators.add(srcRes.getLocator());
|
this.mismatchedLocators.add(srcRes.getPolicyDefs().getLocator());
|
||||||
|
|
||||||
Set<String> srcTimedStateKeySet = srcRes.getTimedStateKeySet();
|
Set<String> srcTimedStateKeySet = srcRes.getTimedStateKeySet();
|
||||||
for (String timedStateKey : srcTimedStateKeySet) {
|
for (String timedStateKey : srcTimedStateKeySet) {
|
||||||
|
@ -152,7 +153,7 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
if (srcActivity.hasPolicyDefs() && dstActivity.hasPolicyDefs())
|
if (srcActivity.hasPolicyDefs() && dstActivity.hasPolicyDefs())
|
||||||
deepEquals(srcActivity.getPolicyDefs(), dstActivity.getPolicyDefs());
|
deepEquals(srcActivity.getPolicyDefs(), dstActivity.getPolicyDefs());
|
||||||
else if (srcActivity.hasPolicyDefs() != dstActivity.hasPolicyDefs())
|
else if (srcActivity.hasPolicyDefs() != dstActivity.hasPolicyDefs())
|
||||||
this.mismatchedLocators.add(srcActivity.getLocator());
|
this.mismatchedLocators.add(srcActivity.getPolicyDefs().getLocator());
|
||||||
|
|
||||||
Iterator<Entry<String, IActivityElement>> iter = srcActivity.elementIterator();
|
Iterator<Entry<String, IActivityElement>> iter = srcActivity.elementIterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
|
@ -193,13 +194,13 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
deepEquals((GroupedParameterizedElement) srcAction, (GroupedParameterizedElement) dstAction);
|
deepEquals((GroupedParameterizedElement) srcAction, (GroupedParameterizedElement) dstAction);
|
||||||
|
|
||||||
if (!srcAction.getResourceId().equals(dstAction.getResourceId())) {
|
if (!srcAction.getResourceId().equals(dstAction.getResourceId())) {
|
||||||
this.mismatchedLocators.add(dstAction.getLocator());
|
this.mismatchedLocators.add(dstAction.getLocator().append(Tags.RESOURCE_ID));
|
||||||
}
|
}
|
||||||
if (!srcAction.getResourceType().equals(dstAction.getResourceType())) {
|
if (!srcAction.getResourceType().equals(dstAction.getResourceType())) {
|
||||||
this.mismatchedLocators.add(dstAction.getLocator());
|
this.mismatchedLocators.add(dstAction.getLocator().append(Tags.RESOURCE_TYPE));
|
||||||
}
|
}
|
||||||
if (!srcAction.getState().equals(dstAction.getState())) {
|
if (!srcAction.getState().equals(dstAction.getState())) {
|
||||||
this.mismatchedLocators.add(dstAction.getLocator());
|
this.mismatchedLocators.add(dstAction.getLocator().append(Tags.STATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((srcAction.getParent() == null && srcAction.getParent() != null)
|
if ((srcAction.getParent() == null && srcAction.getParent() != null)
|
||||||
|
@ -212,10 +213,15 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (srcAction.hasChanges() != dstAction.hasChanges()) {
|
if (srcAction.hasChanges() != dstAction.hasChanges()) {
|
||||||
this.mismatchedLocators.add(dstAction.getLocator());
|
this.mismatchedLocators.add(dstAction.getLocator().append(Tags.VALUE_CHANGES));
|
||||||
} else if (!srcAction.getChanges().equals(dstAction.getChanges())) {
|
} else if (!srcAction.getChanges().equals(dstAction.getChanges())) {
|
||||||
this.mismatchedLocators.add(dstAction.getLocator());
|
this.mismatchedLocators.add(dstAction.getLocator().append(Tags.VALUE_CHANGES));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (srcAction.hasPolicyDefs() && dstAction.hasPolicyDefs())
|
||||||
|
deepEquals(srcAction.getPolicyDefs(), dstAction.getPolicyDefs());
|
||||||
|
else if (srcAction.hasPolicyDefs() != dstAction.hasPolicyDefs())
|
||||||
|
this.mismatchedLocators.add(dstAction.getPolicyDefs().getLocator());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void deepEquals(GroupedParameterizedElement srcElement, GroupedParameterizedElement dstElement) {
|
protected void deepEquals(GroupedParameterizedElement srcElement, GroupedParameterizedElement dstElement) {
|
||||||
|
@ -291,7 +297,7 @@ public class StrolchElementDeepEqualsVisitor {
|
||||||
final ITimeVariable<?> dstTimeEvolution = dstState.getTimeEvolution();
|
final ITimeVariable<?> dstTimeEvolution = dstState.getTimeEvolution();
|
||||||
|
|
||||||
if (!srcTimeEvolution.getValues().equals(dstTimeEvolution.getValues())) {
|
if (!srcTimeEvolution.getValues().equals(dstTimeEvolution.getValues())) {
|
||||||
this.mismatchedLocators.add(dstState.getLocator());
|
this.mismatchedLocators.add(dstState.getLocator().append(Tags.VALUES));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import li.strolch.model.xml.ResourceToDomVisitor;
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("nls")
|
@SuppressWarnings("nls")
|
||||||
public class XmlToDomTest extends ModelTest {
|
public class ModelToDomTest extends ModelTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldFormatAndParseOrder() {
|
public void shouldFormatAndParseOrder() {
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* 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 li.strolch.model;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import li.strolch.model.activity.Activity;
|
||||||
|
import li.strolch.model.json.ActivityFromJsonVisitor;
|
||||||
|
import li.strolch.model.json.ActivityToJsonVisitor;
|
||||||
|
import li.strolch.model.json.OrderFromJsonVisitor;
|
||||||
|
import li.strolch.model.json.OrderToJsonVisitor;
|
||||||
|
import li.strolch.model.json.ResourceFromJsonVisitor;
|
||||||
|
import li.strolch.model.json.ResourceToJsonVisitor;
|
||||||
|
import li.strolch.model.visitor.ActivityDeepEqualsVisitor;
|
||||||
|
import li.strolch.model.visitor.OrderDeepEqualsVisitor;
|
||||||
|
import li.strolch.model.visitor.ResourceDeepEqualsVisitor;
|
||||||
|
|
||||||
|
public class ModelToJsonTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAndParseOrder() {
|
||||||
|
|
||||||
|
Order order = ModelGenerator.createOrder("@1", "My Order 1", "MyOrder");
|
||||||
|
|
||||||
|
OrderToJsonVisitor jsonVisitor = new OrderToJsonVisitor();
|
||||||
|
jsonVisitor.visit(order);
|
||||||
|
JsonObject jsonObject = jsonVisitor.getJsonObject();
|
||||||
|
|
||||||
|
Order parsedOrder = new OrderFromJsonVisitor().visit(jsonObject);
|
||||||
|
|
||||||
|
OrderDeepEqualsVisitor visitor = new OrderDeepEqualsVisitor(order);
|
||||||
|
visitor.visit(parsedOrder);
|
||||||
|
assertTrue("To JSON and back should equal same Order:\n" + visitor.getMismatchedLocators(), visitor.isEqual());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAndParseResource() {
|
||||||
|
|
||||||
|
Resource resource = ModelGenerator.createResource("@1", "My Resource 1", "MyResource");
|
||||||
|
|
||||||
|
ResourceToJsonVisitor jsonVisitor = new ResourceToJsonVisitor();
|
||||||
|
jsonVisitor.visit(resource);
|
||||||
|
JsonObject jsonObject = jsonVisitor.getJsonObject();
|
||||||
|
|
||||||
|
Resource parsedResource = new ResourceFromJsonVisitor().visit(jsonObject);
|
||||||
|
|
||||||
|
ResourceDeepEqualsVisitor visitor = new ResourceDeepEqualsVisitor(resource);
|
||||||
|
visitor.visit(parsedResource);
|
||||||
|
assertTrue("To JSON and back should equal same Resource:\n" + visitor.getMismatchedLocators(),
|
||||||
|
visitor.isEqual());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldFormatAndParseActivity() {
|
||||||
|
|
||||||
|
Activity activity = ModelGenerator.createActivity("@1", "My Activity 1", "Transport");
|
||||||
|
|
||||||
|
ActivityToJsonVisitor jsonVisitor = new ActivityToJsonVisitor();
|
||||||
|
jsonVisitor.visit(activity);
|
||||||
|
JsonObject jsonObject = jsonVisitor.getJsonObject();
|
||||||
|
|
||||||
|
Activity parsedActivity = new ActivityFromJsonVisitor().visit(jsonObject);
|
||||||
|
|
||||||
|
ActivityDeepEqualsVisitor visitor = new ActivityDeepEqualsVisitor(activity);
|
||||||
|
visitor.visit(parsedActivity);
|
||||||
|
assertTrue("To JSON and back should equal same Activity:\n" + visitor.getMismatchedLocators(),
|
||||||
|
visitor.isEqual());
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,7 +44,7 @@ import org.junit.Test;
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("nls")
|
@SuppressWarnings("nls")
|
||||||
public class XmlToSaxTest extends ModelTest {
|
public class ModelToSaxTest extends ModelTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldFormatAndParseOrder() {
|
public void shouldFormatAndParseOrder() {
|
|
@ -34,9 +34,9 @@ import org.slf4j.LoggerFactory;
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("nls")
|
@SuppressWarnings("nls")
|
||||||
public class XmlModelDefaultHandlerTest {
|
public class XmlModelSaxFileReaderTest {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(XmlModelDefaultHandlerTest.class);
|
private static final Logger logger = LoggerFactory.getLogger(XmlModelSaxFileReaderTest.class);
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldParseXmlModelFile() {
|
public void shouldParseXmlModelFile() {
|
|
@ -1,3 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2016 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* 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 li.strolch.model.activity;
|
package li.strolch.model.activity;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
|
Loading…
Reference in New Issue