--- /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.util.HashMap;
+import java.util.Map;
+
+import org.opendaylight.controller.configuration.ConfigurationObject;
+import org.opendaylight.controller.sal.core.Description;
+import org.opendaylight.controller.sal.core.ForwardingMode;
+import org.opendaylight.controller.sal.core.Property;
+import org.opendaylight.controller.sal.core.Tier;
+import org.opendaylight.controller.sal.utils.Status;
+import org.opendaylight.controller.sal.utils.StatusCode;
+
+/**
+ * The class describes a switch configuration as a collection of properties
+ */
+public class SwitchConfig extends ConfigurationObject implements Cloneable, Serializable {
+ private static final long serialVersionUID = 1L;
+ private final String nodeId;
+ private final Map<String, Property> nodeProperties;
+
+ public SwitchConfig(String nodeId, Map<String, Property> nodeProperties) {
+ this.nodeId = nodeId;
+ this.nodeProperties = (nodeProperties == null) ? new HashMap<String, Property>()
+ : new HashMap<String, Property>(nodeProperties);
+ }
+
+ @Deprecated
+ public SwitchConfig(String nodeId, String description, String tier, String mode) {
+ this.nodeId = nodeId;
+ this.nodeProperties = new HashMap<String, Property>();
+ Property desc = new Description(description);
+ this.nodeProperties.put(desc.getName(), desc);
+ Property nodeTier = new Tier(Integer.valueOf(tier));
+ this.nodeProperties.put(nodeTier.getName(), nodeTier);
+ Property forwardingMode = new ForwardingMode(Integer.valueOf(mode));
+ this.nodeProperties.put(forwardingMode.getName(), forwardingMode);
+ }
+
+ public String getNodeId() {
+ return this.nodeId;
+ }
+
+ public Map<String, Property> getNodeProperties() {
+ return new HashMap<String, Property>(this.nodeProperties);
+ }
+
+ public Property getProperty(String PropName) {
+ return nodeProperties.get(PropName);
+ }
+
+ /**
+ * This method returns the configured description of the node
+ *
+ * @return Configured description
+ *
+ * @deprecated replaced by getProperty(Description.propertyName)
+ */
+ @Deprecated
+ public String getNodeDescription() {
+ Description description = (Description) getProperty(Description.propertyName);
+ return (description == null) ? null : description.getValue();
+ }
+
+ /**
+ * This method returns the configured Tier of a node
+ *
+ * @return Configured tier
+ *
+ * @deprecated replaced by getProperty(Tier.TierPropName)
+ */
+ @Deprecated
+ public String getTier() {
+ Tier tier = (Tier) getProperty(Tier.TierPropName);
+ return (tier == null) ? null : String.valueOf(tier.getValue());
+ }
+
+ /**
+ * This method returns the configured Forwarding Mode of a node
+ *
+ * @return Configured Forwarding Mode
+ *
+ * @deprecated replaced by getProperty(ForwardingMode.name)
+ */
+ @Deprecated
+ public String getMode() {
+ ForwardingMode forwardingMode = (ForwardingMode) getProperty(ForwardingMode.name);
+ return (forwardingMode == null) ? null : String.valueOf(forwardingMode.getValue());
+ }
+
+ /**
+ * This method returns true, if the configured forwarding mode is proactive,
+ * else false
+ *
+ * @return true, if the configured forwarding mode is proactive, else false
+ *
+ * @deprecated replaced by isProactive() API of ForwardingMode property
+ */
+ @Deprecated
+ public boolean isProactive() {
+ return Integer.parseInt(getMode()) == ForwardingMode.PROACTIVE_FORWARDING;
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public Status validate() {
+ Status validCheck = validateNodeId();
+ if (validCheck.isSuccess()) {
+ validCheck = validateNodeProperties();
+ }
+ return validCheck;
+ }
+
+ private Status validateNodeId() {
+ if (nodeId == null || nodeId.trim().isEmpty()) {
+ return new Status(StatusCode.BADREQUEST, "Invalid node id");
+ }
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ private Status validateNodeProperties() {
+ if (nodeProperties == null) {
+ return new Status(StatusCode.BADREQUEST, "Node properties must be specified");
+ }
+ if (nodeProperties.containsKey(Description.propertyName)) {
+ if (!isValidResourceName(((Description)nodeProperties.get(Description.propertyName)).getValue())) {
+ return new Status(StatusCode.BADREQUEST, "Invalid node description");
+ }
+ }
+ return new Status(StatusCode.SUCCESS);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((nodeId == null) ? 0 : nodeId.hashCode());
+ result = prime * result + ((nodeProperties == null) ? 0 : nodeProperties.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;
+ }
+ SwitchConfig other = (SwitchConfig) obj;
+ if (nodeId == null) {
+ if (other.nodeId != null) {
+ return false;
+ }
+ } else if (!nodeId.equals(other.nodeId)) {
+ return false;
+ }
+ if (nodeProperties == null) {
+ if (other.nodeProperties != null) {
+ return false;
+ }
+ } else if (!nodeProperties.equals(other.nodeProperties)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return ("SwitchConfig [Node=" + nodeId + ", Properties=" + nodeProperties + "]");
+ }
+
+ /**
+ * Implement clonable interface
+ */
+ @Override
+ public SwitchConfig clone() {
+ Map<String, Property> nodeProperties = (this.nodeProperties == null) ? null : new HashMap<String, Property>(
+ this.nodeProperties);
+ return new SwitchConfig(this.nodeId, nodeProperties);
+ }
+
+}