In addition, Set & Map serializers are taken care as well.
Change-Id: I0e3d34b6ae30e7b4f5f7da876b465f0dfd93479c
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
javax.net.ssl,
*
</Import-Package>
- <Embed-Dependency>jsonrpc4j,httpclient,commons-codec,httpcore-nio,javax.servlet-api,jackson-annotations,jackson-core,jackson-databind,portlet-api,commons-collections;type=!pom;inline=false</Embed-Dependency>
+ <Embed-Dependency>httpclient,commons-codec,httpcore-nio,javax.servlet-api,jackson-annotations,jackson-core,jackson-databind,portlet-api,commons-collections;type=!pom;inline=false</Embed-Dependency>
<Embed-Transitive>
true
</Embed-Transitive>
</plugin>
</plugins>
</build>
- <repositories>
- <repository>
- <id>jsonrpc4j-webdav-maven-repo</id>
- <name>jsonrpc4j maven repository</name>
- <url>http://jsonrpc4j.googlecode.com/svn/maven/repo/</url>
- <layout>default</layout>
- </repository>
- </repositories>
<dependencies>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<version>1.0</version>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
import java.util.Map;
+import org.opendaylight.ovsdb.lib.table.internal.Table;
+
import com.fasterxml.jackson.annotation.JsonProperty;
// TODO Madhu : This is not complete. Getting it in to enable other committers to make progress
public class InsertOperation extends Operation {
String table;
@JsonProperty("uuid-name")
public String uuidName;
- public Map<String, Object> row;
+ public Table<?> row;
public InsertOperation() {
super();
}
public InsertOperation(String table, String uuidName,
- Map<String, Object> row) {
+ Table<?> row) {
this();
this.table = table;
this.uuidName = uuidName;
this.uuidName = uuidName;
}
- public Map<String, Object> getRow() {
+ public Table<?> getRow() {
return row;
}
- public void setRow(Map<String, Object> row) {
+ public void setRow(Table<?> row) {
this.row = row;
}
package org.opendaylight.ovsdb.lib.notation;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.common.collect.ForwardingMap;
import com.google.common.collect.Maps;
+import org.opendaylight.ovsdb.lib.notation.json.ConditionSerializer;
import org.opendaylight.ovsdb.lib.notation.json.Converter;
+import org.opendaylight.ovsdb.lib.notation.json.OvsDBMapSerializer;
import java.util.HashMap;
import java.util.Map;
-//@JsonTypeIdResolver(OVSDBTypesIDResolver.class)
-//@JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, include = JsonTypeInfo.As.WRAPPER_ARRAY)
@JsonDeserialize(converter = Converter.MapConverter.class)
+@JsonSerialize(using = OvsDBMapSerializer.class)
public class OvsDBMap<K, V> extends ForwardingMap<K, V> {
HashMap<K, V> target = Maps.newHashMap();
@Override
- protected Map<K, V> delegate() {
+ public Map<K, V> delegate() {
return target;
}
}
package org.opendaylight.ovsdb.lib.notation;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.common.collect.ForwardingSet;
import com.google.common.collect.Sets;
import org.opendaylight.ovsdb.lib.notation.json.Converter;
+import org.opendaylight.ovsdb.lib.notation.json.OvsDBSetSerializer;
import java.util.Set;
-/*This class exists just to aid in specifying annotations at type level*/
-
-//@JsonTypeIdResolver(OVSDBTypesIDResolver.class)
-//@JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, include = JsonTypeInfo.As.WRAPPER_ARRAY)
-//@JsonDeserialize(converter = ObjectToSetConverter.class)
@JsonDeserialize(converter = Converter.SetConverter.class)
+@JsonSerialize(using = OvsDBSetSerializer.class)
public class OvsDBSet<T> extends ForwardingSet<T> {
Set<T> target = Sets.newHashSet();
@Override
- protected Set<T> delegate() {
+ public Set<T> delegate() {
return target;
}
}
--- /dev/null
+package org.opendaylight.ovsdb.lib.notation.json;
+
+import java.io.IOException;
+import java.util.Map;
+import org.opendaylight.ovsdb.lib.notation.OvsDBMap;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+public class OvsDBMapSerializer extends JsonSerializer<OvsDBMap<?,?>> {
+ @Override
+ public void serialize(OvsDBMap<?,?> map, JsonGenerator generator,
+ SerializerProvider provider) throws IOException,
+ JsonProcessingException {
+ generator.writeStartArray();
+ generator.writeString("map");
+ generator.writeStartArray();
+ Map<?,?> javaMap = map.delegate();
+ for (Object t : javaMap.keySet()) {
+ generator.writeStartArray();
+ generator.writeObject(t);
+ generator.writeObject(javaMap.get(t));
+ generator.writeEndArray();
+ }
+ generator.writeEndArray();
+ generator.writeEndArray();
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.opendaylight.ovsdb.lib.notation.json;
+
+import java.io.IOException;
+import java.util.Set;
+
+import org.opendaylight.ovsdb.lib.notation.Condition;
+import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+public class OvsDBSetSerializer extends JsonSerializer<OvsDBSet<?>> {
+ @Override
+ public void serialize(OvsDBSet<?> set, JsonGenerator generator,
+ SerializerProvider provider) throws IOException,
+ JsonProcessingException {
+ generator.writeStartArray();
+ generator.writeString("set");
+ generator.writeStartArray();
+ Set<?> javaSet = set.delegate();
+ for (Object t : javaSet) {
+ generator.writeObject(t);
+ }
+ generator.writeEndArray();
+ generator.writeEndArray();
+ }
+}
\ No newline at end of file
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Bridge extends Table<Bridge> {
public static final Name<Bridge> NAME = new Name<Bridge>("Bridge"){};
public enum Column implements org.opendaylight.ovsdb.lib.table.internal.Column<Bridge>{controller, fail_mode, name, ports}
}
@Override
+ @JsonIgnore
public Name<Bridge> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.OvsDBMap;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Capability extends Table<Capability> {
public static final Name<Capability> NAME = new Name<Capability>("Capability") {};
}
@Override
+ @JsonIgnore
public Name<Capability> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Controller extends Table<Controller> {
public static final Name<Controller> NAME = new Name<Controller>("Controller") {};
}
@Override
+ @JsonIgnore
public Name<Controller> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Interface extends Table<Interface> {
public static Name<Interface> NAME = new Name<Interface>("Interface") {};
}
@Override
+ @JsonIgnore
public Name<Interface> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Manager extends Table<Manager> {
public static final Name<Manager> NAME = new Name<Manager>("Manager") {};
}
@Override
+ @JsonIgnore
public Name<Manager> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Mirror extends Table<Mirror> {
public static final Name<Mirror> NAME = new Name<Mirror>("Mirror") {};
}
@Override
+ @JsonIgnore
public Name<Mirror> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class NetFlow extends Table<NetFlow> {
public static final Name<NetFlow> NAME = new Name<NetFlow>("NetFlow") {};
}
@Override
+ @JsonIgnore
public Name<NetFlow> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Open_vSwitch extends Table<Open_vSwitch> {
public static final Name<Open_vSwitch> NAME = new Name<Open_vSwitch>("Open_vSwitch"){};
}
@Override
+ @JsonIgnore
public Name<Open_vSwitch> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Port extends Table<Port> {
public static final Name<Port> NAME = new Name<Port>("Port") {};
}
@Override
+ @JsonIgnore
public Name<Port> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Qos extends Table<Qos> {
public static final Name<Qos> NAME = new Name<Qos>("QoS") {};
}
@Override
+ @JsonIgnore
public Name<Qos> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class Queue extends Table<Queue> {
public static final Name<Queue> NAME = new Name<Queue>("Queue") {};
}
@Override
+ @JsonIgnore
public Name<Queue> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
import org.opendaylight.ovsdb.lib.table.internal.Table;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class SFlow extends Table<SFlow> {
public static final Name<SFlow> NAME = new Name<SFlow>("sFlow") {};
}
@Override
+ @JsonIgnore
public Name<SFlow> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.table.internal.Table;
import org.opendaylight.ovsdb.lib.table.internal.Table.Name;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class SSL extends Table<SSL> {
public static final Name<SSL> NAME = new Name<SSL>("SSL") {};
}
@Override
+ @JsonIgnore
public Name<SSL> getTableName() {
return NAME;
}
import org.opendaylight.ovsdb.lib.notation.Function;
import org.opendaylight.ovsdb.lib.notation.Mutation;
import org.opendaylight.ovsdb.lib.notation.Mutator;
+import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.Bridge;
import org.opendaylight.ovsdb.lib.table.Interface;
addSwitchRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
}
else{
- Map<String, Object> vswitchRow = new HashMap<String, Object>();
+ Open_vSwitch ovsTableRow = new Open_vSwitch();
+ OvsDBSet<UUID> bridges = new OvsDBSet<UUID>();
UUID bridgeUuidPair = new UUID(newBridge);
- vswitchRow.put("bridges", bridgeUuidPair);
- addSwitchRequest = new InsertOperation(Open_vSwitch.NAME.getName(), newSwitch, vswitchRow);
+ bridges.add(bridgeUuidPair);
+ ovsTableRow.setBridges(bridges);
+ addSwitchRequest = new InsertOperation(Open_vSwitch.NAME.getName(), newSwitch, ovsTableRow);
}
- Map<String, Object> bridgeRow = new HashMap<String, Object>();
- bridgeRow.put("name", bridgeIdentifier);
- UUID ports = new UUID(newPort);
- bridgeRow.put("ports", ports);
+ Bridge bridgeRow = new Bridge();
+ OvsDBSet<UUID> ports = new OvsDBSet<UUID>();
+ UUID port = new UUID(newPort);
+ ports.add(port);
+ bridgeRow.setPorts(ports);
InsertOperation addBridgeRequest = new InsertOperation(Bridge.NAME.getName(), newBridge, bridgeRow);
- Map<String, Object> portRow = new HashMap<String, Object>();
- portRow.put("name", bridgeIdentifier);
- UUID interfaces = new UUID(newInterface);
- portRow.put("interfaces", interfaces);
+ Port portRow = new Port();
+ OvsDBSet<UUID> interfaces = new OvsDBSet<UUID>();
+ UUID interfaceid = new UUID(newInterface);
+ interfaces.add(interfaceid);
+ portRow.setInterfaces(interfaces);
InsertOperation addPortRequest = new InsertOperation(Port.NAME.getName(), newPort, portRow);
- Map<String, Object> interfaceRow = new HashMap<String, Object>();
- interfaceRow.put("name", bridgeIdentifier);
- interfaceRow.put("type", "internal");
+ Interface interfaceRow = new Interface();
+ interfaceRow.setName(bridgeIdentifier);
+ interfaceRow.setType("internal");
InsertOperation addIntfRequest = new InsertOperation(Interface.NAME.getName(), newInterface, interfaceRow);
TransactBuilder transaction = new TransactBuilder();
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.util.concurrent.ListenableFuture;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ objectMapper.setSerializationInclusion(Include.NON_NULL);
JsonRpcEndpoint factory = new JsonRpcEndpoint(objectMapper, channel);
JsonRpcServiceBinderHandler binderHandler = new JsonRpcServiceBinderHandler(factory);
import org.opendaylight.ovsdb.lib.notation.Function;
import org.opendaylight.ovsdb.lib.notation.Mutation;
import org.opendaylight.ovsdb.lib.notation.Mutator;
+import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.table.Bridge;
import org.opendaylight.ovsdb.lib.table.Interface;
addSwitchRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
}
else{
- Map<String, Object> vswitchRow = new HashMap<String, Object>();
+ Open_vSwitch ovsTableRow = new Open_vSwitch();
+ OvsDBSet<UUID> bridges = new OvsDBSet<UUID>();
UUID bridgeUuidPair = new UUID(newBridge);
- vswitchRow.put("bridges", bridgeUuidPair);
- addSwitchRequest = new InsertOperation(Open_vSwitch.NAME.getName(), newSwitch, vswitchRow);
+ bridges.add(bridgeUuidPair);
+ ovsTableRow.setBridges(bridges);
+ addSwitchRequest = new InsertOperation(Open_vSwitch.NAME.getName(), newSwitch, ovsTableRow);
}
- Map<String, Object> bridgeRow = new HashMap<String, Object>();
- bridgeRow.put("name", bridgeIdentifier);
- UUID ports = new UUID(newPort);
- bridgeRow.put("ports", ports);
+ Bridge bridgeRow = new Bridge();
+ OvsDBSet<UUID> ports = new OvsDBSet<UUID>();
+ UUID port = new UUID(newPort);
+ ports.add(port);
+ bridgeRow.setPorts(ports);
InsertOperation addBridgeRequest = new InsertOperation(Bridge.NAME.getName(), newBridge, bridgeRow);
- Map<String, Object> portRow = new HashMap<String, Object>();
- portRow.put("name", bridgeIdentifier);
- UUID interfaces = new UUID(newInterface);
- portRow.put("interfaces", interfaces);
+ Port portRow = new Port();
+ OvsDBSet<UUID> interfaces = new OvsDBSet<UUID>();
+ UUID interfaceid = new UUID(newInterface);
+ interfaces.add(interfaceid);
+ portRow.setInterfaces(interfaces);
InsertOperation addPortRequest = new InsertOperation(Port.NAME.getName(), newPort, portRow);
- Map<String, Object> interfaceRow = new HashMap<String, Object>();
- interfaceRow.put("name", bridgeIdentifier);
- interfaceRow.put("type", "internal");
+ Interface interfaceRow = new Interface();
+ interfaceRow.setName(bridgeIdentifier);
+ interfaceRow.setType("internal");
InsertOperation addIntfRequest = new InsertOperation(Interface.NAME.getName(), newInterface, interfaceRow);
TransactBuilder transaction = new TransactBuilder();