Fixed UUID deserialization issue 84/8184/1
authorMadhu Venugopal <mavenugo@gmail.com>
Fri, 20 Jun 2014 17:39:01 +0000 (10:39 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Fri, 20 Jun 2014 17:39:01 +0000 (10:39 -0700)
As per RFC7047, UUID notation is defined as :

   <uuid>
      A 2-element JSON array that represents a UUID.  The first element
      of the array must be the string "uuid", and the second element
      must be a 36-character string giving the UUID in the format
      described by RFC 4122 [RFC4122].  For example, the following
      <uuid> represents the UUID 550e8400-e29b-41d4-a716-446655440000:
      ["uuid", "550e8400-e29b-41d4-a716-446655440000"]

But our current parsing in BaseType and ColumnType didnt take this into account.
This fix addresses the issue.

Change-Id: Iddf6cb90666298169d7e61b7741ea2d3ee3b2f1b
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
library/src/main/java/org/opendaylight/ovsdb/lib/message/TableUpdate.java
library/src/main/java/org/opendaylight/ovsdb/lib/message/TableUpdates.java
library/src/main/java/org/opendaylight/ovsdb/lib/notation/Column.java
library/src/main/java/org/opendaylight/ovsdb/lib/notation/Row.java
library/src/main/java/org/opendaylight/ovsdb/lib/schema/BaseType.java
library/src/main/java/org/opendaylight/ovsdb/lib/schema/ColumnType.java

index e27282baa178c3b7783731a19fc2b34795dcdf9d..b127456c85edbe27387212641c63aeb00a415338 100644 (file)
@@ -17,7 +17,6 @@ import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.schema.TableSchema;
 
 public class TableUpdate<E extends TableSchema<E>> {
-
     private UUID uuid;
     private Row<E> old;
     private Row<E> new_;
@@ -46,4 +45,10 @@ public class TableUpdate<E extends TableSchema<E>> {
     public void setNew(Row<E> new_) {
         this.new_ = new_;
     }
+
+    @Override
+    public String toString() {
+        return "TableUpdate [uuid=" + uuid + ", old=" + old + ", new_=" + new_
+                + "]";
+    }
 }
index 4b17b1949646511069d727f345dcdb61592d1fef..91112eea5c6aa2c71084946315f88e369026f57b 100644 (file)
@@ -34,6 +34,10 @@ public class TableUpdates extends Response {
         return this.map.get(table.getName());
     }
 
+    public Map<String, TableUpdate> getUpdates() {
+        return map;
+    }
+
     @Override
     public String toString() {
         return "TableUpdates [map=" + map + ", error=" + error + ", details="
index 231567a4b2bfe85e3592a752efa1cb48cbf34877..ed2edd8c18273aad1945b28090febea49aef335f 100644 (file)
@@ -46,4 +46,9 @@ public class Column<E extends TableSchema<E>, D> {
     public void setSchema(ColumnSchema<E, D> schema) {
         this.schema = schema;
     }
+
+    @Override
+    public String toString() {
+        return "Column [schema=" + schema + ", data=" + data + "]";
+    }
 }
index cb696f3b9a730fe912511412b5406efb70fae062..3260084388c4fad699402ba3231df707d0e88bd8 100644 (file)
@@ -46,4 +46,9 @@ public class Row<E extends TableSchema<E>> {
     public void addColumn(String columnName, Column<E, ?> data) {
         this.columns.put(columnName, data);
     }
+
+    @Override
+    public String toString() {
+        return "Row [columns=" + columns + "]";
+    }
 }
index cd50dfb16e8c80e72545e8eaa6aef5cb3da1c14d..c742394c9e2b054d98c0279ace10fae7093034a7 100644 (file)
@@ -9,11 +9,12 @@
  */
 package org.opendaylight.ovsdb.lib.schema;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.collect.Sets;
+import java.util.Set;
+
 import org.opendaylight.ovsdb.lib.notation.UUID;
 
-import java.util.Set;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.collect.Sets;
 
 public abstract class BaseType<E extends BaseType<E>> {
 
@@ -86,6 +87,7 @@ public abstract class BaseType<E extends BaseType<E>> {
         long max = Long.MAX_VALUE;
         Set<Integer> enums;
 
+        @Override
         public IntegerBaseType fromString(String typeString) {
             return "integer".equals(typeString) ? new IntegerBaseType() : null;
         }
@@ -162,6 +164,7 @@ public abstract class BaseType<E extends BaseType<E>> {
         double max = Double.MAX_VALUE;
         Set<Double> enums;
 
+        @Override
         public RealBaseType fromString(String typeString) {
             return "real".equals(typeString) ? new RealBaseType() : null;
         }
@@ -235,6 +238,7 @@ public abstract class BaseType<E extends BaseType<E>> {
 
     public static class BooleanBaseType extends BaseType {
 
+        @Override
         public BooleanBaseType fromString(String typeString) {
             return "boolean".equals(typeString) ? new BooleanBaseType() : null;
         }
@@ -265,6 +269,7 @@ public abstract class BaseType<E extends BaseType<E>> {
         int maxLength = Integer.MAX_VALUE;
         Set<String> enums;
 
+        @Override
         public StringBaseType fromString(String typeString) {
             return "string".equals(typeString) ? new StringBaseType() : null;
         }
@@ -330,6 +335,7 @@ public abstract class BaseType<E extends BaseType<E>> {
             this.enums = enums;
         }
 
+        @Override
         public String toString() {
             return "StringBaseType";
         }
@@ -344,6 +350,7 @@ public abstract class BaseType<E extends BaseType<E>> {
         RefType refType;
 
 
+        @Override
         public UuidBaseType fromString(String typeString) {
             return "uuid".equals(typeString) ? new UuidBaseType() : null;
         }
@@ -361,7 +368,14 @@ public abstract class BaseType<E extends BaseType<E>> {
 
         @Override
         public Object toValue(JsonNode value) {
-            return new UUID(value.asText());
+            if(value.isArray()) {
+                if (value.size() == 2) {
+                    if (value.get(0).isTextual() && "uuid".equals(value.get(0).asText())) {
+                        return new UUID(value.get(1).asText());
+                    }
+                }
+            }
+            return null;
         }
 
         @Override
@@ -385,6 +399,7 @@ public abstract class BaseType<E extends BaseType<E>> {
             this.refType = refType;
         }
 
+        @Override
         public String toString() {
             return "UuidBaseType";
         }
index da967b2d0352f092c21cd73cbddd46994d139278..c9829cf85302db425fea4d36dfbb1f81fc25ba43 100644 (file)
@@ -162,6 +162,8 @@ public abstract class ColumnType {
                               for(JsonNode node: value.get(1)) {
                                  result.add(getBaseType().toValue(node));
                               }
+                         } else {
+                             result.add(getBaseType().toValue(value));
                          }
                      }
                } else {