X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fadsal%2Fsal%2Fapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcore%2FNode.java;fp=opendaylight%2Fadsal%2Fsal%2Fapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcore%2FNode.java;h=0000000000000000000000000000000000000000;hp=be1ed0746a11dac0794f49c33d210788af859f5a;hb=50f88249a65c52ba56a48852b71ce432fed2bbeb;hpb=abfa9a03550cbe9fccc4420684dced175dd6d119 diff --git a/opendaylight/adsal/sal/api/src/main/java/org/opendaylight/controller/sal/core/Node.java b/opendaylight/adsal/sal/api/src/main/java/org/opendaylight/controller/sal/core/Node.java deleted file mode 100644 index be1ed0746a..0000000000 --- a/opendaylight/adsal/sal/api/src/main/java/org/opendaylight/controller/sal/core/Node.java +++ /dev/null @@ -1,459 +0,0 @@ - -/* - * 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 - */ - -/** - * @file Node.java - * - * @brief Describe a generic network element in multiple SDNs technologies - * - * Describe a generic network element in multiple SDNs technologies. A - * Node is identified by the pair (NodeType, NodeID), the nodetype are - * needed in order to further specify the nodeID - */ -package org.opendaylight.controller.sal.core; - -import java.io.Serializable; -import java.math.BigInteger; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -import org.opendaylight.controller.sal.utils.HexEncode; -import org.opendaylight.controller.sal.utils.INodeFactory; -import org.opendaylight.controller.sal.utils.ServiceHelper; - -/** - * Describe a generic network element in multiple SDNs technologies. A - * Node is identified by the pair (NodeType, NodeID), the nodetype are - * needed in order to further specify the nodeID - * - */ -@XmlAccessorType(XmlAccessType.NONE) -@XmlRootElement -@Deprecated -public class Node implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * Enum-like static class created with the purpose of identifing - * multiple type of nodes in the SDN network. The type is - * necessary to figure out to later on correctly use the - * nodeID. Using a static class instead of an Enum so we can add - * dynamically new types without changing anything in the - * surround. - */ - public static final class NodeIDType { - private static final ConcurrentHashMap> compatibleType = - new ConcurrentHashMap>(); - /** - * Identifier for an OpenFlow node - */ - public static String OPENFLOW = "OF"; - /** - * Identifier for a PCEP node - */ - public static String PCEP = "PE"; - /** - * Identifier for a ONEPK node - */ - public static String ONEPK = "PK"; - /** - * Identifier for a node in a non-SDN network - */ - public static String PRODUCTION = "PR"; - - // Pre-populated types, just here for convenience and ease of - // unit-testing, but certainly those could live also outside. - static { - compatibleType.put(OPENFLOW, Long.class); - compatibleType.put(PCEP, UUID.class); - compatibleType.put(ONEPK, String.class); - compatibleType.put(PRODUCTION, String.class); - } - - /** - * Return the type of the class expected for the - * NodeID, it's used for validity check in the constructor - * - * @param nodeType the type of the node we want to check - * compatibility for - * - * @return The Class which is supposed to instantiate the ID - * for the NodeID - */ - public static Class getClassType(String nodeType) { - return compatibleType.get(nodeType); - } - - /** - * Returns all the registered nodeIDTypes currently available - * - * @return The current registered NodeIDTypes - */ - public static Set values() { - return compatibleType.keySet(); - } - - /** - * Register a new ID for which Node can be created - * - * @param type, the new type being registered - * @param compatibleID, the type of class to be accepted as ID - * - * @return true if registered, false otherwise - */ - public static boolean registerIDType(String type, - Class compatibleID) { - if (compatibleType.get(type) != null) { - return false; - } else { - compatibleType.put(type, compatibleID); - return true; - } - } - - /** - * UNRegister a new ID for which Node can be created - * - * @param type, the type being UN-registered - * - */ - public static void unRegisterIDType(String type) { - compatibleType.remove(type); - } - } - - // This is the identity of the Node a (Type,ID) pair!, the full - // essence of this class. - private Object nodeID; - private String nodeType; - - // Shadow value for unmarshalling - private String nodeIDString; - - /** - * Private constructor used for JAXB mapping - */ - private Node() { - this.nodeID = null; - this.nodeType = null; - this.nodeIDString = null; - } - - /** - * Constructor for the Node objects, it validate the input so if - * the ID passed is not of the type expected accordingly to the - * type an exception is raised. - * - * @param nodeType Type of the node we are building - * @param id ID used by the SDN technology to identify the node - * - */ - public Node(String nodeType, Object id) throws ConstructionException { - if (NodeIDType.getClassType(nodeType) != null && - NodeIDType.getClassType(nodeType).isInstance(id)) { - this.nodeType = nodeType; - this.nodeID = id; - } else { - throw new ConstructionException("Type of incoming object:" - + id.getClass() + " not compatible with expected type:" - + NodeIDType.getClassType(nodeType)); - } - } - - /** - * Copy Constructor for the Node objects. - * - * @param src type of nodes to copy from - * - */ - public Node(Node src) throws ConstructionException { - if (src != null) { - this.nodeType = src.getType(); - // Here we can reference the object because that is - // supposed to be an immutable identifier as well like a - // UUID/Integer and so on, hence no need to create a copy - // of it - this.nodeID = src.getID(); - } else { - throw - new ConstructionException("Null incoming object to copy from"); - } - } - - /** - * getter for node type - * - * - * @return The node Type for this Node object - */ - @XmlElement(name = "type") - public String getType() { - return this.nodeType; - } - - /** - * fill the current object from the string parameters passed, will - * be only used by JAXB - * - * @param typeStr string representing the type of the Node - * @param IDStr String representation of the ID - */ - private void fillmeFromString(String typeStr, String IDStr) { - if (typeStr == null) { - return; - } - - if (IDStr == null) { - return; - } - - this.nodeType = typeStr; - if (typeStr.equals(NodeIDType.OPENFLOW)) { - this.nodeID = Long.valueOf(HexEncode.stringToLong(IDStr)); - } else if (typeStr.equals(NodeIDType.ONEPK)) { - this.nodeID = IDStr; - } else if (typeStr.equals(NodeIDType.PCEP)) { - this.nodeID = UUID.fromString(IDStr); - } else if (typeStr.equals(NodeIDType.PRODUCTION)) { - this.nodeID = IDStr; - } else { - //Use plugin's method to get appropriate conversion from IDStr to nodeID - INodeFactory f = (INodeFactory) ServiceHelper - .getGlobalInstance(INodeFactory.class, new Node(), "(protocolName="+typeStr+")"); - if(f!=null){ - Node n = f.fromString(typeStr, IDStr); - this.nodeID = n.nodeID; - } - } - } - - /** - * Private setter for nodeType to be called by JAXB not by anyone - * else, Node is immutable - * - * @param type of node to be set - */ - @SuppressWarnings("unused") - private void setType(String type) { - this.nodeType = type; - if (this.nodeIDString != null) { - this.fillmeFromString(type, this.nodeIDString); - } - } - - /** - * getter for node ID - * - * - * @return The node ID for this Node object - */ - public Object getID() { - return this.nodeID; - } - - /** - * Getter for the node ID in string format - * - * @return The nodeID in string format - */ - @XmlElement(name = "id") - public String getNodeIDString() { - if (this.nodeType.equals(NodeIDType.OPENFLOW)) { - return HexEncode.longToHexString((Long) this.nodeID); - } else { - return this.nodeID.toString(); - } - } - - /** - * private setter to be used by JAXB - * - * @param nodeIDString String representation for NodeID - */ - @SuppressWarnings("unused") - private void setNodeIDString(String nodeIDString) { - this.nodeIDString = nodeIDString; - if (this.nodeType != null) { - this.fillmeFromString(this.nodeType, nodeIDString); - } - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((nodeID == null) ? 0 : nodeID.hashCode()); - result = prime * result - + ((nodeType == null) ? 0 : nodeType.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; - Node other = (Node) obj; - if (nodeID == null) { - if (other.nodeID != null) - return false; - } else if (!nodeID.equals(other.nodeID)) - return false; - if (nodeType == null) { - if (other.nodeType != null) - return false; - } else if (!nodeType.equals(other.nodeType)) - return false; - return true; - } - - @Override - public String toString() { - if (this.nodeType.equals(NodeIDType.OPENFLOW)) { - return this.nodeType + "|" - + HexEncode.longToHexString((Long) this.nodeID); - } else { - return this.nodeType + "|" + this.nodeID.toString(); - } - } - - /** - * Static method to get back a Node from a string - * - * @param str string formatted in toString mode that can be - * converted back to a Node format. - * - * @return a Node if succed or null if no - */ - public static Node fromString(String str) { - if (str == null) { - return null; - } - - String parts[] = str.split("\\|"); - if (parts.length != 2) { - // Try to guess from a String formatted as a long because - // for long time openflow has been prime citizen so lets - // keep this legacy for now - String numStr = str.toUpperCase(); - - Long ofNodeID = null; - if (numStr.startsWith("0X")) { - // Try as an hex number - try { - BigInteger b = new BigInteger( - numStr.replaceFirst("0X", ""), 16); - ofNodeID = Long.valueOf(b.longValue()); - } catch (Exception ex) { - ofNodeID = null; - } - } else { - // Try as a decimal number - try { - BigInteger b = new BigInteger(numStr); - ofNodeID = Long.valueOf(b.longValue()); - } catch (Exception ex) { - ofNodeID = null; - } - } - - // Startegy #3 parse as HexLong - if (ofNodeID == null) { - try { - ofNodeID = Long.valueOf(HexEncode.stringToLong(numStr)); - } catch (Exception ex) { - ofNodeID = null; - } - } - - // We ran out of ideas ... return null - if (ofNodeID == null) { - return null; - } - - // Lets return the cooked up NodeID - try { - return new Node(NodeIDType.OPENFLOW, ofNodeID); - } catch (ConstructionException ex) { - return null; - } - } - - String typeStr = parts[0]; - String IDStr = parts[1]; - - return fromString(typeStr, IDStr); - } - - /** - * Static method to get back a Node from a pair of strings, the - * first one being the Type representation, the second one being - * the ID string representation, expected to be heavily used in - * northbound API. - * - * @param type, the type of the node we are parsing - * @param id, the string representation of the node id - * - * @return a Node if succed or null if no - */ - public static Node fromString(String typeStr, String IDStr) { - if (typeStr == null) { - return null; - } - - if (IDStr == null) { - return null; - } - - if (typeStr.equals(NodeIDType.OPENFLOW)) { - try { - Long ID = Long.valueOf(HexEncode.stringToLong(IDStr)); - return new Node(typeStr, ID); - } catch (Exception ex) { - return null; - } - } else if (typeStr.equals(NodeIDType.ONEPK)) { - try { - return new Node(typeStr, IDStr); - } catch (Exception ex) { - return null; - } - } else if (typeStr.equals(NodeIDType.PCEP)) { - try { - UUID ID = UUID.fromString(IDStr); - return new Node(typeStr, ID); - } catch (Exception ex) { - return null; - } - } else if (typeStr.equals(NodeIDType.PRODUCTION)) { - try { - return new Node(typeStr, IDStr); - } catch (Exception ex) { - return null; - } - } else { - //Use INodeFactory to create a Node of registered Node type. - //The protocol plugin being used depends on typeStr. - INodeFactory f = (INodeFactory) ServiceHelper - .getGlobalInstance(INodeFactory.class, new Node(), "(protocolName="+typeStr+")"); - if(f==null) - return null; - return f.fromString(typeStr, IDStr); - } - } -}