acedbec28eec18413322445e65c9255140c8c24f
[ovsdb.git] / northbound / src / main / java / org / opendaylight / ovsdb / northbound / DatabaseResource.java
1 package org.opendaylight.ovsdb.northbound;
2
3 import com.fasterxml.jackson.databind.SerializationFeature;
4 import java.util.List;
5
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;
12
13 import org.opendaylight.controller.northbound.commons.exception.InternalServerErrorException;
14 import org.opendaylight.ovsdb.lib.OvsdbClient;
15 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
16
17 import com.fasterxml.jackson.core.JsonProcessingException;
18 import com.fasterxml.jackson.databind.DeserializationFeature;
19 import com.fasterxml.jackson.databind.ObjectMapper;
20
21 /**
22  * Northbound interface for OVSDB Databases
23  */
24 public class DatabaseResource {
25
26     String nodeId;
27     ObjectMapper objectMapper;
28     DatabaseResource(String id) {
29         this.nodeId = id;
30         objectMapper = new ObjectMapper();
31         objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
32         objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
33     }
34
35     private DatabaseSchema getDatabaseSchema (String databaseName) {
36         String csDatabaseName = this.caseSensitiveDatabaseName(databaseName);
37         OvsdbClient client = NodeResource.getOvsdbClient(nodeId, this);
38         return client.getDatabaseSchema(csDatabaseName);
39     }
40
41     @GET
42     @Produces(MediaType.APPLICATION_JSON)
43     public Response getDatabases(){
44         OvsdbClient client = NodeResource.getOvsdbClient(nodeId, this);
45         try {
46             List<String> databases = client.getDatabases().get();
47             if (databases == null) {
48                 return Response.noContent().build();
49             }
50             String response = objectMapper.writeValueAsString(databases);
51             return Response.status(Response.Status.OK)
52                     .entity(response)
53                     .build();
54         } catch (Exception e) {
55             throw new InternalServerErrorException("Failed due to exception " + e.getMessage());
56         }
57     }
58
59     @GET
60     @Path("{name}")
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)
66                 .entity(response)
67                 .build();
68     }
69
70     @Path("{name}/table")
71     public TableResource getDatabaseTables(@PathParam("name") String name){
72         String csDatabaseName = this.caseSensitiveDatabaseName(name);
73         return new TableResource(nodeId, csDatabaseName);
74     }
75
76     private String caseSensitiveDatabaseName (String ciDatabaseName) {
77         OvsdbClient client = NodeResource.getOvsdbClient(nodeId, this);
78         try {
79             List<String> databases = client.getDatabases().get();
80             if (databases == null) {
81                 return ciDatabaseName;
82             }
83             for (String csDatabaseName : databases) {
84                 if (csDatabaseName.equalsIgnoreCase(ciDatabaseName)) {
85                     return csDatabaseName;
86                 }
87             }
88             return ciDatabaseName;
89         } catch (Exception e) {
90             return ciDatabaseName;
91         }
92     }
93 }