[New] Extended StrolchElementBuilder to build concrete elements, added tests
This commit is contained in:
parent
d63cddf0b4
commit
626fb847f7
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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()));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue