From aa7424bf42c5a8e240efdeb60b748b4a235864a6 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Wed, 3 Sep 2014 11:34:42 -0700 Subject: [PATCH] NorthboundV3 APIs for TableResource Change-Id: I59187c4eb737523f15f47402f1bb3d757223f894 Signed-off-by: Madhu Venugopal --- .../ovsdb/northbound/TableResource.java | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/northbound/src/main/java/org/opendaylight/ovsdb/northbound/TableResource.java b/northbound/src/main/java/org/opendaylight/ovsdb/northbound/TableResource.java index 8620516a9..c5501b3a7 100644 --- a/northbound/src/main/java/org/opendaylight/ovsdb/northbound/TableResource.java +++ b/northbound/src/main/java/org/opendaylight/ovsdb/northbound/TableResource.java @@ -1,5 +1,7 @@ package org.opendaylight.ovsdb.northbound; +import java.util.Set; + import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -7,30 +9,63 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import org.opendaylight.ovsdb.lib.OvsdbClient; +import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; +import org.opendaylight.ovsdb.lib.schema.GenericTableSchema; +import org.opendaylight.ovsdb.lib.schema.TableSchema; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * Northbound interface for OVSDB tables */ public class TableResource { - + ObjectMapper objectMapper; String databaseName; String nodeId; TableResource(String nodeId, String databaseName){ this.nodeId = nodeId; this.databaseName = databaseName; + objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + } + + private DatabaseSchema getDatabaseSchema (String databaseName) { + OvsdbClient client = NodeResource.getOvsdbConnection(nodeId, this); + return client.getDatabaseSchema(databaseName); } @GET @Produces(MediaType.APPLICATION_JSON) - public Response getTables(){ - return Response.noContent().build(); + public Response getTables() throws JsonProcessingException { + DatabaseSchema dbSchema = this.getDatabaseSchema(databaseName); + if (dbSchema == null) { + return Response.noContent().build(); + } + String response = objectMapper.writeValueAsString(dbSchema.getTables()); + return Response.status(Response.Status.OK) + .entity(response) + .build(); } @GET @Path("{name}") @Produces(MediaType.APPLICATION_JSON) - public Response getTableDetails(@PathParam("name") String name){ - return Response.noContent().build(); + public Response getTableDetails(@PathParam("name") String name) throws JsonProcessingException { + String csTableName = this.caseSensitiveTableName(databaseName, name); + DatabaseSchema dbSchema = this.getDatabaseSchema(databaseName); + if (dbSchema == null) { + return Response.noContent().build(); + } + TableSchema tableSchema = dbSchema.table(csTableName, GenericTableSchema.class); + String response = objectMapper.writeValueAsString(tableSchema); + return Response.status(Response.Status.OK) + .entity(response) + .build(); } @Path("{name}/row") @@ -38,4 +73,18 @@ public class TableResource { return new RowResource(nodeId, databaseName, name); } + private String caseSensitiveTableName (String databaseName, String ciTableName) { + DatabaseSchema dbSchema = this.getDatabaseSchema(databaseName); + if (dbSchema == null) { + return ciTableName; + } + Set tables = dbSchema.getTables(); + if (tables == null) { + return ciTableName; + } + for (String tableName : tables) { + if (tableName.equalsIgnoreCase(ciTableName)) return tableName; + } + return ciTableName; + } } -- 2.36.6