636fc333fe4b72e393b007cb74b1cd2fafded791
[onosfw.git] /
1 /*
2  * Copyright 2015 Open Networking Laboratory
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onosproject.rest.resources;
17
18 import org.onosproject.app.ApplicationAdminService;
19 import org.onosproject.core.Application;
20 import org.onosproject.core.ApplicationId;
21 import org.onosproject.rest.AbstractWebResource;
22
23 import javax.ws.rs.Consumes;
24 import javax.ws.rs.DELETE;
25 import javax.ws.rs.DefaultValue;
26 import javax.ws.rs.GET;
27 import javax.ws.rs.POST;
28 import javax.ws.rs.Path;
29 import javax.ws.rs.PathParam;
30 import javax.ws.rs.Produces;
31 import javax.ws.rs.QueryParam;
32 import javax.ws.rs.core.MediaType;
33 import javax.ws.rs.core.Response;
34 import java.io.InputStream;
35 import java.util.Set;
36
37 /**
38  * Manage inventory of applications.
39  */
40 @Path("applications")
41 public class ApplicationsWebResource extends AbstractWebResource {
42
43     /**
44      * Get all installed applications.
45      * Returns array of all installed applications.
46      *
47      * @return 200 OK
48      */
49     @GET
50     public Response getApps() {
51         ApplicationAdminService service = get(ApplicationAdminService.class);
52         Set<Application> apps = service.getApplications();
53         return ok(encodeArray(Application.class, "applications", apps)).build();
54     }
55
56     /**
57      * Get application details.
58      * Returns details of the specified application.
59      *
60      * @param name application name
61      * @return 200 OK; 404; 401
62      */
63     @GET
64     @Path("{name}")
65     public Response getApp(@PathParam("name") String name) {
66         ApplicationAdminService service = get(ApplicationAdminService.class);
67         ApplicationId appId = service.getId(name);
68         return response(service, appId);
69     }
70
71     /**
72      * Install a new application.
73      * Uploads application archive stream and optionally activates the
74      * application.
75      *
76      * @param activate true to activate app also
77      * @param stream   application archive stream
78      * @return 200 OK; 404; 401
79      */
80     @POST
81     @Consumes(MediaType.APPLICATION_OCTET_STREAM)
82     @Produces(MediaType.APPLICATION_JSON)
83     public Response installApp(@QueryParam("activate")
84                                @DefaultValue("false") boolean activate,
85                                InputStream stream) {
86         ApplicationAdminService service = get(ApplicationAdminService.class);
87         Application app = service.install(stream);
88         if (activate) {
89             service.activate(app.id());
90         }
91         return ok(codec(Application.class).encode(app, this)).build();
92     }
93
94     /**
95      * Uninstall application.
96      * Uninstalls the specified application deactivating it first if necessary.
97      *
98      * @param name application name
99      * @return 200 OK; 404; 401
100      */
101     @DELETE
102     @Produces(MediaType.APPLICATION_JSON)
103     @Path("{name}")
104     public Response uninstallApp(@PathParam("name") String name) {
105         ApplicationAdminService service = get(ApplicationAdminService.class);
106         ApplicationId appId = service.getId(name);
107         service.uninstall(appId);
108         return Response.ok().build();
109     }
110
111     /**
112      * Activate application.
113      * Activates the specified application.
114      *
115      * @param name application name
116      * @return 200 OK; 404; 401
117      */
118     @POST
119     @Produces(MediaType.APPLICATION_JSON)
120     @Path("{name}/active")
121     public Response activateApp(@PathParam("name") String name) {
122         ApplicationAdminService service = get(ApplicationAdminService.class);
123         ApplicationId appId = service.getId(name);
124         service.activate(appId);
125         return response(service, appId);
126     }
127
128     /**
129      * De-activate application.
130      * De-activates the specified application.
131      *
132      * @param name application name
133      * @return 200 OK; 404; 401
134      */
135     @DELETE
136     @Produces(MediaType.APPLICATION_JSON)
137     @Path("{name}/active")
138     public Response deactivateApp(@PathParam("name") String name) {
139         ApplicationAdminService service = get(ApplicationAdminService.class);
140         ApplicationId appId = service.getId(name);
141         service.deactivate(appId);
142         return response(service, appId);
143     }
144
145     private Response response(ApplicationAdminService service, ApplicationId appId) {
146         Application app = service.getApplication(appId);
147         return ok(codec(Application.class).encode(app, this)).build();
148     }
149
150 }