1 package org.opendaylight.ovsdb.northbound;
5 import javax.ws.rs.GET;
6 import javax.ws.rs.Path;
7 import javax.ws.rs.PathParam;
8 import javax.ws.rs.Produces;
9 import javax.ws.rs.core.MediaType;
10 import javax.ws.rs.core.Response;
12 import org.opendaylight.ovsdb.lib.OvsdbClient;
13 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
14 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
15 import org.opendaylight.ovsdb.lib.schema.TableSchema;
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 tables
24 public class TableResource {
25 ObjectMapper objectMapper;
29 TableResource(String nodeId, String databaseName){
31 this.databaseName = databaseName;
32 objectMapper = new ObjectMapper();
33 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
37 private DatabaseSchema getDatabaseSchema (String databaseName) {
38 OvsdbClient client = NodeResource.getOvsdbConnection(nodeId, this);
39 return client.getDatabaseSchema(databaseName);
43 @Produces(MediaType.APPLICATION_JSON)
44 public Response getTables() throws JsonProcessingException {
45 DatabaseSchema dbSchema = this.getDatabaseSchema(databaseName);
46 if (dbSchema == null) {
47 return Response.noContent().build();
49 String response = objectMapper.writeValueAsString(dbSchema.getTables());
50 return Response.status(Response.Status.OK)
57 @Produces(MediaType.APPLICATION_JSON)
58 public Response getTableDetails(@PathParam("name") String name) throws JsonProcessingException {
59 String csTableName = this.caseSensitiveTableName(databaseName, name);
60 DatabaseSchema dbSchema = this.getDatabaseSchema(databaseName);
61 if (dbSchema == null) {
62 return Response.noContent().build();
64 TableSchema<GenericTableSchema> tableSchema = dbSchema.table(csTableName, GenericTableSchema.class);
65 String response = objectMapper.writeValueAsString(tableSchema);
66 return Response.status(Response.Status.OK)
72 public RowResource getDatabaseTables(@PathParam("name") String name){
73 return new RowResource(nodeId, databaseName, name);
76 private String caseSensitiveTableName (String databaseName, String ciTableName) {
77 DatabaseSchema dbSchema = this.getDatabaseSchema(databaseName);
78 if (dbSchema == null) {
81 Set<String> tables = dbSchema.getTables();
85 for (String tableName : tables) {
86 if (tableName.equalsIgnoreCase(ciTableName)) return tableName;