Add winery source code
[vfc/nfvo/wfengine.git] / winery / org.eclipse.winery.repository / src / main / java / org / eclipse / winery / repository / resources / servicetemplates / plans / PlansResourceData.java
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
8  *
9  * Contributors:
10  *     Oliver Kopp - initial API and implementation
11  *******************************************************************************/
12 package org.eclipse.winery.repository.resources.servicetemplates.plans;
13
14 import java.io.IOException;
15 import java.io.StringWriter;
16 import java.util.Collection;
17 import java.util.List;
18
19 import org.eclipse.winery.model.tosca.TPlan;
20 import org.eclipse.winery.model.tosca.TPlan.PlanModelReference;
21 import org.eclipse.winery.repository.datatypes.TypeWithShortName;
22 import org.eclipse.winery.repository.resources.admin.types.PlanLanguagesManager;
23 import org.eclipse.winery.repository.resources.admin.types.PlanTypesManager;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import com.fasterxml.jackson.core.JsonFactory;
28 import com.fasterxml.jackson.core.JsonGenerationException;
29 import com.fasterxml.jackson.core.JsonGenerator;
30
31 public class PlansResourceData {
32         
33         private static final Logger logger = LoggerFactory.getLogger(PlansResourceData.class);
34         
35         // data: [ [id, pre, name, type, lang]* ]
36         private String embeddedPlansTableData;
37         
38         // data: [ [id, pre, name, type, lang, reference]* ]
39         private String linkedPlansTableData;
40         
41         
42         /**
43          * Data object for the JSP
44          * 
45          * @param serviceTemplateResource the service template the plans belong to
46          */
47         public PlansResourceData(List<TPlan> plans) {
48                 if (plans.isEmpty()) {
49                         this.embeddedPlansTableData = "[]";
50                         this.linkedPlansTableData = "[]";
51                         return;
52                 }
53                 JsonFactory jsonFactory = new JsonFactory();
54                 StringWriter embeddedPlansTableDataSW = new StringWriter();
55                 StringWriter linkedPlansTableDataSW = new StringWriter();
56                 try {
57                         JsonGenerator jGeneratorEmbedded = jsonFactory.createGenerator(embeddedPlansTableDataSW);
58                         JsonGenerator jGeneratorLinked = jsonFactory.createGenerator(linkedPlansTableDataSW);
59                         
60                         jGeneratorEmbedded.writeStartArray();
61                         jGeneratorLinked.writeStartArray();
62                         
63                         for (TPlan plan : plans) {
64                                 String name = plan.getName();
65                                 if (name == null) {
66                                         // name defaults to id
67                                         name = plan.getId();
68                                 }
69                                 String type = PlanTypesManager.INSTANCE.getShortName(plan.getPlanType());
70                                 String language = PlanLanguagesManager.INSTANCE.getShortName(plan.getPlanLanguage());
71                                 PlanModelReference planModelReference = plan.getPlanModelReference();
72                                 String reference = planModelReference != null ? planModelReference.getReference() : null;
73                                 JsonGenerator gen;
74                                 boolean writeReference;
75                                 if (reference == null) {
76                                         gen = jGeneratorEmbedded;
77                                         writeReference = false;
78                                 } else if (reference.startsWith("../")) {
79                                         gen = jGeneratorEmbedded;
80                                         writeReference = false;
81                                 } else {
82                                         gen = jGeneratorLinked;
83                                         writeReference = true;
84                                 }
85                                 
86                                 gen.writeStartArray();
87                                 gen.writeString(plan.getId());
88                                 gen.writeString(""); // precondition
89                                 gen.writeString(name);
90                                 gen.writeString(type);
91                                 gen.writeString(language);
92                                 if (writeReference) {
93                                         gen.writeString(reference);
94                                 }
95                                 gen.writeEndArray();
96                         }
97                         
98                         jGeneratorEmbedded.writeEndArray();
99                         jGeneratorLinked.writeEndArray();
100                         
101                         jGeneratorEmbedded.close();
102                         embeddedPlansTableDataSW.close();
103                         jGeneratorLinked.close();
104                         linkedPlansTableDataSW.close();
105                 } catch (JsonGenerationException e) {
106                         PlansResourceData.logger.error(e.getMessage(), e);
107                         this.embeddedPlansTableData = "[]";
108                         this.linkedPlansTableData = "[]";
109                         return;
110                 } catch (IOException e) {
111                         PlansResourceData.logger.error("", e);
112                         this.embeddedPlansTableData = "[]";
113                         this.linkedPlansTableData = "[]";
114                         return;
115                 }
116                 this.embeddedPlansTableData = embeddedPlansTableDataSW.toString();
117                 this.linkedPlansTableData = linkedPlansTableDataSW.toString();
118         }
119         
120         public String getEmbeddedPlansTableData() {
121                 return this.embeddedPlansTableData;
122         }
123         
124         public String getLinkedPlansTableData() {
125                 return this.linkedPlansTableData;
126         }
127         
128         public Collection<TypeWithShortName> getPlanTypes() {
129                 return PlanTypesManager.INSTANCE.getTypes();
130         }
131         
132         public Collection<TypeWithShortName> getPlanLanguages() {
133                 return PlanLanguagesManager.INSTANCE.getTypes();
134         }
135         
136 }