1 /*******************************************************************************
2 * Copyright (c) 2012-2013 University of Stuttgart.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * and the Apache License 2.0 which both accompany this distribution,
6 * and are available at http://www.eclipse.org/legal/epl-v10.html
7 * and http://www.apache.org/licenses/LICENSE-2.0
10 * Oliver Kopp - initial API and implementation
11 *******************************************************************************/
12 package org.eclipse.winery.repository.resources.entitytypes;
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
18 import javax.ws.rs.Consumes;
19 import javax.ws.rs.DELETE;
20 import javax.ws.rs.FormParam;
21 import javax.ws.rs.GET;
22 import javax.ws.rs.POST;
23 import javax.ws.rs.Path;
24 import javax.ws.rs.PathParam;
25 import javax.ws.rs.Produces;
26 import javax.ws.rs.core.MediaType;
27 import javax.ws.rs.core.Response;
28 import javax.ws.rs.core.Response.Status;
30 import org.apache.commons.lang3.StringUtils;
31 import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates;
32 import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates.InstanceState;
33 import org.eclipse.winery.common.Util;
34 import org.eclipse.winery.repository.backend.BackendUtils;
36 import com.sun.jersey.api.view.Viewable;
39 * Resource for instance states <br />
40 * Used by relationship types and node types
42 public class InstanceStatesResource {
44 private TopologyGraphElementEntityTypeResource typeResource;
45 private TTopologyElementInstanceStates instanceStates;
50 * @param instanceStates the instanceStates to manage
51 * @param typeResource the type resource, where the instance states are
52 * managed. This reference is required to fire "persist()" in
55 public InstanceStatesResource(TTopologyElementInstanceStates instanceStates, TopologyGraphElementEntityTypeResource typeResource) {
56 this.instanceStates = instanceStates;
57 this.typeResource = typeResource;
61 @Produces(MediaType.TEXT_HTML)
62 public Viewable getHTML() {
63 return new Viewable("/jsp/entitytypes/instancestates.jsp", this);
66 public List<String> getInstanceStates() {
67 List<InstanceState> instanceStates = this.instanceStates.getInstanceState();
68 ArrayList<String> states = new ArrayList<String>(instanceStates.size());
69 for (InstanceState instanceState : instanceStates) {
70 states.add(instanceState.getState());
76 @Path("{instanceState}")
77 public Response deleteInstanceState(@PathParam("instanceState") String instanceStateToRemove) {
78 if (StringUtils.isEmpty(instanceStateToRemove)) {
79 return Response.status(Status.BAD_REQUEST).entity("null instance to remove").build();
81 instanceStateToRemove = Util.URLdecode(instanceStateToRemove);
83 // InstanceState does not override "equals()", therefore we have to manually remove it
85 List<InstanceState> instanceStates = this.instanceStates.getInstanceState();
86 Iterator<InstanceState> iterator = instanceStates.iterator();
87 boolean found = false;
88 while (iterator.hasNext() && !found) {
89 if (iterator.next().getState().equals(instanceStateToRemove)) {
95 return Response.status(Status.NOT_FOUND).build();
100 return BackendUtils.persist(this.typeResource);
104 @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
105 public Response addInstanceState(@FormParam("state") String state) {
106 if (StringUtils.isEmpty(state)) {
107 return Response.notAcceptable(null).build();
110 // InstanceState does not override "equals()", therefore we have to manually check for existance
112 List<InstanceState> instanceStates = this.instanceStates.getInstanceState();
113 Iterator<InstanceState> iterator = instanceStates.iterator();
114 boolean found = false;
115 while (iterator.hasNext() && !found) {
116 if (iterator.next().getState().equals(state)) {
122 // no error, just return
123 return Response.noContent().build();
126 InstanceState instanceState = new InstanceState();
127 instanceState.setState(state);
128 instanceStates.add(instanceState);
130 return BackendUtils.persist(this.typeResource);