renamed old package to temp and fixes for min/max 52/7352/2
authorAshwin Raveendran <ashw7n@gmail.com>
Fri, 23 May 2014 01:12:02 +0000 (18:12 -0700)
committerAshwin Raveendran <ashw7n@gmail.com>
Fri, 23 May 2014 21:47:46 +0000 (14:47 -0700)
Renamed the old package for TableUpdates to temp and have a newer one that
 can be enhanced for the current use caes while slowly deprecating the old
one. Also fixes a bug and added support for Set based field

Change-Id: If36c9c143eff2a8cc0cd1a0af5f1572ce1dbced5
Signed-off-by: Ashwin Raveendran <ashw7n@gmail.com>
15 files changed:
library/src/main/java/org/opendaylight/ovsdb/lib/OvsDBClientImpl.java
library/src/main/java/org/opendaylight/ovsdb/lib/message/OvsdbRPC.java
library/src/main/java/org/opendaylight/ovsdb/lib/message/TableUpdates.java
library/src/main/java/org/opendaylight/ovsdb/lib/message/UpdateNotification.java
library/src/main/java/org/opendaylight/ovsdb/lib/message/temp/TableUpdates.java [new file with mode: 0644]
library/src/main/java/org/opendaylight/ovsdb/lib/notation/OvsDBSet.java
library/src/main/java/org/opendaylight/ovsdb/lib/notation/json/Converter.java
library/src/main/java/org/opendaylight/ovsdb/lib/operations/Insert.java
library/src/main/java/org/opendaylight/ovsdb/lib/schema/ColumnType.java
library/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java
library/src/test/java/org/opendaylight/ovsdb/lib/OvsDBClientTestIT.java
library/src/test/java/org/opendaylight/ovsdb/lib/message/MonitorResponseTest.java
plugin/src/main/java/org/opendaylight/ovsdb/plugin/ConnectionService.java
plugin/src/main/java/org/opendaylight/ovsdb/plugin/InventoryService.java
plugin/src/main/java/org/opendaylight/ovsdb/plugin/InventoryServiceInternal.java

index 5bbfab4d58aae70d455d936686563c3c6998e11c..0fbb390a50fcc85186afda2ab7de39dfafe5e565 100644 (file)
@@ -21,6 +21,7 @@ import com.google.common.util.concurrent.SettableFuture;
 import org.opendaylight.ovsdb.lib.jsonrpc.Params;
 import org.opendaylight.ovsdb.lib.message.MonitorRequest;
 import org.opendaylight.ovsdb.lib.message.OvsdbRPC;
+import org.opendaylight.ovsdb.lib.message.TableUpdate;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.message.TransactBuilder;
 import org.opendaylight.ovsdb.lib.message.UpdateNotification;
@@ -29,6 +30,7 @@ import org.opendaylight.ovsdb.lib.operations.OperationResult;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.schema.TableSchema;
+import org.opendaylight.ovsdb.lib.table.Table;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,7 +72,7 @@ public class OvsDBClientImpl implements OvsDBClient {
                         logger.info("callback received with context {}, but no known handler. Ignoring!", key);
                         return;
                     }
-                    monitorCallBack.update(upadateNotification.getUpdate());
+                    _transformingCallback(upadateNotification.getUpdate(), monitorCallBack);
                 }
 
                 @Override
@@ -88,6 +90,16 @@ public class OvsDBClientImpl implements OvsDBClient {
         }
     }
 
