--- /dev/null
+
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.switchmanager;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.controller.configuration.ConfigurationObject;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.utils.GUIField;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The class represents a Span Port configuration for a network node.
+ */
+public class SpanConfig extends ConfigurationObject implements Serializable {
+ protected static final Logger logger = LoggerFactory
+ .getLogger(SpanConfig.class);
+ private static final long serialVersionUID = 1L;
+ private static final String guiFields[] = { GUIField.NODE.toString(),
+ GUIField.SPANPORTS.toString() };
+
+ // Order matters: JSP file expects following fields in the following order
+ private String nodeId;
+ private String spanPort;
+
+ public SpanConfig() {
+ }
+
+ public String getNodeId() {
+ return nodeId;
+ }
+
+ public String getSpanPort() {
+ return spanPort;
+ }
+
+ public Node getNode() {
+ return Node.fromString(nodeId);
+ }
+
+ private boolean hasValidNodeId() {
+ return (getNode() != null);
+ }
+
+ private boolean hasValidSpanPort() {
+ return (spanPort != null && !spanPort.isEmpty());
+ }
+
+ public boolean isValidConfig() {
+ return (hasValidNodeId() && hasValidSpanPort());
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((nodeId == null) ? 0 : nodeId.hashCode());
+ result = prime * result
+ + ((spanPort == null) ? 0 : spanPort.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ SpanConfig other = (SpanConfig) obj;
+ if (nodeId == null) {
+ if (other.nodeId != null) {
+ return false;
+ }
+ } else if (!nodeId.equals(other.nodeId)) {
+ return false;
+ }
+ if (spanPort == null) {
+ if (other.spanPort != null) {
+ return false;
+ }
+ } else if (!spanPort.equals(other.spanPort)) {
+ return false;
+ }
+ return true;
+ }
+
+ public static ArrayList<String> getFieldsNames() {
+ ArrayList<String> fieldList = new ArrayList<String>();
+ for (Field fld : SpanConfig.class.getDeclaredFields()) {
+ fieldList.add(fld.getName());
+ }
+ //remove the two static fields
+ for (short i = 0; i < 2; i++) {
+ fieldList.remove(0);
+ }
+ return fieldList;
+ }
+
+ public static List<String> getGuiFieldsNames() {
+ List<String> fieldList = new ArrayList<String>();
+ for (String str : guiFields) {
+ fieldList.add(str);
+ }
+ return fieldList;
+ }
+
+ public ArrayList<NodeConnector> getPortArrayList() {
+ ArrayList<NodeConnector> portList = new ArrayList<NodeConnector>();
+ String[] elemArray = spanPort.split(",");
+ for (String elem : elemArray) {
+ NodeConnector nodeConnector = NodeConnector.fromString(elem);
+ if (nodeConnector != null) {
+ portList.add(nodeConnector);
+ }
+ }
+ return portList;
+ }
+
+ public boolean matchNode(String nodeId) {
+ return this.nodeId.equals(nodeId);
+ }
+
+ @Override
+ public String toString() {
+ return ("SpanConfig [nodeId=" + nodeId + ", spanPort=" + spanPort + "]");
+ }
+}