diff --git a/model/src/main/java/li/strolch/model/StrolchModelConstants.java b/model/src/main/java/li/strolch/model/StrolchModelConstants.java index c4f82e843..2ba7a1cd8 100644 --- a/model/src/main/java/li/strolch/model/StrolchModelConstants.java +++ b/model/src/main/java/li/strolch/model/StrolchModelConstants.java @@ -84,6 +84,7 @@ public class StrolchModelConstants { public static final String TYPE_OBJECTIVES = "Objectives"; public static final String TYPE_METRIC = "Metric"; public static final String TYPE_NOTIFICATION = "Notification"; + public static final String TYPE_VISIBILITY = "Visibility"; public static final String TYPE_TEXT = "Text"; public static final String RES_CONFIGURATION = "configuration"; @@ -106,6 +107,7 @@ public class StrolchModelConstants { public static final String PARAM_VISIBLE_TO = "visibleTo"; public static final String PARAM_FOR_ALL = "forAll"; public static final String PARAM_ROLES = "roles"; + public static final String PARAM_LOCATIONS = "locations"; public static final String PARAM_GROUPS = "groups"; public static class PolicyConstants { diff --git a/model/src/main/java/li/strolch/model/builder/ActionBuilder.java b/model/src/main/java/li/strolch/model/builder/ActionBuilder.java index 21fc7c5bd..0b725d7ea 100644 --- a/model/src/main/java/li/strolch/model/builder/ActionBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/ActionBuilder.java @@ -4,6 +4,8 @@ import li.strolch.model.PolicyContainer; import li.strolch.model.activity.Action; import li.strolch.utils.dbc.DBC; +import static li.strolch.model.builder.BuilderHelper.buildParamName; + public class ActionBuilder extends PolicyContainerBuilder implements ActivityElementBuilder { private final ActivityBuilder builder; @@ -11,11 +13,19 @@ public class ActionBuilder extends PolicyContainerBuilder impleme private String resourceId; private String resourceType; + public ActionBuilder(String id, String type) { + this(id, buildParamName(id), type); + } + public ActionBuilder(String id, String name, String type) { super(id, name, type); this.builder = null; } + public ActionBuilder(ActivityBuilder builder, String id, String type) { + this(builder, id, buildParamName(id), type); + } + public ActionBuilder(ActivityBuilder builder, String id, String name, String type) { super(id, name, type); this.builder = builder; diff --git a/model/src/main/java/li/strolch/model/builder/ActivityBuilder.java b/model/src/main/java/li/strolch/model/builder/ActivityBuilder.java index af535a43c..407d20437 100644 --- a/model/src/main/java/li/strolch/model/builder/ActivityBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/ActivityBuilder.java @@ -7,6 +7,8 @@ import li.strolch.model.activity.Activity; import li.strolch.model.activity.TimeOrdering; import li.strolch.utils.dbc.DBC; +import static li.strolch.model.builder.BuilderHelper.*; + public class ActivityBuilder extends RootElementBuilder implements ActivityElementBuilder { private final StrolchElementBuilder builder; @@ -15,6 +17,10 @@ public class ActivityBuilder extends RootElementBuilder impleme private final List builders; + public ActivityBuilder(String id, String type, TimeOrdering timeOrdering) { + this(id, buildParamName(id), type, timeOrdering); + } + public ActivityBuilder(String id, String name, String type, TimeOrdering timeOrdering) { super(id, name, type); this.builder = null; @@ -23,6 +29,10 @@ public class ActivityBuilder extends RootElementBuilder impleme this.builders = new ArrayList<>(); } + public ActivityBuilder(StrolchElementBuilder builder, String id, String type, TimeOrdering timeOrdering) { + this(builder, id, buildParamName(id), type, timeOrdering); + } + public ActivityBuilder(StrolchElementBuilder builder, String id, String name, String type, TimeOrdering timeOrdering) { super(id, name, type); @@ -32,6 +42,11 @@ public class ActivityBuilder extends RootElementBuilder impleme this.builders = new ArrayList<>(); } + public ActivityBuilder(StrolchElementBuilder builder, ActivityBuilder parentBuilder, String id, String type, + TimeOrdering timeOrdering) { + this(builder, parentBuilder, id, buildParamName(id), type, timeOrdering); + } + public ActivityBuilder(StrolchElementBuilder builder, ActivityBuilder parentBuilder, String id, String name, String type, TimeOrdering timeOrdering) { super(id, name, type); @@ -41,12 +56,20 @@ public class ActivityBuilder extends RootElementBuilder impleme this.builders = new ArrayList<>(); } + public ActivityBuilder subActivity(String id, String type, TimeOrdering timeOrdering) { + return subActivity(id, buildParamName(id), type, timeOrdering); + } + public ActivityBuilder subActivity(String id, String name, String type, TimeOrdering timeOrdering) { ActivityBuilder builder = new ActivityBuilder(this.builder, this, id, name, type, timeOrdering); this.builders.add(builder); return builder; } + public ActionBuilder action(String id, String type) { + return action(id, buildParamName(id), type); + } + public ActionBuilder action(String id, String name, String type) { ActionBuilder builder = new ActionBuilder(this, id, name, type); this.builders.add(builder); diff --git a/model/src/main/java/li/strolch/model/builder/BagBuilder.java b/model/src/main/java/li/strolch/model/builder/BagBuilder.java index 72df672b4..80b61f35b 100644 --- a/model/src/main/java/li/strolch/model/builder/BagBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/BagBuilder.java @@ -7,6 +7,8 @@ import li.strolch.model.ParameterBag; import li.strolch.model.ParameterBagContainer; import li.strolch.model.builder.params.*; +import static li.strolch.model.builder.BuilderHelper.buildParamName; + public class BagBuilder> { private final T builder; @@ -15,6 +17,10 @@ public class BagBuilder> { private final String type; private final List> parameters; + public BagBuilder(T builder, String id, String type) { + this(builder, id, buildParamName(id), type); + } + public BagBuilder(T builder, String id, String name, String type) { this.builder = builder; this.id = id; @@ -23,72 +29,120 @@ public class BagBuilder> { this.parameters = new ArrayList<>(); } + public StringParamBuilder string(String id) { + return string(id, buildParamName(id)); + } + public StringParamBuilder string(String id, String name) { StringParamBuilder builder = new StringParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public TextParamBuilder text(String id) { + return text(id, buildParamName(id)); + } + public TextParamBuilder text(String id, String name) { TextParamBuilder builder = new TextParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public BooleanParamBuilder booleanB(String id) { + return booleanB(id, buildParamName(id)); + } + public BooleanParamBuilder booleanB(String id, String name) { BooleanParamBuilder builder = new BooleanParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public IntegerParamBuilder integer(String id) { + return integer(id, buildParamName(id)); + } + public IntegerParamBuilder integer(String id, String name) { IntegerParamBuilder builder = new IntegerParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public LongParamBuilder longB(String id) { + return longB(id, buildParamName(id)); + } + public LongParamBuilder longB(String id, String name) { LongParamBuilder builder = new LongParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public FloatParamBuilder floatB(String id) { + return floatB(id, buildParamName(id)); + } + public FloatParamBuilder floatB(String id, String name) { FloatParamBuilder builder = new FloatParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public DateParamBuilder date(String id) { + return date(id, buildParamName(id)); + } + public DateParamBuilder date(String id, String name) { DateParamBuilder builder = new DateParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public DurationParamBuilder duration(String id) { + return duration(id, buildParamName(id)); + } + public DurationParamBuilder duration(String id, String name) { DurationParamBuilder builder = new DurationParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public StringListParamBuilder stringList(String id) { + return stringList(id, buildParamName(id)); + } + public StringListParamBuilder stringList(String id, String name) { StringListParamBuilder builder = new StringListParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public IntegerListParamBuilder integerList(String id) { + return integerList(id, buildParamName(id)); + } + public IntegerListParamBuilder integerList(String id, String name) { IntegerListParamBuilder builder = new IntegerListParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public LongListParamBuilder longList(String id) { + return longList(id, buildParamName(id)); + } + public LongListParamBuilder longList(String id, String name) { LongListParamBuilder builder = new LongListParamBuilder<>(this, id, name); this.parameters.add(builder); return builder; } + public FloatListParamBuilder floatList(String id) { + return floatList(id, buildParamName(id)); + } + public FloatListParamBuilder floatList(String id, String name) { FloatListParamBuilder builder = new FloatListParamBuilder<>(this, id, name); this.parameters.add(builder); diff --git a/model/src/main/java/li/strolch/model/builder/OrderBuilder.java b/model/src/main/java/li/strolch/model/builder/OrderBuilder.java index b6724398a..7e5b0db5c 100644 --- a/model/src/main/java/li/strolch/model/builder/OrderBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/OrderBuilder.java @@ -5,15 +5,25 @@ import li.strolch.model.State; import li.strolch.utils.dbc.DBC; import li.strolch.utils.iso8601.ISO8601; +import static li.strolch.model.builder.BuilderHelper.*; + public class OrderBuilder extends RootElementBuilder { private final StrolchElementBuilder builder; + public OrderBuilder(String id, String type) { + this(id, buildParamName(id), type); + } + public OrderBuilder(String id, String name, String type) { super(id, name, type); this.builder = null; } + public OrderBuilder(StrolchElementBuilder builder, String id, String type) { + this(builder, id, buildParamName(id), type); + } + public OrderBuilder(StrolchElementBuilder builder, String id, String name, String type) { super(id, name, type); this.builder = builder; diff --git a/model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java b/model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java index 9719f7ed6..bff9c6f8c 100644 --- a/model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java @@ -1,19 +1,20 @@ package li.strolch.model.builder; -import static java.util.Collections.emptyList; -import static li.strolch.model.StrolchModelConstants.*; -import static li.strolch.model.StrolchModelConstants.PolicyConstants.BAG_OBJECTIVES; -import static li.strolch.model.builder.BuilderHelper.buildParamId; - -import java.util.HashMap; -import java.util.Map; - import li.strolch.model.ParameterBag; import li.strolch.model.ParameterBagContainer; import li.strolch.model.Tags; import li.strolch.model.parameter.StringListParameter; import li.strolch.model.parameter.StringParameter; +import java.util.HashMap; +import java.util.Map; + +import static java.util.Collections.emptyList; +import static li.strolch.model.StrolchModelConstants.*; +import static li.strolch.model.StrolchModelConstants.PolicyConstants.BAG_OBJECTIVES; +import static li.strolch.model.builder.BuilderHelper.buildParamId; +import static li.strolch.model.builder.BuilderHelper.buildParamName; + public abstract class ParameterBagContainerBuilder> { private final String id; @@ -24,6 +25,10 @@ public abstract class ParameterBagContainerBuilder singleRelations; private final Map multiRelations; + public ParameterBagContainerBuilder(String id, String type) { + this(id, buildParamName(id), type); + } + public ParameterBagContainerBuilder(String id, String name, String type) { this.id = id; this.name = name; @@ -58,9 +63,12 @@ public abstract class ParameterBagContainerBuilder bag(String id, String type) { + return bag(id, buildParamName(id), type); + } + public BagBuilder bag(String id, String name, String type) { - @SuppressWarnings("unchecked") - BagBuilder bagBuilder = new BagBuilder<>((T) this, id, name, type); + @SuppressWarnings("unchecked") BagBuilder bagBuilder = new BagBuilder<>((T) this, id, name, type); if (this.parametersBags.put(id, bagBuilder) != null) throw new IllegalArgumentException("Bag builder for " + id + " already exists!"); return bagBuilder; @@ -70,11 +78,14 @@ public abstract class ParameterBagContainerBuilder> extends ParameterBagContainerBuilder { private PoliciesBuilder policies; + public PolicyContainerBuilder(String id, String type) { + super(id, buildParamName(id), type); + } + public PolicyContainerBuilder(String id, String name, String type) { super(id, name, type); } public PoliciesBuilder policies() { if (this.policies == null) { - @SuppressWarnings("unchecked") - T t = (T) this; + @SuppressWarnings("unchecked") T t = (T) this; this.policies = new PoliciesBuilder<>(t); } return policies; diff --git a/model/src/main/java/li/strolch/model/builder/ResourceBuilder.java b/model/src/main/java/li/strolch/model/builder/ResourceBuilder.java index 08ce51450..44bb69908 100644 --- a/model/src/main/java/li/strolch/model/builder/ResourceBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/ResourceBuilder.java @@ -1,65 +1,104 @@ package li.strolch.model.builder; -import java.util.ArrayList; -import java.util.List; - import li.strolch.model.Resource; import li.strolch.model.builder.states.*; import li.strolch.utils.dbc.DBC; +import java.util.ArrayList; +import java.util.List; + +import static li.strolch.model.builder.BuilderHelper.buildParamName; +import static li.strolch.utils.helper.StringHelper.getUniqueId; + public class ResourceBuilder extends RootElementBuilder { private final StrolchElementBuilder builder; private final List> timedStates; + public ResourceBuilder(String name, String type) { + this(getUniqueId(), name, type); + } + public ResourceBuilder(String id, String name, String type) { super(id, name, type); this.builder = null; this.timedStates = new ArrayList<>(); } + public ResourceBuilder(StrolchElementBuilder builder, String name, String type) { + this(builder, getUniqueId(), name, type); + } + public ResourceBuilder(StrolchElementBuilder builder, String id, String name, String type) { super(id, name, type); this.builder = builder; this.timedStates = new ArrayList<>(); } + public BooleanStateBuilder booleanState(String id) { + return booleanState(id, buildParamName(id)); + } + public BooleanStateBuilder booleanState(String id, String name) { BooleanStateBuilder builder = new BooleanStateBuilder(this, id, name); this.timedStates.add(builder); return builder; } + public FloatStateBuilder floatState(String id) { + return floatState(id, buildParamName(id)); + } + public FloatStateBuilder floatState(String id, String name) { FloatStateBuilder builder = new FloatStateBuilder(this, id, name); this.timedStates.add(builder); return builder; } + public IntegerStateBuilder integerState(String id) { + return integerState(id, buildParamName(id)); + } + public IntegerStateBuilder integerState(String id, String name) { IntegerStateBuilder builder = new IntegerStateBuilder(this, id, name); this.timedStates.add(builder); return builder; } + public LongStateBuilder longState(String id) { + return longState(id, buildParamName(id)); + } + public LongStateBuilder longState(String id, String name) { LongStateBuilder builder = new LongStateBuilder(this, id, name); this.timedStates.add(builder); return builder; } + public FloatListStateBuilder floatListState(String id) { + return floatListState(id, buildParamName(id)); + } + public FloatListStateBuilder floatListState(String id, String name) { FloatListStateBuilder builder = new FloatListStateBuilder(this, id, name); this.timedStates.add(builder); return builder; } + public IntegerListStateBuilder integerListState(String id) { + return integerListState(id, buildParamName(id)); + } + public IntegerListStateBuilder integerListState(String id, String name) { IntegerListStateBuilder builder = new IntegerListStateBuilder(this, id, name); this.timedStates.add(builder); return builder; } + public StringSetStateBuilder stringSetState(String id) { + return stringSetState(id, buildParamName(id)); + } + public StringSetStateBuilder stringSetState(String id, String name) { StringSetStateBuilder builder = new StringSetStateBuilder(this, id, name); this.timedStates.add(builder); diff --git a/model/src/main/java/li/strolch/model/builder/RootElementBuilder.java b/model/src/main/java/li/strolch/model/builder/RootElementBuilder.java index f5599c5b9..0f66194e8 100644 --- a/model/src/main/java/li/strolch/model/builder/RootElementBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/RootElementBuilder.java @@ -1,10 +1,15 @@ package li.strolch.model.builder; -import li.strolch.model.PolicyContainer; import li.strolch.model.StrolchRootElement; +import static li.strolch.model.builder.BuilderHelper.buildParamName; + public abstract class RootElementBuilder> extends PolicyContainerBuilder { + public RootElementBuilder(String id, String type) { + super(id, buildParamName(id), type); + } + public RootElementBuilder(String id, String name, String type) { super(id, name, type); } diff --git a/model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java b/model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java index 9de7eb56f..8dd4313d6 100644 --- a/model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java +++ b/model/src/main/java/li/strolch/model/builder/StrolchElementBuilder.java @@ -27,19 +27,19 @@ public class StrolchElementBuilder { this.activityBuilders = new HashMap<>(); } - public ResourceBuilder resource(String name, String type) { + public ResourceBuilder resourceTemplate(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) { + public OrderBuilder orderTemplate(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) { + public ActivityBuilder activityTemplate(String name, String type, TimeOrdering timeOrdering) { ActivityBuilder builder = new ActivityBuilder(this, type, name, TEMPLATE, timeOrdering); this.activityBuilders.put(type, builder); return builder; @@ -62,7 +62,7 @@ public class StrolchElementBuilder { public List buildTemplates() { return concat(concat(this.resourceBuilders.values().stream(), // - this.orderBuilders.values().stream()), // + this.orderBuilders.values().stream()), // this.activityBuilders.values().stream()) // .map(RootElementBuilder::build).collect(toList()); } @@ -71,24 +71,24 @@ public class StrolchElementBuilder { 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()); + return setInitialFields(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()); + return setInitialFields(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()); + return setInitialFields(type, newName, builder.build()); } - private T updateFields(String type, String newName, T element) { + private T setInitialFields(String type, String newName, T element) { element.setId(StringHelper.getUniqueId()); element.setName(newName); element.setType(type); diff --git a/model/src/test/java/li/strolch/model/StrolchElementBuilderTest.java b/model/src/test/java/li/strolch/model/StrolchElementBuilderTest.java index 67b46357a..759371bc1 100644 --- a/model/src/test/java/li/strolch/model/StrolchElementBuilderTest.java +++ b/model/src/test/java/li/strolch/model/StrolchElementBuilderTest.java @@ -33,7 +33,7 @@ public class StrolchElementBuilderTest { */ // person - .resource("Person Template", "Person") // + .resourceTemplate("Person Template", "Person") // .defaultBag() // .date("birthdate", "Birthdate").value(ZonedDateTime.now()).end() // .string("case", "Case").interpretation("Case").uom("Simple").end() // @@ -47,7 +47,7 @@ public class StrolchElementBuilderTest { .endResource() // // cars - .resource("Car Template", "Car") // + .resourceTemplate("Car Template", "Car") // .defaultBag() // .string("color", "Color").value("white").end() // .endBag() // @@ -56,7 +56,7 @@ public class StrolchElementBuilderTest { .endResource() // // machines - .resource("Machine Template", "Machine") // + .resourceTemplate("Machine Template", "Machine") // .defaultBag() // .string("color", "Color").end() // .endBag() // @@ -68,7 +68,7 @@ public class StrolchElementBuilderTest { */ // orders - .order("Order Template", "Order") // + .orderTemplate("Order Template", "Order") // .defaultBag() // .string("description", "Description").end() // .endBag() // @@ -83,7 +83,7 @@ public class StrolchElementBuilderTest { */ // ToStock - .activity("ToStock Template", "ToStock", TimeOrdering.SERIES) // + .activityTemplate("ToStock Template", "ToStock", TimeOrdering.SERIES) // .defaultBag() // .string("description", "Description").end() // .endBag() // @@ -211,7 +211,7 @@ public class StrolchElementBuilderTest { Resource car1 = new StrolchElementBuilder() // - .resource("Car Template", "Car") // + .resourceTemplate("Car Template", "Car") // .defaultBag() // .string("color", "Color").value("white").end() // .endBag() //