+    protected void _transformingCallback( org.opendaylight.ovsdb.lib.message.temp.TableUpdates oldUpdate, MonitorCallBack monitorCallBack) {
+        //todo(ashwin) : temp kludge to get stuff working while deprecating old stuff
+        Map<String, TableUpdate> updateMap = Maps.newHashMap();
+        for (Map.Entry<Table.Name, TableUpdate> temp : oldUpdate.map.entrySet()) {
+            updateMap.put(temp.getKey().getName(), temp.getValue());
+        }
+
+        monitorCallBack.update(new TableUpdates(updateMap));
+    }
+
     @Override
     public ListenableFuture<List<OperationResult>> transact(List<Operation> operations) {
 
@@ -116,16 +128,16 @@ public class OvsDBClientImpl implements OvsDBClient {
         final MonitorHandle monitorHandle = new MonitorHandle(UUID.randomUUID().toString());
         registerCallback(monitorHandle, callback);
 
-        ListenableFuture<TableUpdates> monitor = rpc.monitor(new Params() {
+        ListenableFuture<org.opendaylight.ovsdb.lib.message.temp.TableUpdates> monitor = rpc.monitor(new Params() {
             @Override
             public List<Object> params() {
                 return Lists.<Object>newArrayList(dbSchema.getName(), monitorHandle.getId(), reqMap);
             }
         });
-        Futures.addCallback(monitor, new FutureCallback<TableUpdates>() {
+        Futures.addCallback(monitor, new FutureCallback<org.opendaylight.ovsdb.lib.message.temp.TableUpdates>() {
             @Override
-            public void onSuccess(TableUpdates result) {
-                callback.update(result);
+            public void onSuccess(org.opendaylight.ovsdb.lib.message.temp.TableUpdates result) {
+                _transformingCallback(result, callback);
             }
 
             @Override
index e979737767107b5b5f0ba995986c02bab49cc978..1d0c096b54d6b5d21878ce5e51f7335139c5a3e5 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.ovsdb.lib.message;
 
 import java.util.List;
 
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
 
 import com.fasterxml.jackson.databind.JsonNode;
index 86a09625c99a11ace04a48cfbbae501d53533d3a..6b2f488b322f5b910f20f1b62b3957fac3e6949f 100644 (file)
 /*
- * Copyright (C) 2013 EBay Software Foundation
  *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  * Copyright (C) 2014 EBay Software Foundation
+ *  *
+ *  * This program and the accompanying materials are made available under the
+ *  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ *  * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *  *
+ *  * Authors : Ashwin Raveendran
  *
- * Authors : Ashwin Raveendran, Madhu Venugopal
  */
 package org.opendaylight.ovsdb.lib.message;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.collect.Maps;
-
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
-import org.opendaylight.ovsdb.lib.table.Bridge;
-import org.opendaylight.ovsdb.lib.table.Capability;
-import org.opendaylight.ovsdb.lib.table.Interface;
-import org.opendaylight.ovsdb.lib.table.Port;
-import org.opendaylight.ovsdb.lib.table.Controller;
-import org.opendaylight.ovsdb.lib.table.Manager;
-import org.opendaylight.ovsdb.lib.table.Mirror;
-import org.opendaylight.ovsdb.lib.table.NetFlow;
-import org.opendaylight.ovsdb.lib.table.Open_vSwitch;
-import org.opendaylight.ovsdb.lib.table.Qos;
-import org.opendaylight.ovsdb.lib.table.Queue;
-import org.opendaylight.ovsdb.lib.table.SFlow;
-import org.opendaylight.ovsdb.lib.table.SSL;
-import org.opendaylight.ovsdb.lib.table.Flow_Sample_Collector_Set;
-import org.opendaylight.ovsdb.lib.table.Flow_Table;
-import org.opendaylight.ovsdb.lib.table.IPFIX;
-import org.opendaylight.ovsdb.lib.table.Table;
 
 import java.util.Map;
-import java.util.Set;
 
 
 public class TableUpdates extends Response {
 
-    Map<Table.Name, TableUpdate> map = Maps.newHashMap();
-
-    public Set<Table.Name> availableUpdates() {
-        return map.keySet();
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T extends Table> TableUpdate<T> getUpdate(Table.Name<T> name) {
-        return map.get(name);
-    }
-
-    private <T extends Table> void put(Table.Name<T> name, TableUpdate<T> update) {
-        map.put(name, update);
-    }
-
-    @JsonProperty("Interface")
-    public TableUpdate<Interface> getInterfaceUpdate() {
-        return getUpdate(Interface.NAME);
-    }
-
-    public void setInterfaceUpdate(TableUpdate<Interface> interfaceUpdate) {
-        put(Interface.NAME, interfaceUpdate);
-    }
-
-    @JsonProperty("Bridge")
-    TableUpdate<Bridge> getBridgeUpdate() {
-        return getUpdate(Bridge.NAME);
-    }
-
-    public void setBridgeUpdate(TableUpdate<Bridge> bridgeUpdate) {
-        put(Bridge.NAME, bridgeUpdate);
-    }
-
-    @JsonProperty("Port")
-    TableUpdate<Port> getPortUpdate() {
-        return getUpdate(Port.NAME);
-    }
-
-    void setPortUpdate(TableUpdate<Port> portUpdate) {
-        put(Port.NAME, portUpdate);
-    }
-
-    @JsonProperty("Capability")
-    public TableUpdate<Capability> getCapabilityUpdate() {
-        return getUpdate(Capability.NAME);
-    }
-
-    public void setCapabilityUpdate(TableUpdate<Capability> capabilityUpdate) {
-        put(Capability.NAME, capabilityUpdate);
-    }
-
-    @JsonProperty("Controller")
-    public TableUpdate<Controller> getControllerUpdate() {
-        return getUpdate(Controller.NAME);
-    }
-
-    public void setControllerUpdate(TableUpdate<Controller> controllerUpdate) {
-        put(Controller.NAME, controllerUpdate);
-    }
-
-    @JsonProperty("Manager")
-    public TableUpdate<Manager> getManagerUpdate() {
-        return getUpdate(Manager.NAME);
-    }
-
-    public void setManagerUpdate(TableUpdate<Manager> managerUpdate) {
-        put(Manager.NAME, managerUpdate);
-    }
-
-    @JsonProperty("Mirror")
-    public TableUpdate<Mirror> getMirrorUpdate() {
-        return getUpdate(Mirror.NAME);
-    }
-
-    public void setMirrorUpdate(TableUpdate<Mirror> mirrorUpdate) {
-        put(Mirror.NAME, mirrorUpdate);
-    }
-
-    @JsonProperty("NetFlow")
-    public TableUpdate<NetFlow> getNetFlowUpdate() {
-        return getUpdate(NetFlow.NAME);
-    }
-
-    public void setNetFlowUpdate(TableUpdate<NetFlow> netFlowUpdate) {
-        put(NetFlow.NAME, netFlowUpdate);
-    }
-
-    @JsonProperty("Open_vSwitch")
-    public TableUpdate<Open_vSwitch> getOpen_vSwitchUpdate() {
-        return getUpdate(Open_vSwitch.NAME);
-    }
-
-    public void setOpen_vSwitchUpdate(TableUpdate<Open_vSwitch> openVSwitchUpdate) {
-        put(Open_vSwitch.NAME, openVSwitchUpdate);
-    }
-
-    @JsonProperty("QoS")
-    public TableUpdate<Qos> getQosUpdate() {
-        return getUpdate(Qos.NAME);
-    }
-
-    public void setQosUpdate(TableUpdate<Qos> qosUpdate) {
-        put(Qos.NAME, qosUpdate);
-    }
-
-    @JsonProperty("Queue")
-    public TableUpdate<Queue> getQueueUpdate() {
-        return getUpdate(Queue.NAME);
-    }
-
-    public void setQueueUpdate(TableUpdate<Queue> queueUpdate) {
-        put(Queue.NAME, queueUpdate);
-    }
-
-    @JsonProperty("sFlow")
-    public TableUpdate<SFlow> getSFlowUpdate() {
-        return getUpdate(SFlow.NAME);
-    }
-
-    public void setSFlowUpdate(TableUpdate<SFlow> sFlowUpdate) {
-        put(SFlow.NAME, sFlowUpdate);
-    }
-
-    @JsonProperty("SSL")
-    public TableUpdate<SSL> getSSLUpdate() {
-        return getUpdate(SSL.NAME);
-    }
-
-    public void setSSLUpdate(TableUpdate<SSL> sslUpdate) {
-        put(SSL.NAME, sslUpdate);
-    }
-
-    @JsonProperty("Flow_Table")
-    public TableUpdate<Flow_Table> getFlow_TableUpdate() {
-        return getUpdate(Flow_Table.NAME);
-    }
-
-    public void setFlow_TableUpdate(TableUpdate<Flow_Table> Flow_TableUpdate) {
-        put(Flow_Table.NAME, Flow_TableUpdate);
-    }
-
-    @JsonProperty("Flow_Sample_Collector_Set")
-    public TableUpdate<Flow_Sample_Collector_Set> getFlow_Sample_Collector_SetUpdate() {
-        return getUpdate(Flow_Sample_Collector_Set.NAME);
-    }
-
-    public void setFlow_Sample_Collector_SetUpdate(TableUpdate<Flow_Sample_Collector_Set> Flow_Sample_Collector_SetUpdate) {
-        put(Flow_Sample_Collector_Set.NAME, Flow_Sample_Collector_SetUpdate);
-    }
+    Map<String, TableUpdate> map = Maps.newHashMap();
 
-    @JsonProperty("IPFIX")
-    public TableUpdate<IPFIX> getIPFIXUpdate() {
-        return getUpdate(IPFIX.NAME);
+    public TableUpdates() {
+        this(Maps.<String, TableUpdate>newHashMap());
     }
 
-    public void setIPFIXUpdate(TableUpdate<IPFIX> IPFIXUpdate) {
-        put(IPFIX.NAME, IPFIXUpdate);
+    public TableUpdates(Map<String, TableUpdate> map) {
+        this.map = map;
     }
 
     public TableUpdate getUpdate(GenericTableSchema table) {
         //todo Horrible just for time being, before this whole thing is refactored.
-        for (Map.Entry<Table.Name, TableUpdate> s : this.map.entrySet()) {
-            if (table.getName().equals(s.getKey().getName())) {
+        for (Map.Entry<String, TableUpdate> s : this.map.entrySet()) {
+            if (table.getName().equals(s.getKey())) {
                 return s.getValue();
             }
         }
index 07390cf0b35c7a1ff18e927aa4abf29636e2f3a6..8fb4ef27433f4d72fdc49aeff2e6e9fd97343143 100644 (file)
@@ -9,6 +9,7 @@
  */
 package org.opendaylight.ovsdb.lib.message;
 
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.notation.json.Converter.UpdateNotificationConverter;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 
diff --git a/library/src/main/java/org/opendaylight/ovsdb/lib/message/temp/TableUpdates.java b/library/src/main/java/org/opendaylight/ovsdb/lib/message/temp/TableUpdates.java
new file mode 100644 (file)
index 0000000..df2b26e
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2013 EBay Software Foundation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Authors : Ashwin Raveendran, Madhu Venugopal
+ */
+package org.opendaylight.ovsdb.lib.message.temp;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.collect.Maps;
+
+import org.opendaylight.ovsdb.lib.message.Response;
+import org.opendaylight.ovsdb.lib.message.TableUpdate;
+import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
+import org.opendaylight.ovsdb.lib.table.Bridge;
+import org.opendaylight.ovsdb.lib.table.Capability;
+import org.opendaylight.ovsdb.lib.table.Interface;
+import org.opendaylight.ovsdb.lib.table.Port;
+import org.opendaylight.ovsdb.lib.table.Controller;
+import org.opendaylight.ovsdb.lib.table.Manager;
+import org.opendaylight.ovsdb.lib.table.Mirror;
+import org.opendaylight.ovsdb.lib.table.NetFlow;
+import org.opendaylight.ovsdb.lib.table.Open_vSwitch;
+import org.opendaylight.ovsdb.lib.table.Qos;
+import org.opendaylight.ovsdb.lib.table.Queue;
+import org.opendaylight.ovsdb.lib.table.SFlow;
+import org.opendaylight.ovsdb.lib.table.SSL;
+import org.opendaylight.ovsdb.lib.table.Flow_Sample_Collector_Set;
+import org.opendaylight.ovsdb.lib.table.Flow_Table;
+import org.opendaylight.ovsdb.lib.table.IPFIX;
+import org.opendaylight.ovsdb.lib.table.Table;
+
+import java.util.Map;
+import java.util.Set;
+
+
+public class TableUpdates extends Response {
+
+    public Map<Table.Name, TableUpdate> map = Maps.newHashMap();
+
+    public Set<Table.Name> availableUpdates() {
+        return map.keySet();
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T extends Table> TableUpdate<T> getUpdate(Table.Name<T> name) {
+        return map.get(name);
+    }
+
+    private <T extends Table> void put(Table.Name<T> name, TableUpdate<T> update) {
+        map.put(name, update);
+    }
+
+    @JsonProperty("Interface")
+    public TableUpdate<Interface> getInterfaceUpdate() {
+        return getUpdate(Interface.NAME);
+    }
+
+    public void setInterfaceUpdate(TableUpdate<Interface> interfaceUpdate) {
+        put(Interface.NAME, interfaceUpdate);
+    }
+
+    @JsonProperty("Bridge")
+    TableUpdate<Bridge> getBridgeUpdate() {
+        return getUpdate(Bridge.NAME);
+    }
+
+    public void setBridgeUpdate(TableUpdate<Bridge> bridgeUpdate) {
+        put(Bridge.NAME, bridgeUpdate);
+    }
+
+    @JsonProperty("Port")
+    TableUpdate<Port> getPortUpdate() {
+        return getUpdate(Port.NAME);
+    }
+
+    void setPortUpdate(TableUpdate<Port> portUpdate) {
+        put(Port.NAME, portUpdate);
+    }
+
+    @JsonProperty("Capability")
+    public TableUpdate<Capability> getCapabilityUpdate() {
+        return getUpdate(Capability.NAME);
+    }
+
+    public void setCapabilityUpdate(TableUpdate<Capability> capabilityUpdate) {
+        put(Capability.NAME, capabilityUpdate);
+    }
+
+    @JsonProperty("Controller")
+    public TableUpdate<Controller> getControllerUpdate() {
+        return getUpdate(Controller.NAME);
+    }
+
+    public void setControllerUpdate(TableUpdate<Controller> controllerUpdate) {
+        put(Controller.NAME, controllerUpdate);
+    }
+
+    @JsonProperty("Manager")
+    public TableUpdate<Manager> getManagerUpdate() {
+        return getUpdate(Manager.NAME);
+    }
+
+    public void setManagerUpdate(TableUpdate<Manager> managerUpdate) {
+        put(Manager.NAME, managerUpdate);
+    }
+
+    @JsonProperty("Mirror")
+    public TableUpdate<Mirror> getMirrorUpdate() {
+        return getUpdate(Mirror.NAME);
+    }
+
+    public void setMirrorUpdate(TableUpdate<Mirror> mirrorUpdate) {
+        put(Mirror.NAME, mirrorUpdate);
+    }
+
+    @JsonProperty("NetFlow")
+    public TableUpdate<NetFlow> getNetFlowUpdate() {
+        return getUpdate(NetFlow.NAME);
+    }
+
+    public void setNetFlowUpdate(TableUpdate<NetFlow> netFlowUpdate) {
+        put(NetFlow.NAME, netFlowUpdate);
+    }
+
+    @JsonProperty("Open_vSwitch")
+    public TableUpdate<Open_vSwitch> getOpen_vSwitchUpdate() {
+        return getUpdate(Open_vSwitch.NAME);
+    }
+
+    public void setOpen_vSwitchUpdate(TableUpdate<Open_vSwitch> openVSwitchUpdate) {
+        put(Open_vSwitch.NAME, openVSwitchUpdate);
+    }
+
+    @JsonProperty("QoS")
+    public TableUpdate<Qos> getQosUpdate() {
+        return getUpdate(Qos.NAME);
+    }
+
+    public void setQosUpdate(TableUpdate<Qos> qosUpdate) {
+        put(Qos.NAME, qosUpdate);
+    }
+
+    @JsonProperty("Queue")
+    public TableUpdate<Queue> getQueueUpdate() {
+        return getUpdate(Queue.NAME);
+    }
+
+    public void setQueueUpdate(TableUpdate<Queue> queueUpdate) {
+        put(Queue.NAME, queueUpdate);
+    }
+
+    @JsonProperty("sFlow")
+    public TableUpdate<SFlow> getSFlowUpdate() {
+        return getUpdate(SFlow.NAME);
+    }
+
+    public void setSFlowUpdate(TableUpdate<SFlow> sFlowUpdate) {
+        put(SFlow.NAME, sFlowUpdate);
+    }
+
+    @JsonProperty("SSL")
+    public TableUpdate<SSL> getSSLUpdate() {
+        return getUpdate(SSL.NAME);
+    }
+
+    public void setSSLUpdate(TableUpdate<SSL> sslUpdate) {
+        put(SSL.NAME, sslUpdate);
+    }
+
+    @JsonProperty("Flow_Table")
+    public TableUpdate<Flow_Table> getFlow_TableUpdate() {
+        return getUpdate(Flow_Table.NAME);
+    }
+
+    public void setFlow_TableUpdate(TableUpdate<Flow_Table> Flow_TableUpdate) {
+        put(Flow_Table.NAME, Flow_TableUpdate);
+    }
+
+    @JsonProperty("Flow_Sample_Collector_Set")
+    public TableUpdate<Flow_Sample_Collector_Set> getFlow_Sample_Collector_SetUpdate() {
+        return getUpdate(Flow_Sample_Collector_Set.NAME);
+    }
+
+    public void setFlow_Sample_Collector_SetUpdate(TableUpdate<Flow_Sample_Collector_Set> Flow_Sample_Collector_SetUpdate) {
+        put(Flow_Sample_Collector_Set.NAME, Flow_Sample_Collector_SetUpdate);
+    }
+
+    @JsonProperty("IPFIX")
+    public TableUpdate<IPFIX> getIPFIXUpdate() {
+        return getUpdate(IPFIX.NAME);
+    }
+
+    public void setIPFIXUpdate(TableUpdate<IPFIX> IPFIXUpdate) {
+        put(IPFIX.NAME, IPFIXUpdate);
+    }
+
+    public TableUpdate getUpdate(GenericTableSchema table) {
+        //todo Horrible just for time being, before this whole thing is refactored.
+        for (Map.Entry<Table.Name, TableUpdate> s : this.map.entrySet()) {
+            if (table.getName().equals(s.getKey().getName())) {
+                return s.getValue();
+            }
+        }
+        return null;
+    }
+}
index 210083a253a838a80fc1de2051481e4030832e07..3a5892a1486ccc50373903d83635060c321fc632 100644 (file)
@@ -23,10 +23,22 @@ import java.util.Set;
 @JsonSerialize(using = OvsDBSetSerializer.class)
 public class OvsDBSet<T> extends ForwardingSet<T> {
 
-    Set<T> target = Sets.newHashSet();
+    Set<T> target = null;
+
+    public OvsDBSet() {
+        this(Sets.<T>newHashSet());
+    }
+
+    public OvsDBSet(Set<T> backing) {
+       this.target = backing;
+    }
 
     @Override
     public Set<T> delegate() {
         return target;
     }
+
+    public static<D> OvsDBSet<D> fromSet(Set<D> value) {
+        return new OvsDBSet<>(value);
+    }
 }
index dcad62bcbe05715bc2662cc925bd8c8bf0b14baf..380819ab030f0f6087c14f3dac7094cd61097961 100644 (file)
@@ -9,7 +9,7 @@
  */
 package org.opendaylight.ovsdb.lib.notation.json;
 
-import org.opendaylight.ovsdb.lib.message.TableUpdates;
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.message.UpdateNotification;
 import org.opendaylight.ovsdb.lib.notation.OvsDBMap;
 import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
index 8a34a57b14bf4386d197cf46899a6a73e0e32423..899d07210864c22683789622a5689826ee6b2d8d 100644 (file)
 package org.opendaylight.ovsdb.lib.operations;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
+import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
 import org.opendaylight.ovsdb.lib.schema.TableSchema;
 
 import java.util.Map;
+import java.util.Set;
 
 
 public class Insert<E extends TableSchema<E>> extends Operation<E> {
@@ -45,7 +48,12 @@ public class Insert<E extends TableSchema<E>> extends Operation<E> {
     }
 
     public <D, C extends TableSchema<C>> Insert<E> value(ColumnSchema<C, D> columnSchema, D value) {
-        row.put(columnSchema.getName(), value);
+        Object tval = null;
+        if (columnSchema.getType().isMultiValued()) {
+            Preconditions.checkArgument((value instanceof Set),"expected a set for multivalued item") ;
+            tval = OvsDBSet.fromSet((Set) value);
+        }
+        row.put(columnSchema.getName(), tval);
         return this;
     }
 
index 28606a635ace037d0b0c3017590e729573a6c528..6cb709eefc11ae43eaee6e5a95dca12f5025ca8d 100644 (file)
@@ -15,8 +15,24 @@ import org.opendaylight.ovsdb.lib.jsonrpc.JsonUtils;
 
 public abstract class ColumnType {
     BaseType baseType;
-    int min = 0;
-    int max = 0;
+    long min = 0;
+    long max = 0;
+
+    public long getMin() {
+        return min;
+    }
+
+    void setMin(long min) {
+        this.min = min;
+    }
+
+    public long getMax() {
+        return max;
+    }
+
+    void setMax(long max) {
+        this.max = max;
+    }
 
     private static ColumnType columns[] = new ColumnType[]{
             new AtomicColumnType(),
@@ -75,6 +91,11 @@ public abstract class ColumnType {
      */
     protected abstract ColumnType fromJsonNode(JsonNode json);
 
+    public boolean isMultiValued() {
+        //todo check if this is the right logic
+        return this.min != this.max && this.min != 1;
+    }
+
     public static class AtomicColumnType extends ColumnType {
 
         public AtomicColumnType() {
@@ -90,7 +111,22 @@ public abstract class ColumnType {
             }
             BaseType baseType = BaseType.fromJson(json, "key");
 
-            return baseType != null ? new AtomicColumnType(baseType) : null;
+            if (baseType != null) {
+
+                AtomicColumnType atomicColumnType = new AtomicColumnType(baseType);
+
+                JsonNode node = null;
+                if ((node = json.get("min")) != null) {
+                    atomicColumnType.setMin(node.asLong());
+                }
+                if ((node = json.get("max")) != null) {
+                    atomicColumnType.setMax(node.asLong());
+                }
+
+                return atomicColumnType;
+            }
+
+            return null;
         }
 
     }
index cc3d5aa34dcb3b2df2ea435b2612597b81eafa98..31ffa5f609251ddad6d43b03031de1d545d5ae96 100644 (file)
@@ -67,6 +67,14 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return new Insert<>(this);
     }
 
+    public <D> ColumnSchema<E, Set<D>> multiValuedColumn(String column, Class<D> type) {
+        //todo exception handling
+
+        ColumnSchema columnSchema = columns.get(column);
+        columnSchema.validateType(type);
+        return columnSchema;
+    }
+
     public <D> ColumnSchema<E, D> column(String column, Class<D> type) {
         //todo exception handling
 
index 52d31859068dea9af48978be9b4ed10d1ed3846a..1ea866e0a6b1ab0493ba96df9352c41ecb5718ed 100644 (file)
@@ -9,6 +9,9 @@
  */
 package org.opendaylight.ovsdb.lib;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.common.util.concurrent.ListenableFuture;
 import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import java.io.IOException;
@@ -29,7 +32,6 @@ import org.opendaylight.ovsdb.lib.message.OvsdbRPC;
 import org.opendaylight.ovsdb.lib.message.TableUpdate;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.message.UpdateNotification;
-import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.operations.OperationResult;
 import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
@@ -38,9 +40,7 @@ import org.opendaylight.ovsdb.lib.schema.TableSchema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Set;
 
 
 public class OvsDBClientTestIT extends OvsdbTestBase {
@@ -61,23 +61,16 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
 
         ColumnSchema<GenericTableSchema, String> name = bridge.column("name", String.class);
         ColumnSchema<GenericTableSchema, String> fail_mode = bridge.column("fail_mode", String.class);
+        ColumnSchema<GenericTableSchema, Set<Integer>> flood_vlans = bridge.multiValuedColumn("flood_vlans", Integer.class);
 
-        /*
-         * Adding a Test around non-atomic columns, since Set/Map columns requires special
-         * serialization/deserailzation for OVSDB Bidirection JSON.
-         * TODO : Replace this with regular Set and hide the ugliness of OvsDBSet inside the API.
-         */
-        ColumnSchema<GenericTableSchema, OvsDBSet> flood_vlans = bridge.column("flood_vlans", OvsDBSet.class);
-        OvsDBSet vlans = new OvsDBSet();
-        vlans.addAll(Sets.newHashSet(100, 200));
         ListenableFuture<List<OperationResult>> results = ovs.transactBuilder()
                 .add(op.insert(bridge)
-                     .value(name, "br-int")
-                     .value(flood_vlans, vlans))
+                        .value(name, "br-int")
+                        .value(flood_vlans, Sets.newHashSet(100, 101, 4001))
+                )
                 .add(op.update(bridge)
                         .set(fail_mode, "secure")
                         .where(name.opEqual("br-int"))
-                        //.and(name.opEqual("br-int"))
                         .operation())
                 .add(op.select(bridge)
                         .column(name)
@@ -129,7 +122,7 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
                 MonitorRequestBuilder.builder(bridge)
                         .addColumn(bridge.column("name"))
                         .addColumn(bridge.column("fail_mode", String.class))
-                        .addColumn(bridge.column("flood_vlans"))
+                        .addColumn(bridge.multiValuedColumn("flood_vlans", Integer.class))
                         .with(new MonitorSelect(true, true, true, true))
                         .build());
 
@@ -149,7 +142,6 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
             }
         });
 
-        //for (int i = 0; i < 5 && results.isEmpty(); i++) { //wait 5 seconds to get a result
         for (int i = 0; i < 5 ; i++) { //wait 5 seconds to get a result
             System.out.println("waiting");
             Thread.sleep(1000);
index aecbe9b206d074c029b8da4e72526fc891df55ae..ba5cf7ff0263c00d9de6ef3c9aad5518540c8fe4 100644 (file)
@@ -19,6 +19,7 @@ import com.google.common.io.Resources;
 
 import junit.framework.TestCase;
 
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.notation.OvsDBMap;
 import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.notation.UUID;
index b094f60cfcf85d837da2517c9b657f721a676683..a18592a2f48137ed95e03e5ebabcd4935baff279 100644 (file)
@@ -54,7 +54,7 @@ import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcEndpoint;
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcServiceBinderHandler;
 import org.opendaylight.ovsdb.lib.message.MonitorRequestBuilder;
 import org.opendaylight.ovsdb.lib.message.OvsdbRPC;
-import org.opendaylight.ovsdb.lib.message.TableUpdates;
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.message.UpdateNotification;
 import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.table.Bridge;
index 452ff7bad81f84f0330c2ae48f58fb5155c83595..2dd657c521fde145fb59e4f345c0bef693065135 100644 (file)
@@ -35,7 +35,7 @@ import org.opendaylight.controller.sal.utils.ServiceHelper;
 import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.message.TableUpdate;
 import org.opendaylight.ovsdb.lib.message.TableUpdate.Row;
-import org.opendaylight.ovsdb.lib.message.TableUpdates;
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.table.Bridge;
 import org.opendaylight.ovsdb.lib.table.Table;
index ddb2a9beb59170c626fb19ee7c63cf7af07a270a..c06ac5fad4c049d1356e872d9be5673fb34bdfa7 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.controller.sal.core.Property;
 import org.opendaylight.controller.sal.core.UpdateType;
 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService;
 import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
-import org.opendaylight.ovsdb.lib.message.TableUpdates;
+import org.opendaylight.ovsdb.lib.message.temp.TableUpdates;
 import org.opendaylight.ovsdb.lib.table.Table;
 
 public interface InventoryServiceInternal extends IPluginInInventoryService {