From 83a947e04b341f15f7bc89fd165447ead27fe395 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 14 Feb 2020 16:22:59 +0100 Subject: [PATCH] [New] Added IActivityElement.findPolicy() --- .../li/strolch/model/activity/Action.java | 21 +++++++++ .../li/strolch/model/activity/Activity.java | 21 +++++++++ .../model/activity/IActivityElement.java | 45 +++++++++++++++++-- .../model/activity/TimeOrderingVisitor.java | 4 +- 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java b/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java index c810bf520..2bfe0f7db 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/Action.java @@ -343,6 +343,27 @@ public class Action extends GroupedParameterizedElement implements IActivityElem return parameter; } + @Override + public PolicyDef findPolicy(Class clazz, PolicyDef defaultDef) throws StrolchModelException { + return findPolicy(clazz.getSimpleName(), defaultDef); + } + + @Override + public PolicyDef findPolicy(String className, PolicyDef defaultDef) throws StrolchModelException { + if (hasPolicyDef(className)) + return getPolicyDef(className); + + if (this.parent == null) { + if (defaultDef != null) + return defaultDef; + + String msg = "The PolicyDef {0} does not exist"; + throw new StrolchModelException(MessageFormat.format(msg, className)); + } + + return this.parent.findPolicy(className, defaultDef); + } + @Override public T accept(StrolchElementVisitor visitor) { return visitor.visitAction(this); diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java b/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java index b509ca6d3..1e8583ee2 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/Activity.java @@ -601,6 +601,27 @@ public class Activity extends AbstractStrolchRootElement return parameter; } + @Override + public PolicyDef findPolicy(Class clazz, PolicyDef defaultDef) throws StrolchModelException { + return findPolicy(clazz.getSimpleName(), defaultDef); + } + + @Override + public PolicyDef findPolicy(String className, PolicyDef defaultDef) throws StrolchModelException { + if (hasPolicyDef(className)) + return getPolicyDef(className); + + if (this.parent == null) { + if (defaultDef != null) + return defaultDef; + + String msg = "The PolicyDef {0} does not exist"; + throw new StrolchModelException(MessageFormat.format(msg, className)); + } + + return this.parent.findPolicy(className, defaultDef); + } + @Override public void setParent(Activity activity) { assertNotReadonly(); diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/IActivityElement.java b/li.strolch.model/src/main/java/li/strolch/model/activity/IActivityElement.java index f9f8b50aa..b329f8ac4 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/IActivityElement.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/IActivityElement.java @@ -20,6 +20,7 @@ import li.strolch.model.GroupedParameterizedElement; import li.strolch.model.State; import li.strolch.model.StrolchElement; import li.strolch.model.parameter.Parameter; +import li.strolch.model.policy.PolicyDef; import li.strolch.model.visitor.StrolchElementVisitor; /** @@ -83,14 +84,52 @@ public interface IActivityElement extends StrolchElement { *

* *

- * If the parameter does not exist and {@code assertExists} is true, then an + * If the parameter does not exist and {@code assertExists} is true, then a {@link StrolchModelException} is thrown *

- * - * @see GroupedParameterizedElement#getParameter(String, String, boolean) */ > T findParameter(String bagKey, String paramKey, boolean assertExists) throws StrolchModelException; + /** + *

+ * Checks if this element contains the {@link PolicyDef}, or otherwise queries its parent, until the root element is + * reached. + *

+ * + *

+ * If the policy def does not exist and no default policy is passed, then a {@link StrolchModelException} is thrown + *

+ * + * @param className + * the class name of the policy to find + * @param defaultDef + * default {@link PolicyDef} to return if not found + * + * @throws StrolchModelException + * if no default policy, and policy not found + */ + PolicyDef findPolicy(String className, PolicyDef defaultDef) throws StrolchModelException; + + /** + *

+ * Checks if this element contains the {@link PolicyDef}, or otherwise queries its parent, until the root element is + * reached. + *

+ * + *

+ * If the policy def does not exist and no default policy is passed, then a {@link StrolchModelException} is thrown + *

+ * + * @param clazz + * the class of the policy to find + * @param defaultDef + * default {@link PolicyDef} to return if not found + * + * @throws StrolchModelException + * if no default policy, and policy not found + */ + PolicyDef findPolicy(Class clazz, PolicyDef defaultDef) throws StrolchModelException; + @Override Activity getParent(); diff --git a/li.strolch.model/src/main/java/li/strolch/model/activity/TimeOrderingVisitor.java b/li.strolch.model/src/main/java/li/strolch/model/activity/TimeOrderingVisitor.java index 21317a26e..231079866 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/activity/TimeOrderingVisitor.java +++ b/li.strolch.model/src/main/java/li/strolch/model/activity/TimeOrderingVisitor.java @@ -2,7 +2,7 @@ package li.strolch.model.activity; public interface TimeOrderingVisitor { - public void visitSeries(Activity activity); + void visitSeries(Activity activity); - public void visitParallel(Activity activity); + void visitParallel(Activity activity); }