From 8aa885323ca9979d59ebbc23d027bb426246d992 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Wed, 3 Sep 2014 11:31:29 -0700 Subject: [PATCH] NorthboundV3 APIs for DatabaseResource. Change-Id: I8d3cb65ac101b8f9898c621c8a7b897f17e58d3b Signed-off-by: Madhu Venugopal --- .../ovsdb/northbound/DatabaseResource.java | 64 +++++++++++++++++-- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/northbound/src/main/java/org/opendaylight/ovsdb/northbound/DatabaseResource.java b/northbound/src/main/java/org/opendaylight/ovsdb/northbound/DatabaseResource.java index d49d882e7..caf03d2f0 100644 --- a/northbound/src/main/java/org/opendaylight/ovsdb/northbound/DatabaseResource.java +++ b/northbound/src/main/java/org/opendaylight/ovsdb/northbound/DatabaseResource.java @@ -1,5 +1,7 @@ package org.opendaylight.ovsdb.northbound; +import java.util.List; + import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -7,33 +9,85 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import org.opendaylight.controller.northbound.commons.exception.InternalServerErrorException; +import org.opendaylight.controller.sal.core.Node; +import org.opendaylight.controller.sal.utils.ServiceHelper; +import org.opendaylight.ovsdb.lib.OvsdbClient; +import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; +import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * Northbound interface for OVSDB Databases */ public class DatabaseResource { String nodeId; - + ObjectMapper objectMapper; DatabaseResource(String id) { this.nodeId = id; + objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + private DatabaseSchema getDatabaseSchema (String databaseName) { + String csDatabaseName = this.caseSensitiveDatabaseName(databaseName); + OvsdbClient client = NodeResource.getOvsdbConnection(nodeId, this); + return client.getDatabaseSchema(csDatabaseName); } @GET @Produces(MediaType.APPLICATION_JSON) public Response getDatabases(){ - return Response.noContent().build(); + OvsdbClient client = NodeResource.getOvsdbConnection(nodeId, this); + try { + List databases = client.getDatabases().get(); + if (databases == null) { + return Response.noContent().build(); + } + String response = objectMapper.writeValueAsString(databases); + return Response.status(Response.Status.OK) + .entity(response) + .build(); + } catch (Exception e) { + throw new InternalServerErrorException("Failed due to exception " + e.getMessage()); + } } @GET @Path("{name}") @Produces(MediaType.APPLICATION_JSON) - public Response getDatabases(@PathParam("name") String name){ - return Response.noContent().build(); + public Response getDatabases(@PathParam("name") String name) throws JsonProcessingException { + DatabaseSchema dbSchema = this.getDatabaseSchema(name); + String response = objectMapper.writeValueAsString(dbSchema); + return Response.status(Response.Status.OK) + .entity(response) + .build(); } @Path("{name}/table") public TableResource getDatabaseTables(@PathParam("name") String name){ - return new TableResource(nodeId, name); + String csDatabaseName = this.caseSensitiveDatabaseName(name); + return new TableResource(nodeId, csDatabaseName); } + private String caseSensitiveDatabaseName (String ciDatabaseName) { + Node node = Node.fromString(nodeId); + OvsdbConnectionService connectionService = (OvsdbConnectionService)ServiceHelper.getGlobalInstance(OvsdbConnectionService.class, this); + OvsdbClient client = connectionService.getConnection(node).getClient(); + + try { + List databases = client.getDatabases().get(); + if (databases == null) return ciDatabaseName; + for (String csDatabaseName : databases) { + if (csDatabaseName.equalsIgnoreCase(ciDatabaseName)) return csDatabaseName; + } + return ciDatabaseName; + } catch (Exception e) { + return ciDatabaseName; + } + } } -- 2.36.6