[New] Added Builder API for Strolch elements

This commit is contained in:
Robert von Burg 2020-07-02 15:54:50 +02:00
parent 8537bead2d
commit 015557d3e6
31 changed files with 1046 additions and 0 deletions

View File

@ -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<ActionBuilder> 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;
}
}

View File

@ -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<ActivityBuilder> implements ActivityElementBuilder {
private final TemplatesBuilder templatesBuilder;
private final ActivityBuilder parentBuilder;
private final TimeOrdering timeOrdering;
private final List<ActivityElementBuilder> builders;
public ActivityBuilder(TemplatesBuilder builder, String id, String name, String type, TimeOrdering timeOrdering) {
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;
}
}

View File

@ -0,0 +1,7 @@
package li.strolch.model.builder;
import li.strolch.model.activity.IActivityElement;
public interface ActivityElementBuilder {
IActivityElement build();
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>> {
private final T builder;
private final String id;
private final String name;
private final String type;
private final List<ParameterBuilder<?, ?>> 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<T> string(String id, String name) {
StringParamBuilder<T> builder = new StringParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public TextParamBuilder<T> text(String id, String name) {
TextParamBuilder<T> builder = new TextParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public BooleanParamBuilder<T> booleanB(String id, String name) {
BooleanParamBuilder<T> builder = new BooleanParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public IntegerParamBuilder<T> integer(String id, String name) {
IntegerParamBuilder<T> builder = new IntegerParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public LongParamBuilder<T> longB(String id, String name) {
LongParamBuilder<T> builder = new LongParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public FloatParamBuilder<T> floatB(String id, String name) {
FloatParamBuilder<T> builder = new FloatParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public DateParamBuilder<T> date(String id, String name) {
DateParamBuilder<T> builder = new DateParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public DurationParamBuilder<T> duration(String id, String name) {
DurationParamBuilder<T> builder = new DurationParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public StringListParamBuilder<T> stringList(String id, String name) {
StringListParamBuilder<T> builder = new StringListParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public IntegerListParamBuilder<T> integerList(String id, String name) {
IntegerListParamBuilder<T> builder = new IntegerListParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public LongListParamBuilder<T> longList(String id, String name) {
LongListParamBuilder<T> builder = new LongListParamBuilder<>(this, id, name);
this.parameters.add(builder);
return builder;
}
public FloatListParamBuilder<T> floatList(String id, String name) {
FloatListParamBuilder<T> 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);
}
}

View File

@ -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<OrderBuilder> {
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;
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>> {
private final String id;
private final String type;
private final String name;
private final Map<String, BagBuilder<T>> parametersBags;
private final Map<String, String[]> singleRelations;
private final Map<String, String[]> 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<T> defaultBag() {
return bag(BAG_PARAMETERS, TYPE_PARAMETERS, TYPE_PARAMETERS);
}
public BagBuilder<T> objectivesBag() {
return bag(BAG_OBJECTIVES, TYPE_OBJECTIVES, TYPE_OBJECTIVES);
}
public BagBuilder<T> relationsBag() {
return bag(BAG_RELATIONS, TYPE_RELATIONS, TYPE_RELATIONS);
}
public BagBuilder<T> bag(String id, String name, String type) {
@SuppressWarnings("unchecked")
BagBuilder<T> 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;
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>> {
private final T builder;
private final PolicyDefs policyDefs;
public PoliciesBuilder(T builder) {
this.builder = builder;
this.policyDefs = new PolicyDefs();
}
public PoliciesBuilder<T> planning(String value) {
return policy("PlanningPolicy", value);
}
public PoliciesBuilder<T> execution(String value) {
return policy("ExecutionPolicy", value);
}
public PoliciesBuilder<T> confirmation(String value) {
return policy("ConfirmationPolicy", value);
}
public PoliciesBuilder<T> 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());
}
}

View File

@ -0,0 +1,29 @@
package li.strolch.model.builder;
import li.strolch.model.ParameterBagContainer;
import li.strolch.model.PolicyContainer;
public class PolicyContainerBuilder<T extends ParameterBagContainerBuilder<T>> extends ParameterBagContainerBuilder<T> {
private PoliciesBuilder<T> policies;
public PolicyContainerBuilder(String id, String name, String type) {
super(id, name, type);
}
public PoliciesBuilder<T> policies() {
if (this.policies == null) {
@SuppressWarnings("unchecked")
T t = (T) this;
this.policies = new PoliciesBuilder<T>(t);
}
return policies;
}
protected void build(PolicyContainer element) {
build((ParameterBagContainer) element);
if (this.policies != null)
this.policies.build(element);
}
}

View File

@ -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<ResourceBuilder> {
private final TemplatesBuilder builder;
private final List<TimedStateBuilder<?>> 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;
}
}

View File

@ -0,0 +1,17 @@
package li.strolch.model.builder;
import li.strolch.model.PolicyContainer;
import li.strolch.model.StrolchRootElement;
public abstract class RootElementBuilder<T extends ParameterBagContainerBuilder<T>> extends PolicyContainerBuilder<T> {
public RootElementBuilder(String id, String name, String type) {
super(id, name, type);
}
protected void build(StrolchRootElement element) {
build((PolicyContainer) element);
}
public abstract StrolchRootElement build();
}

View File

@ -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<String, String, RootElementBuilder<?>> builders;
public TemplatesBuilder() {
this.builders = new MapOfMaps<>();
}
public ResourceBuilder resource(String name, String type) {
ResourceBuilder builder = new ResourceBuilder(this, type, name, TEMPLATE);
this.builders.addElement(Tags.Json.RESOURCE, type, builder);
return builder;
}
public OrderBuilder order(String name, String type) {
OrderBuilder builder = new OrderBuilder(this, type, name, TEMPLATE);
this.builders.addElement(Tags.Json.ORDER, type, builder);
return builder;
}
public ActivityBuilder activity(String name, String type, TimeOrdering timeOrdering) {
ActivityBuilder builder = new ActivityBuilder(this, type, name, TEMPLATE, timeOrdering);
this.builders.addElement(Tags.Json.ACTIVITY, type, builder);
return builder;
}
public List<StrolchRootElement> buildTemplates() {
return this.builders.streamValues().map(RootElementBuilder::build).collect(toList());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<BooleanParameter, T> {
public BooleanParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public BooleanParameter build() {
return build(new BooleanParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<DateParameter, T> {
public DateParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public DateParameter build() {
return build(new DateParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<DurationParameter, T> {
public DurationParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public DurationParameter build() {
return build(new DurationParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<FloatListParameter, T> {
public FloatListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public FloatListParameter build() {
return build(new FloatListParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<FloatParameter, T> {
public FloatParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public FloatParameter build() {
return build(new FloatParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<IntegerListParameter, T> {
public IntegerListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public IntegerListParameter build() {
return build(new IntegerListParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<IntegerParameter, T> {
public IntegerParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public IntegerParameter build() {
return build(new IntegerParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<LongListParameter, T> {
public LongListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public LongListParameter build() {
return build(new LongListParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<LongParameter, T> {
public LongParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public LongParameter build() {
return build(new LongParameter());
}
}

View File

@ -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<S extends Parameter<?>, T extends ParameterBagContainerBuilder<T>> {
private final BagBuilder<T> 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<T> builder, String id, String name) {
this.builder = builder;
this.id = id;
this.name = name;
}
public ParameterBuilder<S, T> hidden(boolean hidden) {
this.hidden = hidden;
return this;
}
public ParameterBuilder<S, T> index(int index) {
this.index = index;
return this;
}
public ParameterBuilder<S, T> interpretation(String interpretation) {
this.interpretation = interpretation;
return this;
}
public ParameterBuilder<S, T> uom(String uom) {
this.uom = uom;
return this;
}
public BagBuilder<T> 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();
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<StringListParameter, T> {
public StringListParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public StringListParameter build() {
return build(new StringListParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>> extends ParameterBuilder<StringParameter,T> {
public StringParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public StringParameter build() {
return build(new StringParameter());
}
}

View File

@ -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<T extends ParameterBagContainerBuilder<T>>
extends ParameterBuilder<TextParameter, T> {
public TextParamBuilder(BagBuilder<T> builder, String id, String name) {
super(builder, id, name);
}
@Override
public TextParameter build() {
return build(new TextParameter());
}
}

View File

@ -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<BooleanTimedState> {
public BooleanStateBuilder(ResourceBuilder builder, String id, String name) {
super(builder, id, name);
}
@Override
public BooleanTimedState build() {
return build(new BooleanTimedState());
}
}

View File

@ -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<FloatListTimedState> {
public FloatListStateBuilder(ResourceBuilder builder, String id, String name) {
super(builder, id, name);
}
@Override
public FloatListTimedState build() {
return build(new FloatListTimedState());
}
}

View File

@ -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<FloatTimedState> {
public FloatStateBuilder(ResourceBuilder builder, String id, String name) {
super(builder, id, name);
}
@Override
public FloatTimedState build() {
return build(new FloatTimedState());
}
}

View File

@ -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<IntegerTimedState> {
public IntegerStateBuilder(ResourceBuilder builder, String id, String name) {
super(builder, id, name);
}
@Override
public IntegerTimedState build() {
return build(new IntegerTimedState());
}
}

View File

@ -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<LongTimedState> {
public LongStateBuilder(ResourceBuilder builder, String id, String name) {
super(builder, id, name);
}
@Override
public LongTimedState build() {
return build(new LongTimedState());
}
}

View File

@ -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<StringSetTimedState> {
public StringSetStateBuilder(ResourceBuilder builder, String id, String name) {
super(builder, id, name);
}
@Override
public StringSetTimedState build() {
return build(new StringSetTimedState());
}
}

View File

@ -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<T extends StrolchTimedState<?>> {
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;
}
}