From ad80ad4d79fe8d3c97a5cdd708bce6fd2695b973 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Wed, 28 Oct 2020 13:15:15 +0100 Subject: [PATCH] [New] Added StrolchRootElement.setRelation() --- .../model/AbstractStrolchRootElement.java | 36 +++++++++++++++++++ .../model/GroupedParameterizedElement.java | 11 +++++- .../li/strolch/model/StrolchRootElement.java | 20 +++++++++++ .../strolch/model/builder/BuilderHelper.java | 12 +++++++ .../builder/ParameterBagContainerBuilder.java | 5 +-- 5 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 li.strolch.model/src/main/java/li/strolch/model/builder/BuilderHelper.java diff --git a/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java b/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java index 3898e0bbc..17b47dac3 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java +++ b/li.strolch.model/src/main/java/li/strolch/model/AbstractStrolchRootElement.java @@ -1,5 +1,11 @@ package li.strolch.model; +import static li.strolch.model.StrolchModelConstants.*; +import static li.strolch.model.builder.BuilderHelper.buildParamId; +import static li.strolch.model.builder.BuilderHelper.buildParamName; + +import li.strolch.model.parameter.StringParameter; + public abstract class AbstractStrolchRootElement extends GroupedParameterizedElement implements StrolchRootElement { public AbstractStrolchRootElement() { @@ -9,4 +15,34 @@ public abstract class AbstractStrolchRootElement extends GroupedParameterizedEle public AbstractStrolchRootElement(String id, String name, String type) { super(id, name, type); } + + public void setRelation(StrolchRootElement element) { + setRelation(buildParamId(element.getType()), element); + } + + public void setRelation(String param, StrolchRootElement element) { + StringParameter relationP = relationsBag().getParameter(param); + if (relationP == null) { + String name = buildParamName(param); + relationP = new StringParameter(param, name, ""); + + switch (element.getObjectType()) { + case Tags.RESOURCE: + relationP.setInterpretation(INTERPRETATION_RESOURCE_REF); + break; + case Tags.ORDER: + relationP.setInterpretation(INTERPRETATION_ORDER_REF); + break; + case Tags.ACTIVITY: + relationP.setInterpretation(INTERPRETATION_ACTIVITY_REF); + break; + } + + relationP.setUom(element.getType()); + + relationsBag().addParameter(relationP); + } + + relationP.setValue(element.getId()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/GroupedParameterizedElement.java b/li.strolch.model/src/main/java/li/strolch/model/GroupedParameterizedElement.java index be86b52da..86a366972 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/GroupedParameterizedElement.java +++ b/li.strolch.model/src/main/java/li/strolch/model/GroupedParameterizedElement.java @@ -496,7 +496,7 @@ public abstract class GroupedParameterizedElement extends AbstractStrolchElement bag.setLongList(paramKey, value); } - private ParameterBag defaultBag() { + protected ParameterBag defaultBag() { ParameterBag bag = getParameterBag(BAG_PARAMETERS, false); if (bag == null) { bag = new ParameterBag(BAG_PARAMETERS, TYPE_PARAMETERS, TYPE_PARAMETERS); @@ -505,6 +505,15 @@ public abstract class GroupedParameterizedElement extends AbstractStrolchElement return bag; } + protected ParameterBag relationsBag() { + ParameterBag bag = getParameterBag(BAG_RELATIONS, false); + if (bag == null) { + bag = new ParameterBag(BAG_RELATIONS, TYPE_RELATIONS, TYPE_RELATIONS); + addParameterBag(bag); + } + return bag; + } + /// /// diff --git a/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java b/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java index 4c4161f77..fc01463c7 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java +++ b/li.strolch.model/src/main/java/li/strolch/model/StrolchRootElement.java @@ -79,6 +79,26 @@ public interface StrolchRootElement extends StrolchElement, PolicyContainer, Par */ void setVersion(Version version) throws IllegalArgumentException; + /** + * Set a relation to the given element by using the type of the given element as the parameter ID, but lower-ccasing + * the first letter. Should the parameter not exist, then it will be created + * + * @param element + * the element for which to set the relation to + */ + void setRelation(StrolchRootElement element); + + /** + * Set a relation to the given element by using the given param. Should the parameter not exist, then it will be + * created + * + * @param param + * the parameter ID on which to set the relations + * @param element + * the element for which to set the relation to + */ + void setRelation(String param, StrolchRootElement element); + /** * Return a clone of this {@link StrolchElement} * diff --git a/li.strolch.model/src/main/java/li/strolch/model/builder/BuilderHelper.java b/li.strolch.model/src/main/java/li/strolch/model/builder/BuilderHelper.java new file mode 100644 index 000000000..6d45afa78 --- /dev/null +++ b/li.strolch.model/src/main/java/li/strolch/model/builder/BuilderHelper.java @@ -0,0 +1,12 @@ +package li.strolch.model.builder; + +public class BuilderHelper { + + public static String buildParamId(String type) { + return Character.toLowerCase(type.charAt(0)) + type.substring(1); + } + + public static String buildParamName(String paramId) { + return Character.toUpperCase(paramId.charAt(0)) + paramId.substring(1); + } +} 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 index c97a3ccc9..2b8f94464 100644 --- 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 @@ -3,6 +3,7 @@ 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; @@ -65,10 +66,6 @@ public abstract class ParameterBagContainerBuilder