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.nodetypes.reqandcapdefs;
14 import java.util.List;
16 import javax.ws.rs.FormParam;
17 import javax.ws.rs.PUT;
18 import javax.ws.rs.Path;
19 import javax.ws.rs.core.Response;
20 import javax.xml.namespace.QName;
22 import org.eclipse.winery.model.tosca.TCapabilityDefinition;
23 import org.eclipse.winery.model.tosca.TCapabilityDefinition.Constraints;
24 import org.eclipse.winery.model.tosca.TConstraint;
25 import org.eclipse.winery.repository.backend.BackendUtils;
26 import org.eclipse.winery.repository.resources.AbstractComponentInstanceResource;
27 import org.eclipse.winery.repository.resources._support.IPersistable;
28 import org.eclipse.winery.repository.resources._support.collections.IIdDetermination;
29 import org.eclipse.winery.repository.resources.entitytypes.nodetypes.NodeTypeResource;
32 * Implementation similar to RequirementDefinitionResource, but with
33 * TCapabilityDefinition instead of TRequirementDefinition
35 public final class CapabilityDefinitionResource extends AbstractReqOrCapDefResource<TCapabilityDefinition> {
37 private TCapabilityDefinition capDef;
41 * Constructor has to follow the pattern of EnetityTResource as the
42 * constructor is invoked by reflection in EntityWithIdcollectionResource
44 * @param res the resource this req def is nested in. Has to be of Type
45 * "NodeTypeResource". Due to the implementation of
46 * org.eclipse.winery .repository.resources._support.collections.
47 * withid.EntityWithIdCollectionResource
48 * .getEntityResourceInstance(EntityT, int), we have to use
49 * "AbstractComponentInstanceResource" as type
51 public CapabilityDefinitionResource(IIdDetermination<TCapabilityDefinition> idDetermination, TCapabilityDefinition capDef, int idx, List<TCapabilityDefinition> list, AbstractComponentInstanceResource res) {
52 super(idDetermination, capDef, idx, list, (NodeTypeResource) res, CapabilityDefinitionResource.getConstraints(capDef));
57 * Quick hack to avoid internal server error
59 public CapabilityDefinitionResource(IIdDetermination<TCapabilityDefinition> idDetermination, TCapabilityDefinition capDef, int idx, List<TCapabilityDefinition> list, IPersistable res) {
60 this(idDetermination, capDef, idx, list, (AbstractComponentInstanceResource) res);
64 * Fetch the list of constraints from the given definition. If the list does
65 * not exist, the list is created an stored in the given capDef
67 public static List<TConstraint> getConstraints(TCapabilityDefinition capDef) {
68 Constraints constraints = capDef.getConstraints();
69 if (constraints == null) {
70 constraints = new Constraints();
71 capDef.setConstraints(constraints);
73 return constraints.getConstraint();
76 public QName getType() {
77 return this.capDef.getCapabilityType();
82 public Response setType(@FormParam(value = "type") String value) {
83 QName qname = QName.valueOf(value);
84 this.capDef.setCapabilityType(qname);
85 return BackendUtils.persist(this.parent);
89 public String getId(TCapabilityDefinition e) {