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.
47 * @rsModel Applications
51 public Response getApps() {
52 ApplicationAdminService service = get(ApplicationAdminService.class);
53 Set<Application> apps = service.getApplications();
54 return ok(encodeArray(Application.class, "applications", apps)).build();
58 * Get application details.
59 * Returns details of the specified application.
60 * @rsModel Application
61 * @param name application name
62 * @return 200 OK; 404; 401
66 public Response getApp(@PathParam("name") String name) {
67 ApplicationAdminService service = get(ApplicationAdminService.class);
68 ApplicationId appId = service.getId(name);
69 return response(service, appId);
73 * Install a new application.
74 * Uploads application archive stream and optionally activates the
77 * @param activate true to activate app also
78 * @param stream application archive stream
79 * @return 200 OK; 404; 401
82 @Consumes(MediaType.APPLICATION_OCTET_STREAM)
83 @Produces(MediaType.APPLICATION_JSON)
84 public Response installApp(@QueryParam("activate")
85 @DefaultValue("false") boolean activate,
87 ApplicationAdminService service = get(ApplicationAdminService.class);
88 Application app = service.install(stream);
90 service.activate(app.id());
92 return ok(codec(Application.class).encode(app, this)).build();
96 * Uninstall application.
97 * Uninstalls the specified application deactivating it first if necessary.
99 * @param name application name
100 * @return 200 OK; 404; 401
103 @Produces(MediaType.APPLICATION_JSON)
105 public Response uninstallApp(@PathParam("name") String name) {
106 ApplicationAdminService service = get(ApplicationAdminService.class);
107 ApplicationId appId = service.getId(name);
108 service.uninstall(appId);
109 return Response.ok().build();
113 * Activate application.
114 * Activates the specified application.
116 * @param name application name
117 * @return 200 OK; 404; 401
120 @Produces(MediaType.APPLICATION_JSON)
121 @Path("{name}/active")
122 public Response activateApp(@PathParam("name") String name) {
123 ApplicationAdminService service = get(ApplicationAdminService.class);
124 ApplicationId appId = service.getId(name);
125 service.activate(appId);
126 return response(service, appId);
130 * De-activate application.
131 * De-activates the specified application.
133 * @param name application name
134 * @return 200 OK; 404; 401
137 @Produces(MediaType.APPLICATION_JSON)
138 @Path("{name}/active")
139 public Response deactivateApp(@PathParam("name") String name) {
140 ApplicationAdminService service = get(ApplicationAdminService.class);
141 ApplicationId appId = service.getId(name);
142 service.deactivate(appId);
143 return response(service, appId);
146 private Response response(ApplicationAdminService service, ApplicationId appId) {
147 Application app = service.getApplication(appId);
148 return ok(codec(Application.class).encode(app, this)).build();