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 5c8a87a4c..28e334dc6 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 @@ -15,11 +15,15 @@ */ package li.strolch.model.activity; +import static java.util.stream.Collectors.toList; import static li.strolch.model.StrolchModelConstants.BAG_RELATIONS; +import static li.strolch.utils.collections.CollectionsHelper.singletonCollector; import java.text.MessageFormat; import java.util.*; import java.util.Map.Entry; +import java.util.function.Predicate; +import java.util.function.Supplier; import java.util.stream.Stream; import li.strolch.exception.StrolchElementNotFoundException; @@ -325,6 +329,29 @@ public class Activity extends AbstractStrolchRootElement return Optional.empty(); } + public T findElement(Predicate predicate, + Supplier msgSupplier) { + @SuppressWarnings("unchecked") + T t = (T) this.elements.values().stream().filter(predicate).collect(singletonCollector(msgSupplier)); + return t; + } + + public List findElements(Predicate predicate) { + return this.elements.values().stream().filter(predicate).collect(toList()); + } + + public List findActions(Predicate predicate) { + return this.elements.values().stream() // + .filter(IActivityElement::isAction) // + .map(e -> (Action) e) // + .filter(predicate) // + .collect(toList()); + } + + public List findActionsDeep(Predicate predicate) { + return getActionsAsFlatList().stream().filter(predicate).collect(toList()); + } + public List getElementsByType(String type) { List elements = new ArrayList<>(); Iterator> iter = elementIterator(); @@ -345,6 +372,10 @@ public class Activity extends AbstractStrolchRootElement return this.elements; } + public Stream streamElements() { + return this.elements.values().stream(); + } + /** * Returns all the actions as a flat list *