summaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/component/chain/Phase.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-core/src/main/java/com/yahoo/component/chain/Phase.java')
-rw-r--r--container-core/src/main/java/com/yahoo/component/chain/Phase.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/component/chain/Phase.java b/container-core/src/main/java/com/yahoo/component/chain/Phase.java
new file mode 100644
index 00000000000..64584450c23
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/component/chain/Phase.java
@@ -0,0 +1,52 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.component.chain;
+
+import com.yahoo.component.chain.dependencies.Dependencies;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Used for many to many constraints on searcher ordering. Immutable.
+ *
+ * @author Tony Vaagenes
+ */
+public class Phase {
+
+ public final Dependencies dependencies;
+
+ public Phase(String name, Set<String> before, Set<String> after) {
+ dependencies = new Dependencies(provides(name), before, after);
+ }
+
+ public Phase(String name, Dependencies dependencies) {
+ this(name, dependencies.before(), dependencies.after());
+ assert(dependencies.provides().isEmpty());
+ }
+
+ private Set<String> provides(String name) {
+ Set<String> provides = new TreeSet<>();
+ provides.add(name);
+ return provides;
+ }
+
+ public String getName() {
+ return dependencies.provides().iterator().next();
+ }
+
+ public Set<String> before() {
+ return dependencies.before();
+ }
+
+ public Set<String> after() {
+ return dependencies.after();
+ }
+
+ public Phase union(Phase phase) {
+ assert(getName().equals(phase.getName()));
+
+ Dependencies union = dependencies.union(phase.dependencies);
+ return new Phase(getName(), union.before(), union.after());
+ }
+
+}