1 /*******************************************************************************
2 * Copyright (c) 2012-2015 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;
15 import java.io.IOException;
16 import java.io.InputStream;
17 import java.util.ArrayList;
18 import java.util.List;
20 import javax.ws.rs.Consumes;
21 import javax.ws.rs.GET;
22 import javax.ws.rs.POST;
23 import javax.ws.rs.Path;
24 import javax.ws.rs.Produces;
25 import javax.ws.rs.core.MediaType;
26 import javax.ws.rs.core.Response;
27 import javax.ws.rs.core.Response.Status;
29 import org.apache.commons.io.FileUtils;
30 import org.eclipse.winery.repository.Utils;
31 import org.eclipse.winery.repository.importing.CSARImporter;
32 import org.eclipse.winery.repository.resources.API.APIResource;
33 import org.eclipse.winery.repository.resources.admin.AdminTopResource;
34 import org.eclipse.winery.repository.resources.entitytemplates.artifacttemplates.ArtifactTemplatesResource;
35 import org.eclipse.winery.repository.resources.entitytemplates.policytemplates.PolicyTemplatesResource;
36 import org.eclipse.winery.repository.resources.entitytypeimplementations.nodetypeimplementations.NodeTypeImplementationsResource;
37 import org.eclipse.winery.repository.resources.entitytypeimplementations.relationshiptypeimplementations.RelationshipTypeImplementationsResource;
38 import org.eclipse.winery.repository.resources.entitytypes.artifacttypes.ArtifactTypesResource;
39 import org.eclipse.winery.repository.resources.entitytypes.capabilitytypes.CapabilityTypesResource;
40 import org.eclipse.winery.repository.resources.entitytypes.nodetypes.NodeTypesResource;
41 import org.eclipse.winery.repository.resources.entitytypes.policytypes.PolicyTypesResource;
42 import org.eclipse.winery.repository.resources.entitytypes.relationshiptypes.RelationshipTypesResource;
43 import org.eclipse.winery.repository.resources.entitytypes.requirementtypes.RequirementTypesResource;
44 import org.eclipse.winery.repository.resources.imports.ImportsResource;
45 import org.eclipse.winery.repository.resources.servicetemplates.ServiceTemplatesResource;
46 import org.restdoc.annotations.RestDoc;
47 import org.restdoc.annotations.RestDocParam;
48 import org.restdoc.annotations.RestDocReturnCode;
50 import com.sun.jersey.api.view.Viewable;
51 import com.sun.jersey.core.header.FormDataContentDisposition;
52 import com.sun.jersey.multipart.FormDataParam;
55 * All paths listed here have to be listed in Jersey's filter configuration
58 public class MainResource {
61 public APIResource api() {
62 return new APIResource();
65 @Path("artifacttemplates/")
66 public ArtifactTemplatesResource artifacttemplates() {
67 return new ArtifactTemplatesResource();
70 @Path("artifacttypes/")
71 public ArtifactTypesResource artifactypes() {
72 return new ArtifactTypesResource();
76 public AdminTopResource admin() {
77 return new AdminTopResource();
80 @Path("capabilitytypes/")
81 public CapabilityTypesResource capabilitytypes() {
82 return new CapabilityTypesResource();
86 public ImportsResource imports() {
87 return new ImportsResource();
91 public NodeTypesResource nodetypes() {
92 return new NodeTypesResource();
95 @Path("nodetypeimplementations/")
96 public NodeTypeImplementationsResource nodetypeimplementations() {
97 return new NodeTypeImplementationsResource();
102 @Produces(MediaType.TEXT_HTML)
103 public Viewable getOtherElements() {
104 return new Viewable("/jsp/otherElements.jsp");
107 @Path("policytemplates/")
108 public PolicyTemplatesResource policytemplates() {
109 return new PolicyTemplatesResource();
112 @Path("policytypes/")
113 public PolicyTypesResource policytypes() {
114 return new PolicyTypesResource();
117 @Path("relationshiptypes/")
118 public RelationshipTypesResource relationshiptypes() {
119 return new RelationshipTypesResource();
122 @Path("requirementtypes/")
123 public RequirementTypesResource requirementtypes() {
124 return new RequirementTypesResource();
127 @Path("relationshiptypeimplementations/")
128 public RelationshipTypeImplementationsResource relationshiptypeimplementations() {
129 return new RelationshipTypeImplementationsResource();
132 @Path("servicetemplates/")
133 public ServiceTemplatesResource servicetemplates() {
134 return new ServiceTemplatesResource();
138 * Returns the main page of winery.
141 @Produces(MediaType.TEXT_HTML)
142 public Response onGet() {
143 return Response.temporaryRedirect(Utils.createURI("servicetemplates/")).build();
147 @Consumes(MediaType.MULTIPART_FORM_DATA)
148 @RestDoc(methodDescription = "Imports the given CSAR (sent by simplesinglefileupload.jsp)")
149 @RestDocReturnCode(code = "200", description = "If the CSAR could be partially imported, the points where it failed are returned in the body")
151 public Response importCSAR(
152 @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail,
153 @FormDataParam("overwrite") @RestDocParam(description = "true: content of CSAR overwrites existing content. false (default): existing content is kept") Boolean overwrite) {
155 CSARImporter importer = new CSARImporter();
156 List<String> errors = new ArrayList<String>();
158 ow = (overwrite != null) && overwrite;
160 importer.readCSAR(uploadedInputStream, errors, ow, true);
161 } catch (Exception e) {
162 return Response.serverError().entity("Could not import CSAR").entity(e.getMessage()).build();
164 if (errors.isEmpty()) {
165 return Response.noContent().build();
167 // In case there are errors, we send them as "bad request"
168 return Response.status(Status.BAD_REQUEST).entity(errors).build();
173 @Consumes(MediaType.APPLICATION_XML)
174 @Produces(MediaType.APPLICATION_JSON)
175 public Response importDefinitions(InputStream is) throws IOException {
177 toscaFile = File.createTempFile("TOSCA", ".tosca");
178 FileUtils.copyInputStreamToFile(is, toscaFile);
179 CSARImporter importer = new CSARImporter();
180 List<String> errors = new ArrayList<>();
181 importer.importDefinitions(null, toscaFile.toPath(), errors, false, true);
182 if (errors.isEmpty()) {
183 return Response.noContent().build();
185 return Response.status(Status.BAD_REQUEST).entity(errors).build();