Fixed Mutate operation to handle MultiValued {Key, Value} ColumnType. 77/7977/1
authorMadhu Venugopal <mavenugo@gmail.com>
Fri, 13 Jun 2014 06:52:29 +0000 (23:52 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Fri, 13 Jun 2014 06:52:29 +0000 (23:52 -0700)
Change-Id: I56d1ca186c7f6907d5a93bd47a8fc06db2310762
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
library/src/main/java/org/opendaylight/ovsdb/lib/operations/Mutate.java
library/src/main/java/org/opendaylight/ovsdb/lib/operations/TransactionBuilder.java
library/src/test/java/org/opendaylight/ovsdb/lib/OvsDBClientTestIT.java

index 6e9c20789c9520f3684b92f915d1412bdaadf03c..3138d2c3bfe04ab52afc665caa1d3dce63266c4a 100644 (file)
 package org.opendaylight.ovsdb.lib.operations;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.opendaylight.ovsdb.lib.notation.Condition;
 import org.opendaylight.ovsdb.lib.notation.Mutation;
 import org.opendaylight.ovsdb.lib.notation.Mutator;
+import org.opendaylight.ovsdb.lib.notation.OvsDBMap;
 import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
 import org.opendaylight.ovsdb.lib.schema.TableSchema;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
 public class Mutate<E extends TableSchema<E>> extends Operation<E> implements ConditionalOperation {
@@ -42,8 +43,11 @@ public class Mutate<E extends TableSchema<E>> extends Operation<E> implements Co
         columnSchema.validate(value);
         Object untypedValue = null;
         if (columnSchema.getType().isMultiValued()) {
-            Preconditions.checkArgument((value instanceof Set),"expected a set for multivalued item") ;
-            untypedValue = OvsDBSet.fromSet((Set) value);
+            if (value instanceof Set) {
+                untypedValue = OvsDBSet.fromSet((Set) value);
+            } else if (value instanceof Map) {
+                untypedValue = OvsDBMap.fromMap((Map)value);
+            }
         } else {
             untypedValue = value;
         }
index df6460f91208b234755498cbc6d34e8665e68797..baca76add60f81d10efa62ad10f13f3465e641d6 100644 (file)
 
 package org.opendaylight.ovsdb.lib.operations;
 
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.opendaylight.ovsdb.lib.OvsDBClientImpl;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 
-import java.util.ArrayList;
-import java.util.List;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.ListenableFuture;
 
 public class TransactionBuilder {
 
@@ -34,6 +35,10 @@ public class TransactionBuilder {
         this.eDatabaseSchema = eDatabaseSchema;
     }
 
+    public ArrayList<Operation> getOperations() {
+        return operations;
+    }
+
     public TransactionBuilder add(Operation operation) {
         operations.add(operation);
         return this;
index 799f04e6766abc904de95314f0db4e45d23666f7..bdd5d988fc350f092f1222ba159bd95865cd523a 100644 (file)
@@ -36,6 +36,7 @@ import org.opendaylight.ovsdb.lib.notation.Mutator;
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
@@ -127,6 +128,9 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
                 Map<String, String> data = column.getData(externalIds);
                 Assert.assertNotNull(data.get("key"));
                 Assert.assertEquals("value", data.get("key"));
+                // Test for {"key2", "value2"} external_ids mutation-inserted in Bridge br-test in createBridgeTransaction
+                Assert.assertNotNull(data.get("key2"));
+                Assert.assertEquals("value2", data.get("key2"));
             }
         }
     }
@@ -216,10 +220,9 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
         ColumnSchema<GenericTableSchema, UUID> _uuid = ovsTable.column("_uuid", UUID.class);
 
         String namedUuid = "br_test";
-        int nOperations = 7;
         int insertOperationIndex = 0;
         UUID parentTable = getOpenVSwitchTableUuid();
-        ListenableFuture<List<OperationResult>> results = ovs.transactBuilder()
+        TransactionBuilder transactionBuilder = ovs.transactBuilder()
                  /*
                   * Make sure that the position of insert operation matches the insertOperationIndex.
                   * This will be used later when the Results are processed.
@@ -243,17 +246,21 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
                         .addMutation(flood_vlans, Mutator.INSERT, Sets.newHashSet(200,400))
                         .where(name.opEqual(testBridgeName))
                         .build())
+                .add(op.mutate(bridge)
+                        .addMutation(externalIds, Mutator.INSERT, Maps.newHashMap(ImmutableMap.of("key2","value2")))
+                        .where(name.opEqual(testBridgeName))
+                        .build())
                 .add(op.mutate(ovsTable)
                         .addMutation(bridges, Mutator.INSERT, Sets.newHashSet(new UUID(namedUuid)))
                         .where(_uuid.opEqual(parentTable))
                         .build())
-                .add(op.commit(true))
-                .execute();
+                .add(op.commit(true));
 
+        ListenableFuture<List<OperationResult>> results = transactionBuilder.execute();
         List<OperationResult> operationResults = results.get();
         Assert.assertFalse(operationResults.isEmpty());
         // Check if Results matches the number of operations in transaction
-        Assert.assertEquals(nOperations, operationResults.size());
+        Assert.assertEquals(transactionBuilder.getOperations().size(), operationResults.size());
         System.out.println("Insert & Update operation results = " + operationResults);
         testBridgeUuid = operationResults.get(insertOperationIndex).getUuid();
     }