1 package org.opendaylight.ovsdb.northbound;
3 import com.fasterxml.jackson.databind.SerializationFeature;
6 import javax.ws.rs.GET;
7 import javax.ws.rs.Path;
8 import javax.ws.rs.PathParam;
9 import javax.ws.rs.Produces;
10 import javax.ws.rs.core.MediaType;
11 import javax.ws.rs.core.Response;
13 import org.opendaylight.controller.northbound.commons.exception.InternalServerErrorException;
14 import org.opendaylight.ovsdb.lib.OvsdbClient;
15 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
17 import com.fasterxml.jackson.core.JsonProcessingException;
18 import com.fasterxml.jackson.databind.DeserializationFeature;
19 import com.fasterxml.jackson.databind.ObjectMapper;
22 * Northbound interface for OVSDB Databases
24 public class DatabaseResource {
27 ObjectMapper objectMapper;
28 DatabaseResource(String id) {
30 objectMapper = new ObjectMapper();
31 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
32 objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
35 private DatabaseSchema getDatabaseSchema (String databaseName) {
36 String csDatabaseName = this.caseSensitiveDatabaseName(databaseName);
37 OvsdbClient client = NodeResource.getOvsdbClient(nodeId, this);
38 return client.getDatabaseSchema(csDatabaseName);
42 @Produces(MediaType.APPLICATION_JSON)
43 public Response getDatabases(){
44 OvsdbClient client = NodeResource.getOvsdbClient(nodeId, this);
46 List<String> databases = client.getDatabases().get();
47 if (databases == null) {
48 return Response.noContent().build();
50 String response = objectMapper.writeValueAsString(databases);
51 return Response.status(Response.Status.OK)
54 } catch (Exception e) {
55 throw new InternalServerErrorException("Failed due to exception " + e.getMessage());
61 @Produces(MediaType.APPLICATION_JSON)
62 public Response getDatabases(@PathParam("name") String name) throws JsonProcessingException {
63 DatabaseSchema dbSchema = this.getDatabaseSchema(name);
64 String response = objectMapper.writeValueAsString(dbSchema);
65 return Response.status(Response.Status.OK)
71 public TableResource getDatabaseTables(@PathParam("name") String name){
72 String csDatabaseName = this.caseSensitiveDatabaseName(name);
73 return new TableResource(nodeId, csDatabaseName);
76 private String caseSensitiveDatabaseName (String ciDatabaseName) {
77 OvsdbClient client = NodeResource.getOvsdbClient(nodeId, this);
79 List<String> databases = client.getDatabases().get();
80 if (databases == null) {
81 return ciDatabaseName;
83 for (String csDatabaseName : databases) {
84 if (csDatabaseName.equalsIgnoreCase(ciDatabaseName)) {
85 return csDatabaseName;
88 return ciDatabaseName;
89 } catch (Exception e) {
90 return ciDatabaseName;