diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/ActionBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/ActionBuilder.java new file mode 100644 index 000000000..ef5278567 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ActionBuilder.java @@ -0,0 +1,36 @@ +package li.strolch.model.builder; + +import li.strolch.model.PolicyContainer; +import li.strolch.model.activity.Action; + +public class ActionBuilder extends PolicyContainerBuilder implements ActivityElementBuilder { + + private final ActivityBuilder builder; + + private String resourceId; + private String resourceType; + + public ActionBuilder(ActivityBuilder builder, String id, String name, String type) { + super(id, name, type); + this.builder = builder; + } + + public ActivityBuilder endAction() { + return this.builder; + } + + public ActionBuilder resource(String type, String id) { + this.resourceType = type; + this.resourceId = id; + return this; + } + + @Override + public Action build() { + Action action = new Action(getId(), getName(), getType()); + action.setResourceId(this.resourceId); + action.setResourceType(this.resourceType); + build((PolicyContainer) action); + return action; + } +} 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 new file mode 100644 index 000000000..a7f1a89c2 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityBuilder.java @@ -0,0 +1,65 @@ +package li.strolch.model.builder; + +import java.util.ArrayList; +import java.util.List; + +import li.strolch.model.activity.Activity; +import li.strolch.model.activity.TimeOrdering; +import li.strolch.utils.dbc.DBC; + +public class ActivityBuilder extends RootElementBuilder implements ActivityElementBuilder { + + private final TemplatesBuilder templatesBuilder; + private final ActivityBuilder parentBuilder; + private final TimeOrdering timeOrdering; + + private final List builders; + + public ActivityBuilder(TemplatesBuilder builder, String id, String name, String type, TimeOrdering timeOrdering) { + super(id, name, type); + this.templatesBuilder = builder; + this.parentBuilder = null; + this.timeOrdering = timeOrdering; + this.builders = new ArrayList<>(); + } + + public ActivityBuilder(TemplatesBuilder builder, ActivityBuilder parentBuilder, String id, String name, String type, + TimeOrdering timeOrdering) { + super(id, name, type); + this.templatesBuilder = 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); + this.builders.add(builder); + return builder; + } + + public ActionBuilder action(String id, String name, String type) { + ActionBuilder builder = new ActionBuilder(this, id, name, type); + this.builders.add(builder); + return builder; + } + + public ActivityBuilder endSubActivity() { + DBC.PRE.assertNotNull("all sub activities already closed", this.parentBuilder); + return this.parentBuilder; + } + + public TemplatesBuilder endActivity() { + return this.templatesBuilder; + } + + @Override + public Activity build() { + Activity activity = new Activity(getId(), getName(), getType(), this.timeOrdering); + super.build(activity); + + this.builders.forEach(b -> activity.addElement(b.build())); + + return activity; + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityElementBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityElementBuilder.java new file mode 100644 index 000000000..b4424005c --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ActivityElementBuilder.java @@ -0,0 +1,7 @@ +package li.strolch.model.builder; + +import li.strolch.model.activity.IActivityElement; + +public interface ActivityElementBuilder { + IActivityElement build(); +} 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 new file mode 100644 index 000000000..7dc162abe --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/BagBuilder.java @@ -0,0 +1,107 @@ +package li.strolch.model.builder; + +import java.util.ArrayList; +import java.util.List; + +import li.strolch.model.ParameterBag; +import li.strolch.model.ParameterBagContainer; +import li.strolch.model.builder.params.*; + +public class BagBuilder> { + + private final T builder; + private final String id; + private final String name; + private final String type; + private final List> parameters; + + public BagBuilder(T builder, String id, String name, String type) { + this.builder = builder; + this.id = id; + this.name = name; + this.type = type; + this.parameters = new ArrayList<>(); + } + + 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, String name) { + TextParamBuilder builder = new TextParamBuilder<>(this, id, name); + this.parameters.add(builder); + return builder; + } + + 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, String name) { + IntegerParamBuilder builder = new IntegerParamBuilder<>(this, id, name); + this.parameters.add(builder); + return builder; + } + + 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, String name) { + FloatParamBuilder builder = new FloatParamBuilder<>(this, id, name); + this.parameters.add(builder); + return builder; + } + + 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, String name) { + DurationParamBuilder builder = new DurationParamBuilder<>(this, id, name); + this.parameters.add(builder); + return builder; + } + + 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, String name) { + IntegerListParamBuilder builder = new IntegerListParamBuilder<>(this, id, name); + this.parameters.add(builder); + return builder; + } + + 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, String name) { + FloatListParamBuilder builder = new FloatListParamBuilder<>(this, id, name); + this.parameters.add(builder); + return builder; + } + + public T endBag() { + return this.builder; + } + + public void build(ParameterBagContainer element) { + ParameterBag bag = new ParameterBag(this.id, this.name, this.type); + this.parameters.forEach(b -> bag.addParameter(b.build())); + element.addParameterBag(bag); + } +} 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 new file mode 100644 index 000000000..84f8f845c --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/OrderBuilder.java @@ -0,0 +1,28 @@ +package li.strolch.model.builder; + +import li.strolch.model.Order; +import li.strolch.model.State; +import li.strolch.utils.iso8601.ISO8601; + +public class OrderBuilder extends RootElementBuilder { + + private final TemplatesBuilder builder; + + public OrderBuilder(TemplatesBuilder builder, String id, String name, String type) { + super(id, name, type); + this.builder = builder; + } + + public TemplatesBuilder endOrder() { + return this.builder; + } + + @Override + public Order build() { + Order order = new Order(getId(), getName(), getType()); + super.build(order); + order.setDate(ISO8601.EMPTY_VALUE_ZONED_DATE); + order.setState(State.CREATED); + return order; + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java new file mode 100644 index 000000000..c97a3ccc9 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ParameterBagContainerBuilder.java @@ -0,0 +1,192 @@ +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 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; + +public abstract class ParameterBagContainerBuilder> { + + private final String id; + private final String type; + private final String name; + + private final Map> parametersBags; + private final Map singleRelations; + private final Map multiRelations; + + public ParameterBagContainerBuilder(String id, String name, String type) { + this.id = id; + this.name = name; + this.type = type; + + this.parametersBags = new HashMap<>(); + this.singleRelations = new HashMap<>(); + this.multiRelations = new HashMap<>(); + } + + public String getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public String getType() { + return this.type; + } + + public BagBuilder defaultBag() { + return bag(BAG_PARAMETERS, TYPE_PARAMETERS, TYPE_PARAMETERS); + } + + public BagBuilder objectivesBag() { + return bag(BAG_OBJECTIVES, TYPE_OBJECTIVES, TYPE_OBJECTIVES); + } + + public BagBuilder relationsBag() { + return bag(BAG_RELATIONS, TYPE_RELATIONS, TYPE_RELATIONS); + } + + public BagBuilder bag(String id, String name, String 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; + } + + private String buildParamId(String type) { + return Character.toLowerCase(type.charAt(0)) + type.substring(1); + } + + public T resourceRelation(String type) { + return resourceRelation(buildParamId(type), type, type); + } + + public T resourceRelation(String paramId, String paramName, String type) { + assertNotMapped(paramId); + this.singleRelations.put(paramId, new String[] { paramName, type, Tags.RESOURCE }); + @SuppressWarnings("unchecked") + T t = (T) this; + return t; + } + + public T resourceRelations(String type) { + return resourceRelations(buildParamId(type), type + "s", type); + } + + public T resourceRelations(String paramId, String paramName, String type) { + assertNotMapped(paramId); + this.multiRelations.put(paramId, new String[] { paramName, type, Tags.RESOURCE }); + @SuppressWarnings("unchecked") + T t = (T) this; + return t; + } + + public T orderRelation(String type) { + return orderRelation(buildParamId(type), type, type); + } + + public T orderRelation(String paramId, String paramName, String type) { + assertNotMapped(paramId); + this.singleRelations.put(paramId, new String[] { paramName, type, Tags.ORDER }); + @SuppressWarnings("unchecked") + T t = (T) this; + return t; + } + + public T orderRelations(String type) { + return orderRelations(buildParamId(type), type + "s", type); + } + + public T orderRelations(String paramId, String paramName, String type) { + assertNotMapped(paramId); + this.multiRelations.put(paramId, new String[] { paramName, type, Tags.ORDER }); + @SuppressWarnings("unchecked") + T t = (T) this; + return t; + } + + public T activityRelation(String type) { + return activityRelation(buildParamId(type), type, type); + } + + public T activityRelation(String paramId, String paramName, String type) { + assertNotMapped(paramId); + this.singleRelations.put(paramId, new String[] { paramName, type, Tags.ACTIVITY }); + @SuppressWarnings("unchecked") + T t = (T) this; + return t; + } + + public T activityRelations(String type) { + return activityRelations(buildParamId(type), type + "s", type); + } + + public T activityRelations(String paramId, String paramName, String type) { + assertNotMapped(paramId); + this.multiRelations.put(paramId, new String[] { paramName, type, Tags.ACTIVITY }); + @SuppressWarnings("unchecked") + T t = (T) this; + return t; + } + + private void assertNotMapped(String paramId) { + if (this.multiRelations.containsKey(paramId) || this.singleRelations.containsKey(paramId)) + throw new IllegalStateException("Mapping already exists for " + paramId); + } + + protected void build(ParameterBagContainer element) { + + this.parametersBags.values().forEach(bagBuilder -> bagBuilder.build(element)); + + this.singleRelations.forEach((paramId, keys) -> { + ParameterBag relationsBag = getRelationsBag(element); + StringParameter relationP = new StringParameter(paramId, keys[0], ""); + relationP.setInterpretation(getInterpretation(keys[2])); + relationP.setUom(keys[1]); + relationsBag.addParameter(relationP); + }); + + this.multiRelations.forEach((paramId, keys) -> { + ParameterBag relationsBag = getRelationsBag(element); + StringListParameter relationP = new StringListParameter(paramId, keys[0], emptyList()); + relationP.setInterpretation(getInterpretation(keys[2])); + relationP.setUom(keys[1]); + relationsBag.addParameter(relationP); + }); + } + + protected String getInterpretation(String objectType) { + switch (objectType) { + case Tags.RESOURCE: + return INTERPRETATION_RESOURCE_REF; + case Tags.ORDER: + return INTERPRETATION_ORDER_REF; + case Tags.ACTIVITY: + return INTERPRETATION_ACTIVITY_REF; + default: + throw new IllegalArgumentException("Unexpected object type " + objectType); + } + } + + private ParameterBag getRelationsBag(ParameterBagContainer element) { + ParameterBag relationsBag = element.getParameterBag(BAG_RELATIONS); + if (relationsBag == null) { + relationsBag = new ParameterBag(BAG_RELATIONS, TYPE_RELATIONS, TYPE_RELATIONS); + element.addParameterBag(relationsBag); + } + + return relationsBag; + } +} 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 new file mode 100644 index 000000000..ed2bb8e84 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/PoliciesBuilder.java @@ -0,0 +1,41 @@ +package li.strolch.model.builder; + +import li.strolch.model.PolicyContainer; +import li.strolch.model.policy.PolicyDef; +import li.strolch.model.policy.PolicyDefs; + +public class PoliciesBuilder> { + + private final T builder; + private final PolicyDefs policyDefs; + + public PoliciesBuilder(T builder) { + this.builder = builder; + this.policyDefs = new PolicyDefs(); + } + + public PoliciesBuilder planning(String value) { + return policy("PlanningPolicy", value); + } + + public PoliciesBuilder execution(String value) { + return policy("ExecutionPolicy", value); + } + + public PoliciesBuilder confirmation(String value) { + return policy("ConfirmationPolicy", value); + } + + public PoliciesBuilder policy(String type, String value) { + this.policyDefs.addOrUpdate(PolicyDef.valueOf(type, value)); + return this; + } + + public T endPolicies() { + return builder; + } + + public void build(PolicyContainer element) { + element.setPolicyDefs(this.policyDefs.getClone()); + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/PolicyContainerBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/PolicyContainerBuilder.java new file mode 100644 index 000000000..992dfd7af --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/PolicyContainerBuilder.java @@ -0,0 +1,29 @@ +package li.strolch.model.builder; + +import li.strolch.model.ParameterBagContainer; +import li.strolch.model.PolicyContainer; + +public class PolicyContainerBuilder> extends ParameterBagContainerBuilder { + + private PoliciesBuilder policies; + + 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; + this.policies = new PoliciesBuilder(t); + } + return policies; + } + + protected void build(PolicyContainer element) { + build((ParameterBagContainer) element); + + if (this.policies != null) + this.policies.build(element); + } +} 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 new file mode 100644 index 000000000..1a87b2c49 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/ResourceBuilder.java @@ -0,0 +1,67 @@ +package li.strolch.model.builder; + +import java.util.ArrayList; +import java.util.List; + +import li.strolch.model.Resource; +import li.strolch.model.builder.states.*; + +public class ResourceBuilder extends RootElementBuilder { + + private final TemplatesBuilder builder; + private final List> timedStates; + + public ResourceBuilder(TemplatesBuilder builder, String id, String name, String type) { + super(id, name, type); + this.builder = builder; + this.timedStates = new ArrayList<>(); + } + + 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, String name) { + FloatStateBuilder builder = new FloatStateBuilder(this, id, name); + this.timedStates.add(builder); + return builder; + } + + 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, String name) { + LongStateBuilder builder = new LongStateBuilder(this, id, name); + this.timedStates.add(builder); + return builder; + } + + public FloatListStateBuilder floatListState(String id, String name) { + FloatListStateBuilder builder = new FloatListStateBuilder(this, id, name); + this.timedStates.add(builder); + return builder; + } + + public StringSetStateBuilder stringSetState(String id, String name) { + StringSetStateBuilder builder = new StringSetStateBuilder(this, id, name); + this.timedStates.add(builder); + return builder; + } + + public TemplatesBuilder endResource() { + return this.builder; + } + + @Override + public Resource build() { + Resource resource = new Resource(getId(), getName(), getType()); + super.build(resource); + this.timedStates.forEach(b -> resource.addTimedState(b.build())); + return resource; + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/RootElementBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/RootElementBuilder.java new file mode 100644 index 000000000..882b071ef --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/RootElementBuilder.java @@ -0,0 +1,17 @@ +package li.strolch.model.builder; + +import li.strolch.model.PolicyContainer; +import li.strolch.model.StrolchRootElement; + +public abstract class RootElementBuilder> extends PolicyContainerBuilder { + + public RootElementBuilder(String id, String name, String type) { + super(id, name, type); + } + + protected void build(StrolchRootElement element) { + build((PolicyContainer) element); + } + + public abstract StrolchRootElement build(); +} 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 new file mode 100644 index 000000000..1e495c9ee --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/TemplatesBuilder.java @@ -0,0 +1,42 @@ +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 new file mode 100644 index 000000000..b28358b2a --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/BooleanParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.BooleanParameter; + +public class BooleanParamBuilder> + extends ParameterBuilder { + + public BooleanParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public BooleanParameter build() { + return build(new BooleanParameter()); + } +} 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 new file mode 100644 index 000000000..11bec1e8e --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/DateParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.DateParameter; + +public class DateParamBuilder> + extends ParameterBuilder { + + public DateParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public DateParameter build() { + return build(new DateParameter()); + } +} 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 new file mode 100644 index 000000000..05cc57460 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/DurationParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.DurationParameter; + +public class DurationParamBuilder> + extends ParameterBuilder { + + public DurationParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public DurationParameter build() { + return build(new DurationParameter()); + } +} 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 new file mode 100644 index 000000000..cbad185f7 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatListParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.FloatListParameter; + +public class FloatListParamBuilder> + extends ParameterBuilder { + + public FloatListParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public FloatListParameter build() { + return build(new FloatListParameter()); + } +} 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 new file mode 100644 index 000000000..953ac1f68 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/FloatParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.FloatParameter; + +public class FloatParamBuilder> + extends ParameterBuilder { + + public FloatParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public FloatParameter build() { + return build(new FloatParameter()); + } +} 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 new file mode 100644 index 000000000..92328b23b --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerListParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.IntegerListParameter; + +public class IntegerListParamBuilder> + extends ParameterBuilder { + + public IntegerListParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public IntegerListParameter build() { + return build(new IntegerListParameter()); + } +} 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 new file mode 100644 index 000000000..9605b4f1a --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/IntegerParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.IntegerParameter; + +public class IntegerParamBuilder> + extends ParameterBuilder { + + public IntegerParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public IntegerParameter build() { + return build(new IntegerParameter()); + } +} 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 new file mode 100644 index 000000000..3cb433d4b --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongListParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.LongListParameter; + +public class LongListParamBuilder> + extends ParameterBuilder { + + public LongListParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public LongListParameter build() { + return build(new LongListParameter()); + } +} 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 new file mode 100644 index 000000000..f2fb87b04 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/LongParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.LongParameter; + +public class LongParamBuilder> + extends ParameterBuilder { + + public LongParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public LongParameter build() { + return build(new LongParameter()); + } +} 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 new file mode 100644 index 000000000..f78116727 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/ParameterBuilder.java @@ -0,0 +1,63 @@ +package li.strolch.model.builder.params; + +import static li.strolch.model.StrolchModelConstants.INTERPRETATION_NONE; +import static li.strolch.model.StrolchModelConstants.UOM_NONE; + +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> { + + private final BagBuilder builder; + + protected final String id; + protected final String name; + + protected boolean hidden = false; + protected int index; + protected String interpretation = INTERPRETATION_NONE; + protected String uom = UOM_NONE; + + public ParameterBuilder(BagBuilder builder, String id, String name) { + this.builder = builder; + this.id = id; + this.name = name; + } + + public ParameterBuilder hidden(boolean hidden) { + this.hidden = hidden; + return this; + } + + public ParameterBuilder index(int index) { + this.index = index; + return this; + } + + public ParameterBuilder interpretation(String interpretation) { + this.interpretation = interpretation; + return this; + } + + public ParameterBuilder uom(String uom) { + this.uom = uom; + return this; + } + + public BagBuilder end() { + return this.builder; + } + + protected S build(S parameter) { + parameter.setId(this.id); + parameter.setName(this.name); + parameter.setHidden(this.hidden); + parameter.setIndex(this.index); + parameter.setInterpretation(this.interpretation); + parameter.setUom(this.uom); + return parameter; + } + + public abstract S build(); +} 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 new file mode 100644 index 000000000..e8455b688 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringListParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.StringListParameter; + +public class StringListParamBuilder> + extends ParameterBuilder { + + public StringListParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public StringListParameter build() { + return build(new StringListParameter()); + } +} 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 new file mode 100644 index 000000000..e91e3a543 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/StringParamBuilder.java @@ -0,0 +1,17 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.StringParameter; + +public class StringParamBuilder> extends ParameterBuilder { + + public StringParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public StringParameter build() { + return build(new StringParameter()); + } +} 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 new file mode 100644 index 000000000..cb790de3e --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/params/TextParamBuilder.java @@ -0,0 +1,18 @@ +package li.strolch.model.builder.params; + +import li.strolch.model.builder.BagBuilder; +import li.strolch.model.builder.ParameterBagContainerBuilder; +import li.strolch.model.parameter.TextParameter; + +public class TextParamBuilder> + extends ParameterBuilder { + + public TextParamBuilder(BagBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public TextParameter build() { + return build(new TextParameter()); + } +} 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 new file mode 100644 index 000000000..edfc8405e --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/BooleanStateBuilder.java @@ -0,0 +1,16 @@ +package li.strolch.model.builder.states; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.BooleanTimedState; + +public class BooleanStateBuilder extends TimedStateBuilder { + + public BooleanStateBuilder(ResourceBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public BooleanTimedState build() { + return build(new BooleanTimedState()); + } +} 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 new file mode 100644 index 000000000..0efcc0ef0 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatListStateBuilder.java @@ -0,0 +1,16 @@ +package li.strolch.model.builder.states; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.FloatListTimedState; + +public class FloatListStateBuilder extends TimedStateBuilder { + + public FloatListStateBuilder(ResourceBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public FloatListTimedState build() { + return build(new FloatListTimedState()); + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatStateBuilder.java new file mode 100644 index 000000000..5e9e3e244 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/FloatStateBuilder.java @@ -0,0 +1,16 @@ +package li.strolch.model.builder.states; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.FloatTimedState; + +public class FloatStateBuilder extends TimedStateBuilder { + + public FloatStateBuilder(ResourceBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public FloatTimedState build() { + return build(new FloatTimedState()); + } +} 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 new file mode 100644 index 000000000..6a91001ef --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/IntegerStateBuilder.java @@ -0,0 +1,16 @@ +package li.strolch.model.builder.states; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.IntegerTimedState; + +public class IntegerStateBuilder extends TimedStateBuilder { + + public IntegerStateBuilder(ResourceBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public IntegerTimedState build() { + return build(new IntegerTimedState()); + } +} 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 new file mode 100644 index 000000000..c9f165cc4 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/LongStateBuilder.java @@ -0,0 +1,16 @@ +package li.strolch.model.builder.states; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.LongTimedState; + +public class LongStateBuilder extends TimedStateBuilder { + + public LongStateBuilder(ResourceBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public LongTimedState build() { + return build(new LongTimedState()); + } +} 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 new file mode 100644 index 000000000..b15ae7a3e --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/StringSetStateBuilder.java @@ -0,0 +1,16 @@ +package li.strolch.model.builder.states; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.StringSetTimedState; + +public class StringSetStateBuilder extends TimedStateBuilder { + + public StringSetStateBuilder(ResourceBuilder builder, String id, String name) { + super(builder, id, name); + } + + @Override + public StringSetTimedState build() { + return build(new StringSetTimedState()); + } +} diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/states/TimedStateBuilder.java b/li.strolch.model/src/main/java/li/strolch/model/builder/states/TimedStateBuilder.java new file mode 100644 index 000000000..01a9d4a21 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/states/TimedStateBuilder.java @@ -0,0 +1,41 @@ +package li.strolch.model.builder.states; + +import static li.strolch.model.StrolchModelConstants.INTERPRETATION_NONE; +import static li.strolch.model.StrolchModelConstants.UOM_NONE; + +import li.strolch.model.builder.ResourceBuilder; +import li.strolch.model.timedstate.StrolchTimedState; + +public abstract class TimedStateBuilder> { + + private final ResourceBuilder builder; + protected final String id; + protected final String name; + + protected boolean hidden = false; + protected int index; + protected String interpretation = INTERPRETATION_NONE; + protected String uom = UOM_NONE; + + public TimedStateBuilder(ResourceBuilder builder, String id, String name) { + this.builder = builder; + this.id = id; + this.name = name; + } + + public ResourceBuilder end() { + return this.builder; + } + + public abstract T build(); + + protected T build(T state) { + state.setId(this.id); + state.setName(this.name); + state.setHidden(this.hidden); + state.setIndex(this.index); + state.setInterpretation(this.interpretation); + state.setUom(this.uom); + return state; + } +}