Support cost value in alto-northbound 57/20457/1
authorGao Kai <gaok12@mails.tsinghua.edu.cn>
Thu, 14 May 2015 12:47:45 +0000 (20:47 +0800)
committerY. Richard Yang <yry@cs.yale.edu>
Fri, 15 May 2015 00:53:00 +0000 (00:53 +0000)
Resolve namespace conflict in alto-hosttracker

Change-Id: I3ec57873b628c143dfbce75acd01ada0eb1559d6
Signed-off-by: Gao Kai <gaok12@mails.tsinghua.edu.cn>
(cherry picked from commit c16dd52a5c3aae574407fd4e5e17668d7bfb98fb)

alto-commons/src/main/java/org/opendaylight/alto/commons/types/converter/YANGJSON2RFCCostMapConverter.java
alto-hosttracker/implementation/src/main/java/org/opendaylight/alto/altohosttracker/plugin/internal/AltoHostTrackerImpl.java
alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/hosttracker/rev150416/$YangModelBindingProvider.java [moved from alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/rev150416/$YangModelBindingProvider.java with 76% similarity]
alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/hosttracker/rev150416/$YangModuleInfoImpl.java [moved from alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/rev150416/$YangModuleInfoImpl.java with 94% similarity]
alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/hosttracker/rev150416/Cost.java [moved from alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/rev150416/Cost.java with 80% similarity]
alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/hosttracker/rev150416/DstCosts1.java [moved from alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/rev150416/DstCosts1.java with 81% similarity]
alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/hosttracker/rev150416/DstCosts1Builder.java [moved from alto-hosttracker/model/src/main/yang-gen-code/org/opendaylight/yang/gen/v1/urn/opendaylight/alto/rev150416/DstCosts1Builder.java with 79% similarity]
alto-hosttracker/model/src/main/yang/alto-hosttracker-cost-service.yang
alto-services/provider/simple-alto/src/main/java/org/opendaylight/alto/services/provider/simple/SimpleAltoService.java
features/src/main/resources/features.xml

index b99a4c9de3f4da222d5f794f142dfc5fdb524c96..fb96dcac817a9bd0694a8437210bf889d5b9b0b4 100644 (file)
@@ -7,6 +7,7 @@ import org.opendaylight.alto.commons.types.rfc7285.RFC7285VersionTag;
 import org.opendaylight.alto.commons.types.rfc7285.RFC7285Endpoint;
 import org.opendaylight.alto.commons.types.rfc7285.RFC7285CostType;
 
+import java.util.Iterator;
 import java.util.Map;
 import java.util.LinkedHashMap;
 
@@ -22,9 +23,6 @@ public class YANGJSON2RFCCostMapConverter extends Converter<JsonNode, RFC7285Cos
         super(_in);
     }
 
