Merge "Fix build errors in autorelease full clean build"
[vfc/nfvo/wfengine.git] / winery / org.eclipse.winery.repository / src / main / java / org / eclipse / winery / repository / resources / entitytypes / nodetypes / ImplementationsOfOneNodeTypeResource.java
1 /*******************************************************************************
2  * Copyright (c) 2012-2013,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
8  *
9  * Contributors:
10  *     Oliver Kopp - initial API and implementation
11  *******************************************************************************/
12 package org.eclipse.winery.repository.resources.entitytypes.nodetypes;
13
14 import java.io.StringWriter;
15 import java.util.ArrayList;
16 import java.util.Collection;
17
18 import javax.ws.rs.core.Response;
19 import javax.xml.namespace.QName;
20
21 import org.eclipse.winery.common.ids.definitions.NodeTypeId;
22 import org.eclipse.winery.common.ids.definitions.NodeTypeImplementationId;
23 import org.eclipse.winery.repository.backend.BackendUtils;
24 import org.eclipse.winery.repository.resources.entitytypes.ImplementationsOfOneType;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 import com.fasterxml.jackson.core.JsonFactory;
29 import com.fasterxml.jackson.core.JsonGenerator;
30
31 public class ImplementationsOfOneNodeTypeResource extends ImplementationsOfOneType {
32         
33         private static final Logger logger = LoggerFactory.getLogger(ImplementationsOfOneNodeTypeResource.class);
34         
35         
36         /**
37          * The constructor is different from the usual constructors as this resource
38          * does NOT store own data, but retrieves its data solely from the
39          * associated node type
40          * 
41          * @param nodeTypeId the node type id, where this list of implementations
42          *            belongs to
43          */
44         public ImplementationsOfOneNodeTypeResource(NodeTypeId nodeTypeId) {
45                 super(nodeTypeId);
46         }
47         
48         /**
49          * required by implementations.jsp
50          * 
51          * @return for each node type implementation implementing the associated
52          *         node type
53          */
54         @Override
55         public String getImplementationsTableData() {
56                 String res;
57                 JsonFactory jsonFactory = new JsonFactory();
58                 StringWriter tableDataSW = new StringWriter();
59                 try {
60                         JsonGenerator jGenerator = jsonFactory.createGenerator(tableDataSW);
61                         jGenerator.writeStartArray();
62                         
63                         Collection<NodeTypeImplementationId> allNodeTypeImplementations = BackendUtils.getAllElementsRelatedWithATypeAttribute(NodeTypeImplementationId.class, this.getTypeId().getQName());
64                         for (NodeTypeImplementationId ntiID : allNodeTypeImplementations) {
65                                 jGenerator.writeStartArray();
66                                 jGenerator.writeString(ntiID.getNamespace().getDecoded());
67                                 jGenerator.writeString(ntiID.getXmlId().getDecoded());
68                                 jGenerator.writeEndArray();
69                         }
70                         jGenerator.writeEndArray();
71                         jGenerator.close();
72                         tableDataSW.close();
73                         res = tableDataSW.toString();
74                 } catch (Exception e) {
75                         ImplementationsOfOneNodeTypeResource.logger.error(e.getMessage(), e);
76                         res = "[]";
77                 }
78                 return res;
79         }
80         
81         @Override
82         public String getType() {
83                 return "nodetype";
84         }
85         
86         @Override
87         public String getTypeStr() {
88                 return "Node Type";
89         }
90         
91         @Override
92         public Response getJSON() {
93                 Collection<NodeTypeImplementationId> allImplementations = BackendUtils.getAllElementsRelatedWithATypeAttribute(NodeTypeImplementationId.class, this.getTypeId().getQName());
94                 ArrayList<QName> res = new ArrayList<QName>(allImplementations.size());
95                 for (NodeTypeImplementationId id : allImplementations) {
96                         res.add(id.getQName());
97                 }
98                 return Response.ok().entity(res).build();
99         }
100         
101 }