2 * Copyright 2015 Open Networking Laboratory
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.onosproject.rest.resources;
18 import org.onosproject.app.ApplicationAdminService;
19 import org.onosproject.core.Application;
20 import org.onosproject.core.ApplicationId;
21 import org.onosproject.rest.AbstractWebResource;
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;
38 * Manage inventory of applications.
41 public class ApplicationsWebResource extends AbstractWebResource {
44 * Get all installed applications.
45 * Returns array of all installed applications.
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();
57 * Get application details.
58 * Returns details of the specified application.
60 * @param name application name
61 * @return 200 OK; 404; 401
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);
72 * Install a new application.
73 * Uploads application archive stream and optionally activates the
76 * @param activate true to activate app also
77 * @param stream application archive stream
78 * @return 200 OK; 404; 401
81 @Consumes(MediaType.APPLICATION_OCTET_STREAM)
82 @Produces(MediaType.APPLICATION_JSON)
83 public Response installApp(@QueryParam("activate")
84 @DefaultValue("false") boolean activate,
86 ApplicationAdminService service = get(ApplicationAdminService.class);
87 Application app = service.install(stream);
89 service.activate(app.id());
91 return ok(codec(Application.class).encode(app, this)).build();
95 * Uninstall application.
96 * Uninstalls the specified application deactivating it first if necessary.
98 * @param name application name
99 * @return 200 OK; 404; 401
102 @Produces(MediaType.APPLICATION_JSON)
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();
112 * Activate application.
113 * Activates the specified application.
115 * @param name application name
116 * @return 200 OK; 404; 401
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);
129 * De-activate application.
130 * De-activates the specified application.
132 * @param name application name
133 * @return 200 OK; 404; 401
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);
145 private Response response(ApplicationAdminService service, ApplicationId appId) {
146 Application app = service.getApplication(appId);
147 return ok(codec(Application.class).encode(app, this)).build();