-    protected YANGJSON2RFCAddressGroupConverter group_converter
-                = new YANGJSON2RFCAddressGroupConverter();
-
     @Override
     protected Object _convert() {
         JsonNode node = this.in();
@@ -50,9 +48,11 @@ public class YANGJSON2RFCCostMapConverter extends Converter<JsonNode, RFC7285Cos
 
             for (JsonNode dst: cost_map.get("dstCosts")) {
                 String dst_pid = dst.get("dst").get("value").asText();
-                //TODO Don't know how to get data...
 
-                data.put(dst_pid, new Integer(1));
+                JsonNode cost_node = dst.get("cost");
+                if ((cost_node != null) && (!cost_node.isNull())) {
+                    data.put(dst_pid, cost_node.asText());
+                }
             }
 
             cm.map.put(src_pid, data);
index 12fd27164228594d0cc201dd299bfef445923d85..935fefcca54bd7fcf7550a826c5521ace5137387 100644 (file)
@@ -19,8 +19,8 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.CheckedFuture;
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1Builder;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
@@ -1,4 +1,4 @@
-package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416 ;
+package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416 ;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import java.util.Set;
 import java.util.HashSet;
@@ -10,7 +10,7 @@ public final class $YangModuleInfoImpl implements YangModuleInfo {
     private static final YangModuleInfo INSTANCE = new $YangModuleInfoImpl();
 
     private final String name = "alto-hosttracker-cost-service";
-    private final String namespace = "urn:opendaylight:alto";
+    private final String namespace = "urn:opendaylight:alto:hosttracker";
     private final String revision = "2015-04-16";
     private final String resourcePath = "/META-INF/yang/alto-hosttracker-cost-service.yang";
 
@@ -1,4 +1,4 @@
-package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416;
+package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
@@ -7,7 +7,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
  * cost set in hosttracker
  *
  * &lt;p&gt;This class represents the following YANG schema fragment defined in module &lt;b&gt;alto-hosttracker-cost-service&lt;/b&gt;
- * &lt;br&gt;(Source path: &lt;i&gt;META-INF/yang/alto-hosttracker-cost-service .yang&lt;/i&gt;):
+ * &lt;br&gt;(Source path: &lt;i&gt;META-INF/yang/alto-hosttracker-cost-service.yang&lt;/i&gt;):
  * &lt;pre&gt;
  * grouping cost {
  *     leaf cost-value {
@@ -26,7 +26,7 @@ public interface Cost
 
 
 
-    public static final QName QNAME = org.opendaylight.yangtools.yang.common.QName.cachedReference(org.opendaylight.yangtools.yang.common.QName.create("urn:opendaylight:alto","2015-04-16","cost"));
+    public static final QName QNAME = org.opendaylight.yangtools.yang.common.QName.cachedReference(org.opendaylight.yangtools.yang.common.QName.create("urn:opendaylight:alto:hosttracker","2015-04-16","cost"));
 
     java.lang.Integer getCostValue();
 
@@ -1,4 +1,4 @@
-package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416;
+package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.cost.map.map.DstCosts;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
@@ -1,15 +1,15 @@
-package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416;
+package org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.concepts.Builder;
 
 
 /**
- * Class that builds {@link org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1} instances.
+ * Class that builds {@link org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1} instances.
  *
- * @see org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1
+ * @see org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1
  *
  */
-public class DstCosts1Builder implements Builder <org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1> {
+public class DstCosts1Builder implements Builder <org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1> {
 
     private java.lang.Integer _costInHosttracker;
 
@@ -37,8 +37,8 @@ public class DstCosts1Builder implements Builder <org.opendaylight.yang.gen.v1.u
 
     private static final class DstCosts1Impl implements DstCosts1 {
 
-        public java.lang.Class<org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1> getImplementedInterface() {
-            return org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1.class;
+        public java.lang.Class<org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1> getImplementedInterface() {
+            return org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1.class;
         }
 
         private final java.lang.Integer _costInHosttracker;
@@ -69,10 +69,10 @@ public class DstCosts1Builder implements Builder <org.opendaylight.yang.gen.v1.u
             if (!(obj instanceof DataObject)) {
                 return false;
             }
-            if (!org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1.class.equals(((DataObject)obj).getImplementedInterface())) {
+            if (!org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1.class.equals(((DataObject)obj).getImplementedInterface())) {
                 return false;
             }
-            org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1 other = (org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150416.DstCosts1)obj;
+            org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1 other = (org.opendaylight.yang.gen.v1.urn.opendaylight.alto.hosttracker.rev150416.DstCosts1)obj;
             if (_costInHosttracker == null) {
                 if (other.getCostInHosttracker() != null) {
                     return false;
index d8486e13a32ab22afe26f0d920f4872a66a56699..514053275ff15801057bf4bd96eacc288340e2dc 100644 (file)
@@ -1,5 +1,5 @@
 module alto-hosttracker-cost-service {
-    namespace "urn:opendaylight:alto";
+    namespace "urn:opendaylight:alto:hosttracker";
     prefix alto-host-track-cost;
 
     import ietf-yang-types {prefix yang;}
index 9d272fe6b4c6ffa4f0ff231e0bd66ec85699fa0e..ba0796a85f63d769883679131865e52b5bc08820 100644 (file)
@@ -14,6 +14,9 @@ import org.opendaylight.alto.commons.types.converter.YANGJSON2RFCNetworkMapConve
 import org.opendaylight.alto.commons.types.converter.YANGJSON2RFCCostMapConverter;
 
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.Resources;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.IRD;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.NetworkMaps;
@@ -22,6 +25,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.co
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.cost.maps.CostMapKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.network.maps.NetworkMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.network.maps.NetworkMapKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.cost.map.map.DstCosts;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.ResourceId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.ird.meta.DefaultAltoNetworkMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.ird.Meta;
@@ -41,6 +45,7 @@ import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 
+import java.util.Iterator;
 import java.util.Map;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -49,8 +54,12 @@ import java.util.LinkedList;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.module.SimpleModule;
 
 public class SimpleAltoService implements NetworkMapService, CostMapService, AutoCloseable {
 
@@ -61,6 +70,44 @@ public class SimpleAltoService implements NetworkMapService, CostMapService, Aut
     private YANGJSON2RFCNetworkMapConverter m_nmconverter = null;
     private YANGJSON2RFCCostMapConverter m_cmconverter = null;
 
+    protected class DstCostSerializer extends JsonSerializer<DstCosts> {
+        @Override
+        public void serialize(DstCosts value, JsonGenerator jgen, SerializerProvider provider) {
+            try {
+                jgen.writeStartObject();
+
+                jgen.writeObjectFieldStart("dst");
+                jgen.writeStringField("value", value.getDst().getValue());
+                jgen.writeEndObject();
+
+                Map<Class<? extends Augmentation<?>>, Augmentation<?>> augmentations
+                        = BindingReflections.getAugmentations(value);
+                String cost = null;
+                for (Augmentation<?> aug: augmentations.values()) {
+                    try {
+                        ObjectNode node = m_mapper.valueToTree(aug);
+                        for (Iterator<String> itr = node.fieldNames(); itr.hasNext(); ) {
+                            String field = itr.next();
+                            if (field.toLowerCase().indexOf("cost") >= 0) {
+                                cost = node.get(field).asText();
+                                break;
+                            }
+                        }
+                    } catch (Exception e) {
+                        m_logger.warn("Failed to write data from {}", cost);
+                    }
+                }
+                if (cost != null) {
+                    jgen.writeStringField("cost", cost);
+                }
+
+                jgen.writeEndObject();
+            } catch (Exception e) {
+                m_logger.info("Failed to parse DstCosts");
+            }
+        }
+    }
+
     public SimpleAltoService(DataBroker db) {
         this.m_db = db;
         this.m_nmconverter = new YANGJSON2RFCNetworkMapConverter();
@@ -68,6 +115,14 @@ public class SimpleAltoService implements NetworkMapService, CostMapService, Aut
 
         this.register(NetworkMapService.class);
         this.register(CostMapService.class);
+
+        try {
+            SimpleModule module = new SimpleModule();
+            module.addSerializer(DstCosts.class, new DstCostSerializer());
+            m_mapper.registerModule(module);
+        } catch (Exception e) {
+            m_logger.info("failed to load customized serializer");
+        }
     }
 
     protected <E> void register(Class<E> clazz) {
index a1f0a23ab592a318574fa900b339bcffd57592ae..ef1cea8aff9f5103b0cd828edf81043e8e798c08 100644 (file)
@@ -17,8 +17,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <repository>mvn:org.opendaylight.l2switch/features-l2switch/${l2switch.version}/xml/features</repository>
 
   <feature name='odl-alto-all' version='${project.version}' description='OpenDaylight :: alto :: All '>
+    <feature>odl-restconf-all</feature>
     <feature version='${project.version}'>odl-alto-provider</feature>
     <feature version='${project.version}'>odl-alto-manager</feature>
+    <feature version='${project.version}'>odl-alto-hosttracker</feature>
     <feature version='${project.version}'>odl-alto-northbound</feature>
   </feature>
 
@@ -86,6 +88,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <feature version='${mdsal.version}'>odl-mdsal-common</feature>
     <feature version='${mdsal.version}'>odl-mdsal-broker</feature>
     <feature version='${sal.version}'>odl-adsal-core</feature>
+    <bundle>mvn:org.opendaylight.alto/service-api-rfc7285/${project.version}</bundle>
     <configfile finalname='${configfile.directory}/alto-simple.xml'>mvn:org.opendaylight.alto/simple-impl/${project.version}/xml/config</configfile>
     <bundle>mvn:org.opendaylight.alto/simple-impl/${project.version}</bundle>
   </feature>
@@ -95,14 +98,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <feature>war</feature>
     <feature version='${project.version}'>odl-alto-commons</feature>
     <feature version='${project.version}'>odl-alto-simple</feature>
-    <bundle>mvn:org.opendaylight.alto/service-api-rfc7285/${project.version}</bundle>
     <bundle>mvn:org.opendaylight.alto/alto-northbound/${project.version}</bundle>
   </feature>
 
   <feature name='odl-alto-integration-test' version='${project.version}' description='Opendaylight :: alto :: IntegrationTest'>
-    <feature>odl-restconf-all</feature>
-    <feature version='${project.version}'>odl-alto-hosttracker</feature>
-    <feature version='${project.version}'>odl-alto-northbound</feature>
-    <feature version='${project.version}'>odl-alto-manager</feature>
+    <feature version='${project.version}'>odl-alto-all</feature>
   </feature>
 </features>