[New] Extended StrolchElementBuilder to build concrete elements, added tests

This commit is contained in:
Robert von Burg 2020-07-03 11:12:22 +02:00
parent d63cddf0b4
commit 626fb847f7
28 changed files with 437 additions and 207 deletions

View File

@ -9,31 +9,31 @@ import li.strolch.utils.dbc.DBC;
public class ActivityBuilder extends RootElementBuilder<ActivityBuilder> implements ActivityElementBuilder {
private final TemplatesBuilder templatesBuilder;
private final StrolchElementBuilder builder;
private final ActivityBuilder parentBuilder;
private final TimeOrdering timeOrdering;
private final List<ActivityElementBuilder> builders;
public ActivityBuilder(TemplatesBuilder builder, String id, String name, String type, TimeOrdering timeOrdering) {
public ActivityBuilder(StrolchElementBuilder builder, String id, String name, String type, TimeOrdering timeOrdering) {
super(id, name, type);
this.templatesBuilder = builder;
this.builder = builder;
this.parentBuilder = null;
this.timeOrdering = timeOrdering;
this.builders = new ArrayList<>();
}
public ActivityBuilder(TemplatesBuilder builder, ActivityBuilder parentBuilder, String id, String name, String type,
public ActivityBuilder(StrolchElementBuilder builder, ActivityBuilder parentBuilder, String id, String name, String type,
TimeOrdering timeOrdering) {
super(id, name, type);
this.templatesBuilder = builder;
this.builder = builder;
this.parentBuilder = parentBuilder;
this.timeOrdering = timeOrdering;
this.builders = new ArrayList<>();
}
public ActivityBuilder subActivity(String id, String name, String type, TimeOrdering timeOrdering) {
ActivityBuilder builder = new ActivityBuilder(this.templatesBuilder, this, id, name, type, timeOrdering);
ActivityBuilder builder = new ActivityBuilder(this.builder, this, id, name, type, timeOrdering);
this.builders.add(builder);
return builder;
}
@ -49,8 +49,8 @@ public class ActivityBuilder extends RootElementBuilder<ActivityBuilder> impleme
return this.parentBuilder;
}
public TemplatesBuilder endActivity() {
return this.templatesBuilder;
public StrolchElementBuilder endActivity() {
return this.builder;
}
@Override

View File

@ -13,7 +13,7 @@ public class BagBuilder<T extends ParameterBagContainerBuilder<T>> {
private final String id;
private final String name;
private final String type;
private final List<ParameterBuilder<?, ?>> parameters;
private final List<ParameterBuilder<?, ?, ?>> parameters;
public BagBuilder(T builder, String id, String name, String type) {
this.builder = builder;

View File

@ -6,14 +6,14 @@ import li.strolch.utils.iso8601.ISO8601;
public class OrderBuilder extends RootElementBuilder<OrderBuilder> {
private final TemplatesBuilder builder;
private final StrolchElementBuilder builder;
public OrderBuilder(TemplatesBuilder builder, String id, String name, String type) {
public OrderBuilder(StrolchElementBuilder builder, String id, String name, String type) {
super(id, name, type);
this.builder = builder;
}
public TemplatesBuilder endOrder() {
public StrolchElementBuilder endOrder() {
return this.builder;
}

View File

@ -26,6 +26,10 @@ public class PoliciesBuilder<T extends ParameterBagContainerBuilder<T>> {
return policy("ConfirmationPolicy", value);
}
public PoliciesBuilder<T> activityArchival(String value) {
return policy("ActivityArchivalPolicy", value);
}
public PoliciesBuilder<T> policy(String type, String value) {
this.policyDefs.addOrUpdate(PolicyDef.valueOf(type, value));
return this;

View File

@ -8,10 +8,10 @@ import li.strolch.model.builder.states.*;
public class ResourceBuilder extends RootElementBuilder<ResourceBuilder> {
private final TemplatesBuilder builder;
private final StrolchElementBuilder builder;
private final List<TimedStateBuilder<?>> timedStates;
public ResourceBuilder(TemplatesBuilder builder, String id, String name, String type) {
public ResourceBuilder(StrolchElementBuilder builder, String id, String name, String type) {
super(id, name, type);
this.builder = builder;
this.timedStates = new ArrayList<>();
@ -53,7 +53,7 @@ public class ResourceBuilder extends RootElementBuilder<ResourceBuilder> {
return builder;
}
public TemplatesBuilder endResource() {
public StrolchElementBuilder endResource() {
return this.builder;
}

View File

@ -0,0 +1,97 @@
package li.strolch.model.builder;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Stream.concat;
import static li.strolch.model.StrolchModelConstants.TEMPLATE;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import li.strolch.model.Order;
import li.strolch.model.Resource;
import li.strolch.model.StrolchRootElement;
import li.strolch.model.activity.Activity;
import li.strolch.model.activity.TimeOrdering;
import li.strolch.utils.helper.StringHelper;
public class StrolchElementBuilder {
private final Map<String, ResourceBuilder> resourceBuilders;
private final Map<String, OrderBuilder> orderBuilders;
private final Map<String, ActivityBuilder> activityBuilders;
public StrolchElementBuilder() {
this.resourceBuilders = new HashMap<>();
this.orderBuilders = new HashMap<>();
this.activityBuilders = new HashMap<>();
}
public ResourceBuilder resource(String name, String type) {
ResourceBuilder builder = new ResourceBuilder(this, type, name, TEMPLATE);
this.resourceBuilders.put(type, builder);
return builder;
}
public OrderBuilder order(String name, String type) {
OrderBuilder builder = new OrderBuilder(this, type, name, TEMPLATE);
this.orderBuilders.put(type, builder);
return builder;
}
public ActivityBuilder activity(String name, String type, TimeOrdering timeOrdering) {
ActivityBuilder builder = new ActivityBuilder(this, type, name, TEMPLATE, timeOrdering);
this.activityBuilders.put(type, builder);
return builder;
}
public List<Resource> buildResourceTemplates() {
return this.resourceBuilders.values().stream() //
.map(ResourceBuilder::build).collect(toList());
}
public List<Order> buildOrderTemplates() {
return this.orderBuilders.values().stream() //
.map(OrderBuilder::build).collect(toList());
}
public List<Activity> buildActivityTemplates() {
return this.activityBuilders.values().stream() //
.map(ActivityBuilder::build).collect(toList());
}
public List<StrolchRootElement> buildTemplates() {
return concat(concat(this.resourceBuilders.values().stream(), //
this.orderBuilders.values().stream()), //
this.activityBuilders.values().stream()) //
.map(RootElementBuilder::build).collect(toList());
}
public Resource newResource(String type, String newName) {
ResourceBuilder builder = this.resourceBuilders.get(type);
if (builder == null)
throw new IllegalArgumentException("No resource template defined for type " + type);
return updateFields(type, newName, builder.build());
}
public Order newOrder(String type, String newName) {
OrderBuilder builder = this.orderBuilders.get(type);
if (builder == null)
throw new IllegalArgumentException("No resource template defined for type " + type);
return updateFields(type, newName, builder.build());
}
public Activity newActivity(String type, String newName) {
ActivityBuilder builder = this.activityBuilders.get(type);
if (builder == null)
throw new IllegalArgumentException("No resource template defined for type " + type);
return updateFields(type, newName, builder.build());
}
private <T extends StrolchRootElement> T updateFields(String type, String newName, T element) {
element.setId(StringHelper.getUniqueId());
element.setName(newName);
element.setType(type);
return element;
}
}

View File

@ -1,42 +0,0 @@
package li.strolch.model.builder;
import static java.util.stream.Collectors.toList;
import static li.strolch.model.StrolchModelConstants.TEMPLATE;
import java.util.List;
import li.strolch.model.StrolchRootElement;
import li.strolch.model.Tags;
import li.strolch.model.activity.TimeOrdering;
import li.strolch.utils.collections.MapOfMaps;
public class TemplatesBuilder {
private final MapOfMaps<String, String, RootElementBuilder<?>> builders;
public TemplatesBuilder() {
this.builders = new MapOfMaps<>();
}
public ResourceBuilder resource(String name, String type) {
ResourceBuilder builder = new ResourceBuilder(this, type, name, TEMPLATE);
this.builders.addElement(Tags.Json.RESOURCE, type, builder);
return builder;
}
public OrderBuilder order(String name, String type) {
OrderBuilder builder = new OrderBuilder(this, type, name, TEMPLATE);
this.builders.addElement(Tags.Json.ORDER, type, builder);
return builder;
}
public ActivityBuilder activity(String name, String type, TimeOrdering timeOrdering) {
ActivityBuilder builder = new ActivityBuilder(this, type, name, TEMPLATE, timeOrdering);
this.builders.addElement(Tags.Json.ACTIVITY, type, builder);
return builder;
}
public List<StrolchRootElement> buildTemplates() {
return this.builders.streamValues().map(RootElementBuilder::build).collect(toList());
}
}

View File

@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.BooleanParameter;
public class BooleanParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<BooleanParameter, T> {
extends ParameterBuilder<Boolean, BooleanParameter, T> {
public BooleanParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -1,18 +1,41 @@
package li.strolch.model.builder.params;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.DateParameter;
public class DateParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<DateParameter, T> {
extends ParameterBuilder<Date, DateParameter, T> {
private ZonedDateTime valueZdt;
private LocalDateTime valueLdt;
public DateParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
public ParameterBuilder<Date, DateParameter, T> value(ZonedDateTime value) {
this.valueZdt = value;
return this;
}
public ParameterBuilder<Date, DateParameter, T> value(LocalDateTime value) {
this.valueLdt = value;
return this;
}
@Override
public DateParameter build() {
return build(new DateParameter());
DateParameter parameter = new DateParameter();
build(parameter);
if (this.valueZdt != null)
parameter.setValueFromZonedDateTime(this.valueZdt);
if (this.valueLdt != null)
parameter.setValueFromLocalDateTime(this.valueLdt);
return parameter;
}
}

View File

@ -3,9 +3,10 @@ package li.strolch.model.builder.params;
import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.DurationParameter;
import li.strolch.utils.time.PeriodDuration;
public class DurationParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<DurationParameter, T> {
extends ParameterBuilder<PeriodDuration, DurationParameter, T> {
public DurationParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -1,11 +1,13 @@
package li.strolch.model.builder.params;
import java.util.List;
import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.FloatListParameter;
public class FloatListParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<FloatListParameter, T> {
extends ParameterBuilder<List<Double>, FloatListParameter, T> {
public FloatListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.FloatParameter;
public class FloatParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<FloatParameter, T> {
extends ParameterBuilder<Double, FloatParameter, T> {
public FloatParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -1,11 +1,13 @@
package li.strolch.model.builder.params;
import java.util.List;
import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.IntegerListParameter;
public class IntegerListParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<IntegerListParameter, T> {
extends ParameterBuilder<List<Integer>, IntegerListParameter, T> {
public IntegerListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.IntegerParameter;
public class IntegerParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<IntegerParameter, T> {
extends ParameterBuilder<Integer, IntegerParameter, T> {
public IntegerParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -1,11 +1,13 @@
package li.strolch.model.builder.params;
import java.util.List;
import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.LongListParameter;
public class LongListParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<LongListParameter, T> {
extends ParameterBuilder<List<Long>, LongListParameter, T> {
public LongListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.LongParameter;
public class LongParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<LongParameter, T> {
extends ParameterBuilder<Long, LongParameter, T> {
public LongParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -7,7 +7,7 @@ import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.Parameter;
public abstract class ParameterBuilder<S extends Parameter<?>, T extends ParameterBagContainerBuilder<T>> {
public abstract class ParameterBuilder<R, S extends Parameter<R>, T extends ParameterBagContainerBuilder<T>> {
private final BagBuilder<T> builder;
@ -19,32 +19,39 @@ public abstract class ParameterBuilder<S extends Parameter<?>, T extends Paramet
protected String interpretation = INTERPRETATION_NONE;
protected String uom = UOM_NONE;
protected R value;
public ParameterBuilder(BagBuilder<T> builder, String id, String name) {
this.builder = builder;
this.id = id;
this.name = name;
}
public ParameterBuilder<S, T> hidden(boolean hidden) {
public ParameterBuilder<R, S, T> hidden(boolean hidden) {
this.hidden = hidden;
return this;
}
public ParameterBuilder<S, T> index(int index) {
public ParameterBuilder<R, S, T> index(int index) {
this.index = index;
return this;
}
public ParameterBuilder<S, T> interpretation(String interpretation) {
public ParameterBuilder<R, S, T> interpretation(String interpretation) {
this.interpretation = interpretation;
return this;
}
public ParameterBuilder<S, T> uom(String uom) {
public ParameterBuilder<R, S, T> uom(String uom) {
this.uom = uom;
return this;
}
public ParameterBuilder<R, S, T> value(R value) {
this.value = value;
return this;
}
public BagBuilder<T> end() {
return this.builder;
}
@ -56,6 +63,10 @@ public abstract class ParameterBuilder<S extends Parameter<?>, T extends Paramet
parameter.setIndex(this.index);
parameter.setInterpretation(this.interpretation);
parameter.setUom(this.uom);
if (this.value != null)
parameter.setValue(this.value);
else
parameter.clear();
return parameter;
}

View File

@ -1,11 +1,13 @@
package li.strolch.model.builder.params;
import java.util.List;
import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.StringListParameter;
public class StringListParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<StringListParameter, T> {
extends ParameterBuilder<List<String>, StringListParameter, T> {
public StringListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -4,7 +4,8 @@ import li.strolch.model.builder.BagBuilder;
import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.StringParameter;
public class StringParamBuilder<T extends ParameterBagContainerBuilder<T>> extends ParameterBuilder<StringParameter,T> {
public class StringParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<String, StringParameter, T> {
public StringParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder;
import li.strolch.model.parameter.TextParameter;
public class TextParamBuilder<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<TextParameter, T> {
extends ParameterBuilder<String, TextParameter, T> {
public TextParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);

View File

@ -2,6 +2,7 @@ package li.strolch.model.builder.states;
import li.strolch.model.builder.ResourceBuilder;
import li.strolch.model.timedstate.BooleanTimedState;
import li.strolch.model.timevalue.impl.BooleanValue;
public class BooleanStateBuilder extends TimedStateBuilder<BooleanTimedState> {
@ -11,6 +12,9 @@ public class BooleanStateBuilder extends TimedStateBuilder<BooleanTimedState> {
@Override
public BooleanTimedState build() {
return build(new BooleanTimedState());
BooleanTimedState state = new BooleanTimedState();
build(state);
state.getTimeEvolution().setValueAt(0L, new BooleanValue(false));
return state;
}
}

View File

@ -2,6 +2,7 @@ package li.strolch.model.builder.states;
import li.strolch.model.builder.ResourceBuilder;
import li.strolch.model.timedstate.FloatListTimedState;
import li.strolch.model.timevalue.impl.FloatListValue;
public class FloatListStateBuilder extends TimedStateBuilder<FloatListTimedState> {
@ -11,6 +12,9 @@ public class FloatListStateBuilder extends TimedStateBuilder<FloatListTimedState
@Override
public FloatListTimedState build() {
return build(new FloatListTimedState());
FloatListTimedState state = new FloatListTimedState();
build(state);
state.getTimeEvolution().setValueAt(0L, new FloatListValue());
return state;
}
}

View File

@ -2,6 +2,7 @@ package li.strolch.model.builder.states;
import li.strolch.model.builder.ResourceBuilder;
import li.strolch.model.timedstate.FloatTimedState;
import li.strolch.model.timevalue.impl.FloatValue;
public class FloatStateBuilder extends TimedStateBuilder<FloatTimedState> {
@ -11,6 +12,9 @@ public class FloatStateBuilder extends TimedStateBuilder<FloatTimedState> {
@Override
public FloatTimedState build() {
return build(new FloatTimedState());
FloatTimedState state = new FloatTimedState();
build(state);
state.getTimeEvolution().setValueAt(0L, new FloatValue(0.0D));
return state;
}
}

View File

@ -2,6 +2,7 @@ package li.strolch.model.builder.states;
import li.strolch.model.builder.ResourceBuilder;
import li.strolch.model.timedstate.IntegerTimedState;
import li.strolch.model.timevalue.impl.IntegerValue;
public class IntegerStateBuilder extends TimedStateBuilder<IntegerTimedState> {
@ -11,6 +12,9 @@ public class IntegerStateBuilder extends TimedStateBuilder<IntegerTimedState> {
@Override
public IntegerTimedState build() {
return build(new IntegerTimedState());
IntegerTimedState state = new IntegerTimedState();
build(state);
state.getTimeEvolution().setValueAt(0L, new IntegerValue(0));
return state;
}
}

View File

@ -2,6 +2,7 @@ package li.strolch.model.builder.states;
import li.strolch.model.builder.ResourceBuilder;
import li.strolch.model.timedstate.LongTimedState;
import li.strolch.model.timevalue.impl.LongValue;
public class LongStateBuilder extends TimedStateBuilder<LongTimedState> {
@ -11,6 +12,9 @@ public class LongStateBuilder extends TimedStateBuilder<LongTimedState> {
@Override
public LongTimedState build() {
return build(new LongTimedState());
LongTimedState state = new LongTimedState();
build(state);
state.getTimeEvolution().setValueAt(0L, new LongValue(0L));
return state;
}
}

View File

@ -1,7 +1,10 @@
package li.strolch.model.builder.states;
import static java.util.Collections.emptySet;
import li.strolch.model.builder.ResourceBuilder;
import li.strolch.model.timedstate.StringSetTimedState;
import li.strolch.model.timevalue.impl.StringSetValue;
public class StringSetStateBuilder extends TimedStateBuilder<StringSetTimedState> {
@ -11,6 +14,9 @@ public class StringSetStateBuilder extends TimedStateBuilder<StringSetTimedState
@Override
public StringSetTimedState build() {
return build(new StringSetTimedState());
StringSetTimedState state = new StringSetTimedState();
build(state);
state.getTimeEvolution().setValueAt(0L, new StringSetValue(emptySet()));
return state;
}
}

View File

@ -0,0 +1,227 @@
package li.strolch.model;
import static li.strolch.model.StrolchModelConstants.PolicyConstants.BAG_OBJECTIVES;
import static li.strolch.model.StrolchModelConstants.TEMPLATE;
import static org.junit.Assert.*;
import java.time.ZonedDateTime;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import li.strolch.model.activity.Action;
import li.strolch.model.activity.Activity;
import li.strolch.model.activity.IActivityElement;
import li.strolch.model.activity.TimeOrdering;
import li.strolch.model.builder.StrolchElementBuilder;
import li.strolch.utils.collections.MapOfMaps;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StrolchElementBuilderTest {
private static final Logger logger = LoggerFactory.getLogger(StrolchElementBuilderTest.class);
@Test
public void shouldBuildTemplates() {
StrolchElementBuilder builder = new StrolchElementBuilder() //
/*
* resource templates
*/
// person
.resource("Person Template", "Person") //
.defaultBag() //
.date("birthdate", "Birthdate").value(ZonedDateTime.now()).end() //
.string("case", "Case").interpretation("Case").uom("Simple").end() //
.endBag() //
.resourceRelation("car", "Personal Card", "Car") //
.policies() //
.planning("key:SimplePlanning") //
.execution("key:DurationExecution") //
.confirmation("key:NoConfirmation") //
.endPolicies() //
.endResource() //
// cars
.resource("Car Template", "Car") //
.defaultBag() //
.string("color", "Color").value("white").end() //
.endBag() //
.resourceRelation("Owner") //
.booleanState("driving", "Driving").end()//
.endResource() //
// machines
.resource("Machine Template", "Machine") //
.defaultBag() //
.string("color", "Color").end() //
.endBag() //
.resourceRelation("Owner") //
.endResource() //
/*
* order templates
*/
// orders
.order("Order Template", "Order") //
.defaultBag() //
.string("description", "Description").end() //
.endBag() //
.bag("products", "Products", "Products") //
.integer("quantity", "Quantity").interpretation("Volume").uom("mm3").end() //
.endBag() //
.policies().policy("CostCalculationPolicy", "key:SimpleCostCalculation").endPolicies() //
.endOrder() //
/*
* activity templates
*/
// ToStock
.activity("ToStock Template", "ToStock", TimeOrdering.SERIES) //
.defaultBag() //
.string("description", "Description").end() //
.endBag() //
.objectivesBag() //
.integer("quantity", "Quantity").end() //
.endBag() //
// level 1 action
.action("lvl1ActionElem1", "Level 1 Action Element 1", "SubAction") //
.resource("Machine", "machine1") //
.objectivesBag() //
.integer("quantity", "Quantity").end() //
.endBag() //
.endAction() //
// level 1 activity
.subActivity("lvl1Elem2", "Level 1 Activity Element 2", "SubActivity", TimeOrdering.SERIES) //
// level 2 action
.action("lvl2ActionElem1", "Level 2 Action Element 1", "SubAction") //
.resource("Machine", "machine2") //
.objectivesBag() //
.integer("quantity", "Quantity").end() //
.endBag() //
.endAction() //
// level 2 activity
.subActivity("lvl2ActivityElem2", "Level 2 Activity Element 2", "SubActivity", TimeOrdering.SERIES) //
// level 3 action
.action("lvl3Action1Elem1", "Level 3 Action Element 1", "SubAction") //
.resource("Machine", "machine3") //
.objectivesBag() //
.integer("quantity", "Quantity").end() //
.endBag() //
.endAction() //
.endSubActivity() // level 2 activity
.endSubActivity() // level 1 activity
.policies() //
.activityArchival("key:DefaultActivityArchival") //
.endPolicies() //
.endActivity() // root
;
List<StrolchRootElement> templates = builder.buildTemplates();
MapOfMaps<String, String, StrolchRootElement> elementsByType = templates.stream().collect(MapOfMaps::new,
(map, element) -> map.addElement(element.getObjectType(), element.getId(), element), MapOfMaps::putAll);
assertEquals(5, elementsByType.size());
elementsByType.forEach((t, map) -> map.values().forEach(element -> logger.info("\n" + element.toXmlString())));
Resource carT = (Resource) elementsByType.getElement(Tags.RESOURCE, "Car");
assertEquals(TEMPLATE, carT.getType());
assertEquals("Car", carT.getId());
assertEquals("white", carT.getString("color"));
assertTrue(carT.hasRelation("owner"));
assertTrue(carT.hasTimedState("driving"));
assertEquals(StrolchValueType.BOOLEAN, carT.getTimedState("driving").getValueType());
Order orderT = (Order) elementsByType.getElement(Tags.ORDER, "Order");
assertEquals(TEMPLATE, orderT.getType());
assertEquals("Order", orderT.getId());
assertEquals("", orderT.getString("description"));
assertTrue(orderT.hasParameterBag("products"));
assertEquals(0, orderT.getInteger("products", "quantity"), 0);
assertEquals("Volume", orderT.getIntegerP("products", "quantity").getInterpretation());
assertEquals("mm3", orderT.getIntegerP("products", "quantity").getUom());
assertEquals("key:SimpleCostCalculation", orderT.getPolicyDef("CostCalculationPolicy").getValueForXml());
Activity activityT = (Activity) elementsByType.getElement(Tags.ACTIVITY, "ToStock");
assertEquals(TEMPLATE, activityT.getType());
assertEquals("ToStock", activityT.getId());
assertEquals(TimeOrdering.SERIES, activityT.getTimeOrdering());
assertTrue(activityT.hasParameterBag(BAG_OBJECTIVES));
assertEquals(0, activityT.getInteger(BAG_OBJECTIVES, "quantity"), 0);
Map<String, IActivityElement> elements = activityT.getElements();
Iterator<IActivityElement> lvl1Iter = elements.values().iterator();
IActivityElement lvl1Elem1 = lvl1Iter.next();
assertEquals("lvl1ActionElem1", lvl1Elem1.getId());
assertEquals(Action.class, lvl1Elem1.getClass());
assertEquals("machine1", ((Action) lvl1Elem1).getResourceId());
assertEquals("Machine", ((Action) lvl1Elem1).getResourceType());
IActivityElement lvl1Elem2 = lvl1Iter.next();
assertEquals("lvl1Elem2", lvl1Elem2.getId());
assertEquals(Activity.class, lvl1Elem2.getClass());
assertFalse(lvl1Iter.hasNext());
Iterator<IActivityElement> lvl2Iter = ((Activity) lvl1Elem2).getElements().values().iterator();
IActivityElement lvl2Elem1 = lvl2Iter.next();
assertEquals("lvl2ActionElem1", lvl2Elem1.getId());
assertEquals(Action.class, lvl2Elem1.getClass());
assertEquals("machine2", ((Action) lvl2Elem1).getResourceId());
assertEquals("Machine", ((Action) lvl2Elem1).getResourceType());
IActivityElement lvl2Elem2 = lvl2Iter.next();
assertEquals("lvl2ActivityElem2", lvl2Elem2.getId());
assertEquals(Activity.class, lvl2Elem2.getClass());
assertFalse(lvl2Iter.hasNext());
Iterator<IActivityElement> lvl3Iter = ((Activity) lvl2Elem2).getElements().values().iterator();
IActivityElement lvl3Elem1 = lvl3Iter.next();
assertEquals("lvl3Action1Elem1", lvl3Elem1.getId());
assertEquals(Action.class, lvl3Elem1.getClass());
assertEquals("machine3", ((Action) lvl3Elem1).getResourceId());
assertEquals("Machine", ((Action) lvl3Elem1).getResourceType());
assertFalse(lvl3Iter.hasNext());
assertEquals("key:DefaultActivityArchival", activityT.getPolicyDef("ActivityArchivalPolicy").getValueForXml());
}
@Test
public void shouldBuildElements() {
Resource car1 = new StrolchElementBuilder() //
.resource("Car Template", "Car") //
.defaultBag() //
.string("color", "Color").value("white").end() //
.endBag() //
.resourceRelation("Owner") //
.endResource() //
.newResource("Car", "My Car");
car1.setString("color", "green");
car1.setRelationId("owner", "me!");
logger.info("\n" + car1.toXmlString());
}
}

View File

@ -1,126 +0,0 @@
package li.strolch.model;
import java.util.List;
import li.strolch.model.activity.TimeOrdering;
import li.strolch.model.builder.TemplatesBuilder;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TemplateBuilderTest {
private static final Logger logger = LoggerFactory.getLogger(TemplateBuilderTest.class);
@Test
public void shouldBuildTemplates() {
List<StrolchRootElement> templates = new TemplatesBuilder() //
/*
* resource templates
*/
// person
.resource("Person Template", "Person") //
.defaultBag() //
.string("birthdate", "Birthdate").end() //
.string("case", "Case").interpretation("Case").uom("Simple").end() //
.endBag() //
.resourceRelation("car", "Personal Card", "Car") //
.policies() //
.planning("key:SimplePlanning") //
.execution("key:DurationExecution") //
.confirmation("key:NoConfirmation") //
.endPolicies() //
.endResource() //
// cars
.resource("Car Template", "Car") //
.defaultBag() //
.string("color", "Color").end() //
.endBag() //
.resourceRelation("Owner") //
.endResource() //
// machines
.resource("Machine Template", "Machine") //
.defaultBag() //
.string("color", "Color").end() //
.endBag() //
.booleanState("driving", "Driving").end()//
.resourceRelation("Owner") //
.endResource() //
/*
* order templates
*/
// orders
.order("Order Template", "Order") //
.defaultBag() //
.string("description", "Description").end() //
.endBag() //
.bag("products", "Products", "Products") //
.string("quantity", "Quantity").end() //
.endBag() //
.policies().policy("CostCalculationPolicy", "key:SimpleCostCalculation").endPolicies() //
.endOrder() //
/*
* activity templates
*/
// ToStock
.activity("ToStock Template", "ToStock", TimeOrdering.SERIES) //
.defaultBag() //
.string("description", "Description").end() //
.endBag() //
.objectivesBag() //
.string("quantity", "Quantity").end() //
.endBag() //
// level 1 action
.action("lvl1Action", "Level 1 Action Element 1", "SubAction") //
.resource("Machine", "machine1") //
.objectivesBag() //
.string("quantity", "Quantity").end() //
.endBag() //
.endAction() //
// level 1 activity
.subActivity("lvl1", "Level 1 Activity Element 2", "SubActivity", TimeOrdering.SERIES) //
// level 2 action
.action("lvl2Action", "Level 2 Action Element 1", "SubAction") //
.resource("Machine", "machine1") //
.objectivesBag() //
.string("quantity", "Quantity").end() //
.endBag() //
.endAction() //
// level 2 activity
.subActivity("lvl2Activity", "Level 2 Activity Element 2", "SubActivity", TimeOrdering.SERIES) //
// level 3 action
.action("lvl3Action1", "Level 3 Action Element 1", "SubAction") //
.resource("Machine", "machine2") //
.objectivesBag() //
.string("quantity", "Quantity").end() //
.endBag() //
.endAction() //
.endSubActivity() // level 2 activity
.endSubActivity() // level 1 activity
.endActivity() // root
//
.buildTemplates();
Assert.assertEquals(5, templates.size());
templates.forEach(element -> logger.info("\n" + element.toXmlString()));
}
}