/** * TODO * * @param virtualNetworkId TODO * @param virtualNode TODO * @param physicalNodes TODO * @return TODO */ private PhysicalNode virtualNodeMapping( VirtualNetworkId virtualNetworkId, VirtualNode virtualNode, List<PhysicalNode> physicalNodes) throws VNMappingException { List< org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network .rev151010.virtual.node.instance.PhysicalResourceRequirement> physicalResourceRequirements = virtualNode.getPhysicalResourceRequirement(); List<PhysicalNode> candidates = new LinkedList<PhysicalNode>(); switch (virtualNode.getNodeType()) { case Vswitch: for (PhysicalNode physicalNode : physicalNodes) { if (PhysicalNode.NodeType.Switch == physicalNode.getNodeType()) { if (checkPhysicalNodeSatisfied(physicalNode, physicalResourceRequirements)) { candidates.add(physicalNode); } } } break; case Vrouter: for (PhysicalNode physicalNode : physicalNodes) { if (PhysicalNode.NodeType.Router == physicalNode.getNodeType()) { if (checkPhysicalNodeSatisfied(physicalNode, physicalResourceRequirements)) { candidates.add(physicalNode); } } } break; case Vfirewall: for (PhysicalNode physicalNode : physicalNodes) { if (PhysicalNode.NodeType.Firewall == physicalNode.getNodeType()) { if (checkPhysicalNodeSatisfied(physicalNode, physicalResourceRequirements)) { candidates.add(physicalNode); } } } break; case Vloadbalancer: for (PhysicalNode physicalNode : physicalNodes) { if (PhysicalNode.NodeType.Loadbalancer == physicalNode.getNodeType()) { if (checkPhysicalNodeSatisfied(physicalNode, physicalResourceRequirements)) { candidates.add(physicalNode); } } } break; default: throw new VNMappingException( "Unsupported virtual node type " + virtualNode.getNodeType() + "."); // break; } if (candidates.isEmpty()) { return null; } return candidates.get(0); }