From 626fb847f75909cfe47dd8d5cb6115e0c238ffa2 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 3 Jul 2020 11:12:22 +0200 Subject: [PATCH] [New] Extended StrolchElementBuilder to build concrete elements, added tests --- .../model/builder/ActivityBuilder.java | 16 +- .../li/strolch/model/builder/BagBuilder.java | 2 +- .../strolch/model/builder/OrderBuilder.java | 6 +- .../model/builder/PoliciesBuilder.java | 4 + .../model/builder/ResourceBuilder.java | 6 +- .../model/builder/StrolchElementBuilder.java | 97 ++++++++ .../model/builder/TemplatesBuilder.java | 42 ---- .../builder/params/BooleanParamBuilder.java | 2 +- .../builder/params/DateParamBuilder.java | 27 ++- .../builder/params/DurationParamBuilder.java | 3 +- .../builder/params/FloatListParamBuilder.java | 4 +- .../builder/params/FloatParamBuilder.java | 2 +- .../params/IntegerListParamBuilder.java | 4 +- .../builder/params/IntegerParamBuilder.java | 2 +- .../builder/params/LongListParamBuilder.java | 4 +- .../builder/params/LongParamBuilder.java | 2 +- .../builder/params/ParameterBuilder.java | 21 +- .../params/StringListParamBuilder.java | 4 +- .../builder/params/StringParamBuilder.java | 3 +- .../builder/params/TextParamBuilder.java | 2 +- .../builder/states/BooleanStateBuilder.java | 6 +- .../builder/states/FloatListStateBuilder.java | 6 +- .../builder/states/FloatStateBuilder.java | 6 +- .../builder/states/IntegerStateBuilder.java | 6 +- .../builder/states/LongStateBuilder.java | 6 +- .../builder/states/StringSetStateBuilder.java | 8 +- .../model/StrolchElementBuilderTest.java | 227 ++++++++++++++++++ .../li/strolch/model/TemplateBuilderTest.java | 126 ---------- 28 files changed, 437 insertions(+), 207 deletions(-) create mode 100644 li.strolch.model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java delete mode 100644 li.strolch.model/src/main/java/li/strolch/model/builder/TemplatesBuilder.java create mode 100644 li.strolch.model/src/test/java/li/strolch/model/StrolchElementBuilderTest.java delete mode 100644 li.strolch.model/src/test/java/li/strolch/model/TemplateBuilderTest.java diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityBuilder.java index a7f1a89c2..886f1ac0f 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityBuilder.java @@ -9,31 +9,31 @@ import li.strolch.utils.dbc.DBC; public class ActivityBuilder extends RootElementBuilder implements ActivityElementBuilder { - private final TemplatesBuilder templatesBuilder; + private final StrolchElementBuilder builder; private final ActivityBuilder parentBuilder; private final TimeOrdering timeOrdering; private final List 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 impleme return this.parentBuilder; } - public TemplatesBuilder endActivity() { - return this.templatesBuilder; + public StrolchElementBuilder endActivity() { + return this.builder; } @Override diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/BagBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/BagBuilder.java index 7dc162abe..5918170ed 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/BagBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/BagBuilder.java @@ -13,7 +13,7 @@ public class BagBuilder> { private final String id; private final String name; private final String type; - private final List> parameters; + private final List> parameters; public BagBuilder(T builder, String id, String name, String type) { this.builder = builder; diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/OrderBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/OrderBuilder.java index 84f8f845c..a02f69ce3 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/OrderBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/OrderBuilder.java @@ -6,14 +6,14 @@ import li.strolch.utils.iso8601.ISO8601; public class OrderBuilder extends RootElementBuilder { - 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; } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/PoliciesBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/PoliciesBuilder.java index ed2bb8e84..85cfeec39 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/PoliciesBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/PoliciesBuilder.java @@ -26,6 +26,10 @@ public class PoliciesBuilder> { return policy("ConfirmationPolicy", value); } + public PoliciesBuilder activityArchival(String value) { + return policy("ActivityArchivalPolicy", value); + } + public PoliciesBuilder policy(String type, String value) { this.policyDefs.addOrUpdate(PolicyDef.valueOf(type, value)); return this; diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/ResourceBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/ResourceBuilder.java index 1a87b2c49..c49daa455 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/ResourceBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ResourceBuilder.java @@ -8,10 +8,10 @@ import li.strolch.model.builder.states.*; public class ResourceBuilder extends RootElementBuilder { - private final TemplatesBuilder builder; + private final StrolchElementBuilder builder; private final List> 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 { return builder; } - public TemplatesBuilder endResource() { + public StrolchElementBuilder endResource() { return this.builder; } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java new file mode 100644 index 000000000..9de7eb56f --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java @@ -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 resourceBuilders; + private final Map orderBuilders; + private final Map 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 buildResourceTemplates() { + return this.resourceBuilders.values().stream() // + .map(ResourceBuilder::build).collect(toList()); + } + + public List buildOrderTemplates() { + return this.orderBuilders.values().stream() // + .map(OrderBuilder::build).collect(toList()); + } + + public List buildActivityTemplates() { + return this.activityBuilders.values().stream() // + .map(ActivityBuilder::build).collect(toList()); + } + + public List 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 updateFields(String type, String newName, T element) { + element.setId(StringHelper.getUniqueId()); + element.setName(newName); + element.setType(type); + return element; + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/TemplatesBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/TemplatesBuilder.java deleted file mode 100644 index 1e495c9ee..000000000 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/TemplatesBuilder.java +++ /dev/null @@ -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> 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 buildTemplates() { - return this.builders.streamValues().map(RootElementBuilder::build).collect(toList()); - } -} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/BooleanParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/BooleanParamBuilder.java index b28358b2a..710a71c39 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/BooleanParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/BooleanParamBuilder.java @@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder; import li.strolch.model.parameter.BooleanParameter; public class BooleanParamBuilder> - extends ParameterBuilder { + extends ParameterBuilder { public BooleanParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/DateParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/DateParamBuilder.java index 11bec1e8e..b27dc9e99 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/DateParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/DateParamBuilder.java @@ -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> - extends ParameterBuilder { + extends ParameterBuilder { + + private ZonedDateTime valueZdt; + private LocalDateTime valueLdt; public DateParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); } + public ParameterBuilder value(ZonedDateTime value) { + this.valueZdt = value; + return this; + } + + public ParameterBuilder 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; } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/DurationParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/DurationParamBuilder.java index 05cc57460..b797e45ca 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/DurationParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/DurationParamBuilder.java @@ -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> - extends ParameterBuilder { + extends ParameterBuilder { public DurationParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatListParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatListParamBuilder.java index cbad185f7..cc062d027 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatListParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatListParamBuilder.java @@ -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> - extends ParameterBuilder { + extends ParameterBuilder, FloatListParameter, T> { public FloatListParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatParamBuilder.java index 953ac1f68..cbd724fde 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatParamBuilder.java @@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder; import li.strolch.model.parameter.FloatParameter; public class FloatParamBuilder> - extends ParameterBuilder { + extends ParameterBuilder { public FloatParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerListParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerListParamBuilder.java index 92328b23b..baaf7c067 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerListParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerListParamBuilder.java @@ -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> - extends ParameterBuilder { + extends ParameterBuilder, IntegerListParameter, T> { public IntegerListParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerParamBuilder.java index 9605b4f1a..34df7145a 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerParamBuilder.java @@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder; import li.strolch.model.parameter.IntegerParameter; public class IntegerParamBuilder> - extends ParameterBuilder { + extends ParameterBuilder { public IntegerParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongListParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongListParamBuilder.java index 3cb433d4b..dfda96494 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongListParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongListParamBuilder.java @@ -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> - extends ParameterBuilder { + extends ParameterBuilder, LongListParameter, T> { public LongListParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongParamBuilder.java index f2fb87b04..969f8750f 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongParamBuilder.java @@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder; import li.strolch.model.parameter.LongParameter; public class LongParamBuilder> - extends ParameterBuilder { + extends ParameterBuilder { public LongParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/ParameterBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/ParameterBuilder.java index f78116727..d642f0761 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/ParameterBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/ParameterBuilder.java @@ -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, T extends ParameterBagContainerBuilder> { +public abstract class ParameterBuilder, T extends ParameterBagContainerBuilder> { private final BagBuilder builder; @@ -19,32 +19,39 @@ public abstract class ParameterBuilder, T extends Paramet protected String interpretation = INTERPRETATION_NONE; protected String uom = UOM_NONE; + protected R value; + public ParameterBuilder(BagBuilder builder, String id, String name) { this.builder = builder; this.id = id; this.name = name; } - public ParameterBuilder hidden(boolean hidden) { + public ParameterBuilder hidden(boolean hidden) { this.hidden = hidden; return this; } - public ParameterBuilder index(int index) { + public ParameterBuilder index(int index) { this.index = index; return this; } - public ParameterBuilder interpretation(String interpretation) { + public ParameterBuilder interpretation(String interpretation) { this.interpretation = interpretation; return this; } - public ParameterBuilder uom(String uom) { + public ParameterBuilder uom(String uom) { this.uom = uom; return this; } + public ParameterBuilder value(R value) { + this.value = value; + return this; + } + public BagBuilder end() { return this.builder; } @@ -56,6 +63,10 @@ public abstract class ParameterBuilder, 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; } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringListParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringListParamBuilder.java index e8455b688..0e3860863 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringListParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringListParamBuilder.java @@ -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> - extends ParameterBuilder { + extends ParameterBuilder, StringListParameter, T> { public StringListParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringParamBuilder.java index e91e3a543..4610f38ba 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringParamBuilder.java @@ -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> extends ParameterBuilder { +public class StringParamBuilder> + extends ParameterBuilder { public StringParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/params/TextParamBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/params/TextParamBuilder.java index cb790de3e..4452ceeb8 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/params/TextParamBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/TextParamBuilder.java @@ -5,7 +5,7 @@ import li.strolch.model.builder.ParameterBagContainerBuilder; import li.strolch.model.parameter.TextParameter; public class TextParamBuilder> - extends ParameterBuilder { + extends ParameterBuilder { public TextParamBuilder(BagBuilder builder, String id, String name) { super(builder, id, name); diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/BooleanStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/BooleanStateBuilder.java index edfc8405e..9d4bb1fbf 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/states/BooleanStateBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/BooleanStateBuilder.java @@ -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 { @@ -11,6 +12,9 @@ public class BooleanStateBuilder extends TimedStateBuilder { @Override public BooleanTimedState build() { - return build(new BooleanTimedState()); + BooleanTimedState state = new BooleanTimedState(); + build(state); + state.getTimeEvolution().setValueAt(0L, new BooleanValue(false)); + return state; } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatListStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatListStateBuilder.java index 0efcc0ef0..5838dd078 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatListStateBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatListStateBuilder.java @@ -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 { @@ -11,6 +12,9 @@ public class FloatListStateBuilder extends TimedStateBuilder { @@ -11,6 +12,9 @@ public class FloatStateBuilder extends TimedStateBuilder { @Override public FloatTimedState build() { - return build(new FloatTimedState()); + FloatTimedState state = new FloatTimedState(); + build(state); + state.getTimeEvolution().setValueAt(0L, new FloatValue(0.0D)); + return state; } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/IntegerStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/IntegerStateBuilder.java index 6a91001ef..1d287fb67 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/states/IntegerStateBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/IntegerStateBuilder.java @@ -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 { @@ -11,6 +12,9 @@ public class IntegerStateBuilder extends TimedStateBuilder { @Override public IntegerTimedState build() { - return build(new IntegerTimedState()); + IntegerTimedState state = new IntegerTimedState(); + build(state); + state.getTimeEvolution().setValueAt(0L, new IntegerValue(0)); + return state; } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/LongStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/LongStateBuilder.java index c9f165cc4..ef1653b4c 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/states/LongStateBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/LongStateBuilder.java @@ -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 { @@ -11,6 +12,9 @@ public class LongStateBuilder extends TimedStateBuilder { @Override public LongTimedState build() { - return build(new LongTimedState()); + LongTimedState state = new LongTimedState(); + build(state); + state.getTimeEvolution().setValueAt(0L, new LongValue(0L)); + return state; } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/StringSetStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/StringSetStateBuilder.java index b15ae7a3e..4ce7bbfe4 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/builder/states/StringSetStateBuilder.java +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/StringSetStateBuilder.java @@ -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 { @@ -11,6 +14,9 @@ public class StringSetStateBuilder extends TimedStateBuilder templates = builder.buildTemplates(); + MapOfMaps 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 elements = activityT.getElements(); + Iterator 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 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 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()); + } +} diff --git a/li.strolch.model/src/test/java/li/strolch/model/TemplateBuilderTest.java b/li.strolch.model/src/test/java/li/strolch/model/TemplateBuilderTest.java deleted file mode 100644 index 6ea8636e3..000000000 --- a/li.strolch.model/src/test/java/li/strolch/model/TemplateBuilderTest.java +++ /dev/null @@ -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 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())); - } -}