\r
package org.opendaylight.nemo.intent;\r
\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.ExecutionException;\r
+\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ConnectionId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ObjectId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalNodeId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNodeId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.SubNode;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.StringValue;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;\r
import org.opendaylight.yangtools.yang.binding.DataObject;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
+import com.google.common.base.Optional;\r
\r
/**\r
* Implement the common utilities frequently used in\r
* @author Zhigang Ji\r
*/\r
public class IntentResolverUtils {\r
+\r
+ private static final Logger LOG = LoggerFactory.getLogger(IntentResolverUtils.class);\r
+\r
/**\r
* Check whether the node is an external layer2 group or layer3 group.\r
*\r
\r
return null;\r
}\r
+\r
+\r
+ public static void copyPhysicalNetworkConfigToOperational(DataBroker dataBroker) {\r
+ final InstanceIdentifier<PhysicalNetwork> physicalNetworkIid = InstanceIdentifier\r
+ .builder(PhysicalNetwork.class).build();\r
+\r
+ final ReadWriteTransaction txn = dataBroker.newReadWriteTransaction();\r
+\r
+ try {\r
+ final Optional<PhysicalNetwork> oper = txn.read(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid).get();\r
+\r
+ if (oper.isPresent()) {\r
+ txn.cancel();\r
+ LOG.info("Physical network already exists in operational");\r
+ } else {\r
+ final Optional<PhysicalNetwork> config = txn.read(LogicalDatastoreType.CONFIGURATION,\r
+ physicalNetworkIid).get();\r
+\r
+ if (config.isPresent()) {\r
+ txn.put(LogicalDatastoreType.OPERATIONAL, physicalNetworkIid, config.get());\r
+ txn.submit().get();\r
+ LOG.info("Copied physical network from config to operational");\r
+ } else {\r
+ txn.cancel();\r
+ LOG.info("No physical network found in config; none copied to operational");\r
+ }\r
+ }\r
+ } catch (InterruptedException exception) {\r
+ LOG.error("Cannot copy the physical hosts.", exception);\r
+ } catch (ExecutionException exception) {\r
+ LOG.error("Cannot copy the physical hosts.", exception);\r
+ }\r
+\r
+ }\r
+\r
}\r