aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java')
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java175
1 files changed, 175 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java
new file mode 100644
index 00000000..151e6131
--- /dev/null
+++ b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.onosproject.ui.impl.topo;
+
+import org.onosproject.net.intent.Intent;
+import org.onosproject.ui.topo.NodeSelection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Encapsulates a selection of intents (paths) inferred from a selection
+ * of devices and/or hosts from the topology view.
+ */
+public class IntentSelection {
+
+ private static final int ALL = -1;
+
+ protected static final Logger log =
+ LoggerFactory.getLogger(IntentSelection.class);
+
+ private final NodeSelection nodes;
+
+ private final List<Intent> intents;
+ private int index = ALL;
+
+ /**
+ * Creates an intent selection group, based on selected nodes.
+ *
+ * @param nodes node selection
+ * @param filter intent filter
+ */
+ public IntentSelection(NodeSelection nodes, TopoIntentFilter filter) {
+ this.nodes = nodes;
+ intents = filter.findPathIntents(nodes.hostsWithHover(), nodes.devicesWithHover());
+ if (intents.size() == 1) {
+ index = 0; // pre-select a single intent
+ }
+ }
+
+ /**
+ * Creates an intent selection group, for a single intent.
+ *
+ * @param intent the intent
+ */
+ public IntentSelection(Intent intent) {
+ nodes = null;
+ intents = new ArrayList<>(1);
+ intents.add(intent);
+ index = 0;
+ }
+
+ /**
+ * Returns true if no intents are selected.
+ *
+ * @return true if nothing selected
+ */
+ public boolean none() {
+ return intents.isEmpty();
+ }
+
+ /**
+ * Returns true if all intents in this select group are currently selected.
+ * This is the initial state, so that all intents are shown on the
+ * topology view with primary highlighting.
+ *
+ * @return true if all selected
+ */
+ public boolean all() {
+ return index == ALL;
+ }
+
+ /**
+ * Returns true if there is a single intent in this select group, or if
+ * a specific intent has been marked (index != ALL).
+ *
+ * @return true if single intent marked
+ */
+ public boolean single() {
+ return !all();
+ }
+
+ /**
+ * Returns the number of intents in this selection group.
+ *
+ * @return number of intents
+ */
+ public int size() {
+ return intents.size();
+ }
+
+ /**
+ * Returns the index of the currently selected intent.
+ *
+ * @return the current index
+ */
+ public int index() {
+ return index;
+ }
+
+ /**
+ * The list of intents in this selection group.
+ *
+ * @return list of intents
+ */
+ public List<Intent> intents() {
+ return Collections.unmodifiableList(intents);
+ }
+
+ /**
+ * Marks and returns the next intent in this group. Note that the
+ * selection wraps around to the beginning again, if necessary.
+ *
+ * @return the next intent in the group
+ */
+ public Intent next() {
+ index += 1;
+ if (index >= intents.size()) {
+ index = 0;
+ }
+ return intents.get(index);
+ }
+
+ /**
+ * Marks and returns the previous intent in this group. Note that the
+ * selection wraps around to the end again, if necessary.
+ *
+ * @return the previous intent in the group
+ */
+ public Intent prev() {
+ index -= 1;
+ if (index < 0) {
+ index = intents.size() - 1;
+ }
+ return intents.get(index);
+ }
+
+ /**
+ * Returns the currently marked intent, or null if "all" intents
+ * are marked.
+ *
+ * @return the currently marked intent
+ */
+ public Intent current() {
+ return all() ? null : intents.get(index);
+ }
+
+ @Override
+ public String toString() {
+ return "IntentSelection{" +
+ "nodes=" + nodes +
+ ", #intents=" + intents.size() +
+ ", index=" + index +
+ '}';
+ }
+
+}