blob: f0383346b8d724fe4900a2e2b256c0f2294da7f4 [file] [log] [blame]
Thomas Vachuska02aeb032015-01-06 22:36:30 -08001/*
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 */
Jonathan Hart9bb32ab2015-05-05 18:17:31 -070016package org.onosproject.rest.resources;
Thomas Vachuska02aeb032015-01-06 22:36:30 -080017
18import org.onosproject.app.ApplicationAdminService;
19import org.onosproject.core.Application;
20import org.onosproject.core.ApplicationId;
Jonathan Hart9bb32ab2015-05-05 18:17:31 -070021import org.onosproject.rest.AbstractWebResource;
Thomas Vachuska02aeb032015-01-06 22:36:30 -080022
23import javax.ws.rs.Consumes;
24import javax.ws.rs.DELETE;
Thomas Vachuska62ad95f2015-02-18 12:11:36 -080025import javax.ws.rs.DefaultValue;
Thomas Vachuska02aeb032015-01-06 22:36:30 -080026import javax.ws.rs.GET;
27import javax.ws.rs.POST;
28import javax.ws.rs.Path;
29import javax.ws.rs.PathParam;
30import javax.ws.rs.Produces;
Thomas Vachuska62ad95f2015-02-18 12:11:36 -080031import javax.ws.rs.QueryParam;
Thomas Vachuska02aeb032015-01-06 22:36:30 -080032import javax.ws.rs.core.MediaType;
33import javax.ws.rs.core.Response;
34import java.io.InputStream;
35import java.util.Set;
36
37/**
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070038 * Manage inventory of applications.
Thomas Vachuska02aeb032015-01-06 22:36:30 -080039 */
40@Path("applications")
41public class ApplicationsWebResource extends AbstractWebResource {
42
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070043 /**
44 * Get all installed applications.
45 * Returns array of all installed applications.
46 *
Andrea Campanella10c4adc2015-12-03 15:27:54 -080047 * @onos.rsModel Applications
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070048 * @return 200 OK
49 */
Thomas Vachuska02aeb032015-01-06 22:36:30 -080050 @GET
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070051 public Response getApps() {
Thomas Vachuska02aeb032015-01-06 22:36:30 -080052 ApplicationAdminService service = get(ApplicationAdminService.class);
53 Set<Application> apps = service.getApplications();
54 return ok(encodeArray(Application.class, "applications", apps)).build();
55 }
56
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070057 /**
58 * Get application details.
59 * Returns details of the specified application.
Andrea Campanella10c4adc2015-12-03 15:27:54 -080060 * @onos.rsModel Application
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070061 * @param name application name
62 * @return 200 OK; 404; 401
63 */
Thomas Vachuska02aeb032015-01-06 22:36:30 -080064 @GET
65 @Path("{name}")
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070066 public Response getApp(@PathParam("name") String name) {
Thomas Vachuska02aeb032015-01-06 22:36:30 -080067 ApplicationAdminService service = get(ApplicationAdminService.class);
68 ApplicationId appId = service.getId(name);
69 return response(service, appId);
70 }
71
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070072 /**
73 * Install a new application.
74 * Uploads application archive stream and optionally activates the
75 * application.
76 *
77 * @param activate true to activate app also
78 * @param stream application archive stream
79 * @return 200 OK; 404; 401
80 */
Thomas Vachuska02aeb032015-01-06 22:36:30 -080081 @POST
82 @Consumes(MediaType.APPLICATION_OCTET_STREAM)
83 @Produces(MediaType.APPLICATION_JSON)
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070084 public Response installApp(@QueryParam("activate")
85 @DefaultValue("false") boolean activate,
86 InputStream stream) {
Thomas Vachuska02aeb032015-01-06 22:36:30 -080087 ApplicationAdminService service = get(ApplicationAdminService.class);
88 Application app = service.install(stream);
Thomas Vachuska62ad95f2015-02-18 12:11:36 -080089 if (activate) {
90 service.activate(app.id());
91 }
Thomas Vachuska02aeb032015-01-06 22:36:30 -080092 return ok(codec(Application.class).encode(app, this)).build();
93 }
94
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -070095 /**
96 * Uninstall application.
97 * Uninstalls the specified application deactivating it first if necessary.
98 *
99 * @param name application name
100 * @return 200 OK; 404; 401
101 */
Thomas Vachuska02aeb032015-01-06 22:36:30 -0800102 @DELETE
103 @Produces(MediaType.APPLICATION_JSON)
104 @Path("{name}")
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -0700105 public Response uninstallApp(@PathParam("name") String name) {
Thomas Vachuska02aeb032015-01-06 22:36:30 -0800106 ApplicationAdminService service = get(ApplicationAdminService.class);
107 ApplicationId appId = service.getId(name);
108 service.uninstall(appId);
109 return Response.ok().build();
110 }
111
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -0700112 /**
113 * Activate application.
114 * Activates the specified application.
115 *
116 * @param name application name
117 * @return 200 OK; 404; 401
118 */
Thomas Vachuska02aeb032015-01-06 22:36:30 -0800119 @POST
120 @Produces(MediaType.APPLICATION_JSON)
121 @Path("{name}/active")
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -0700122 public Response activateApp(@PathParam("name") String name) {
Thomas Vachuska02aeb032015-01-06 22:36:30 -0800123 ApplicationAdminService service = get(ApplicationAdminService.class);
124 ApplicationId appId = service.getId(name);
125 service.activate(appId);
126 return response(service, appId);
127 }
128
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -0700129 /**
130 * De-activate application.
131 * De-activates the specified application.
132 *
133 * @param name application name
134 * @return 200 OK; 404; 401
135 */
Thomas Vachuska02aeb032015-01-06 22:36:30 -0800136 @DELETE
137 @Produces(MediaType.APPLICATION_JSON)
138 @Path("{name}/active")
Thomas Vachuska0fa2aa12015-08-18 12:53:04 -0700139 public Response deactivateApp(@PathParam("name") String name) {
Thomas Vachuska02aeb032015-01-06 22:36:30 -0800140 ApplicationAdminService service = get(ApplicationAdminService.class);
141 ApplicationId appId = service.getId(name);
142 service.deactivate(appId);
143 return response(service, appId);
144 }
145
146 private Response response(ApplicationAdminService service, ApplicationId appId) {
147 Application app = service.getApplication(appId);
148 return ok(codec(Application.class).encode(app, this)).build();
149 }
150
151}