Add ability to serialize/deserialize iids to/from Strings 81/17381/2
authorEd Warnicke <eaw@cisco.com>
Mon, 30 Mar 2015 17:43:22 +0000 (13:43 -0400)
committerEd Warnicke <eaw@cisco.com>
Mon, 30 Mar 2015 20:41:30 +0000 (16:41 -0400)
Change-Id: I17df9cb64f53f7084bf439b4d6ae2203af8a2e19
Signed-off-by: Ed Warnicke <eaw@cisco.com>
southbound/southbound-impl/pom.xml
southbound/southbound-impl/src/main/config/default-config.xml
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java [new file with mode: 0644]
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundUtil.java
southbound/southbound-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/southbound/impl/rev141210/SouthboundImplModule.java
southbound/southbound-impl/src/main/yang/southbound-impl.yang

index 5ffdd3ab2c67d9a7edfa9711377178bd8238912f..bc2b55946bb0a071af6e105d3b23af9fab2bd792 100644 (file)
@@ -40,6 +40,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>schema.openvswitch</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-core-api</artifactId>
+    </dependency>
   </dependencies>
   <build>
     <plugins>
index f42a56d004fa20093930123606a22e5a412d914c..f7811956ca3635cd8fd3fc46a6f9b1dabbe49d7a 100644 (file)
@@ -21,6 +21,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
             <name>binding-osgi-broker</name>
           </broker>
+          <schema-service>
+            <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+            <name>yang-schema-service</name>
+          </schema-service>
+          <binding-normalized-node-serializer>
+            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-normalized-node-serializer</type>
+            <name>runtime-mapping-singleton</name>
+          </binding-normalized-node-serializer>
         </module>
       </modules>
     </data>
diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java
new file mode 100644 (file)
index 0000000..588fdcc
--- /dev/null
@@ -0,0 +1,62 @@
+package org.opendaylight.ovsdb.southbound;
+
+import java.net.URI;
+
+import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
+import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+
+public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
+    implements SchemaContextListener {
+
+    private DataSchemaContextTree dataSchemaContextTree;
+    private SchemaContext context;
+    private BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
+
+    public InstanceIdentifierCodec(SchemaService schemaService,
+            BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
+        schemaService.registerSchemaContextListener(this);
+        this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
+    }
+
+    @Override
+    protected DataSchemaContextTree getDataContextTree() {
+        return dataSchemaContextTree;
+    }
+
+    @Override
+    protected Module moduleForPrefix(final String prefix) {
+        return context.findModuleByName(prefix, null);
+    }
+
+    @Override
+    protected String prefixForNamespace(final URI namespace) {
+        final Module module = context.findModuleByNamespaceAndRevision(namespace, null);
+        return module == null ? null : module.getName();
+    }
+
+    @Override
+    public void onGlobalContextUpdated(SchemaContext context) {
+        this.context = context;
+        this.dataSchemaContextTree = DataSchemaContextTree.from(context);
+    }
+
+    public String serialize(InstanceIdentifier<?> iid) {
+        YangInstanceIdentifier normalizedIid = bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid);
+        return serialize(normalizedIid);
+    }
+
+    public  InstanceIdentifier<?> bindingDeserializer(String iidString) throws DeserializationException {
+        YangInstanceIdentifier normalizedYangIid = deserialize(iidString);
+        InstanceIdentifier<?> iid = bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(normalizedYangIid);
+        return iid;
+    }
+
+}
index 57b89fce1eb0a6a8e437d328c8627431eeaba9a4..85a8f4ee5e557725c2338b5a13ab1562ba0d8e47 100644 (file)
@@ -16,6 +16,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -27,6 +28,26 @@ public class SouthboundUtil {
 
     private static final Logger LOG = LoggerFactory.getLogger(SouthboundUtil.class);
 
+    private static InstanceIdentifierCodec instanceIdentifierCodec;
+
+    public static void setInstanceIdentifierCodec(InstanceIdentifierCodec iidc) {
+        instanceIdentifierCodec = iidc;
+    }
+
+    public static String serializeInstanceIdentifier(InstanceIdentifier<?> iid) {
+        return instanceIdentifierCodec.serialize(iid);
+    }
+
+    public static InstanceIdentifier<?> deserializeInstanceIdentifier(String iidString) {
+        InstanceIdentifier<?> result = null;
+        try {
+            result =  instanceIdentifierCodec.bindingDeserializer(iidString);
+        } catch (DeserializationException e) {
+            LOG.warn("Unable to deserialize iidString",e);
+        }
+        return result;
+    }
+
 
     public static Optional<OvsdbNodeAugmentation> getManagingNode(DataBroker db,OvsdbBridgeAttributes mn) {
         Preconditions.checkNotNull(mn);
index 482455d861cdee5b2f749cec08f879a312c38690..1f6fae12ab6c339f6a252dbcfd9bca2f8f74b74a 100644 (file)
@@ -7,9 +7,13 @@
  */
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.southbound.impl.rev141210;
 
+import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.ovsdb.southbound.SouthboundProvider;
+import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 
 public class SouthboundImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.southbound.impl.rev141210.AbstractSouthboundImplModule {
+
+
     public SouthboundImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
@@ -25,6 +29,8 @@ public class SouthboundImplModule extends org.opendaylight.yang.gen.v1.urn.opend
 
     @Override
     public java.lang.AutoCloseable createInstance() {
+        SouthboundUtil.setInstanceIdentifierCodec(new InstanceIdentifierCodec(getSchemaServiceDependency(),
+                getBindingNormalizedNodeSerializerDependency()));
         SouthboundProvider provider = new SouthboundProvider();
         getBrokerDependency().registerProvider(provider);
         return provider;
index d1e9c8c4d549cbc1f3f06aa99c0430556a2e8520..d5e30f570cfb42731941df75247273d4b871286a 100644 (file)
@@ -5,6 +5,7 @@ module southbound-impl {
 
     import config { prefix config; revision-date 2013-04-05; }
     import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+    import opendaylight-md-sal-dom {prefix dom; revision-date 2013-10-28;}
 
     description
         "Service definition for southbound project";
@@ -30,6 +31,22 @@ module southbound-impl {
                     }
                 }
             }
+            container binding-normalized-node-serializer {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity md-sal-binding:binding-normalized-node-serializer;
+                    }
+                }
+            }
+            container schema-service {
+                uses config:service-ref {
+                    refine type {
+                        mandatory false;
+                        config:required-identity dom:schema-service;
+                    }
+                }
+            }
         }
     }
 }