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.servicetemplates.plans;
14 import java.io.IOException;
15 import java.io.StringWriter;
16 import java.util.Collection;
17 import java.util.List;
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;
27 import com.fasterxml.jackson.core.JsonFactory;
28 import com.fasterxml.jackson.core.JsonGenerationException;
29 import com.fasterxml.jackson.core.JsonGenerator;
31 public class PlansResourceData {
33 private static final Logger logger = LoggerFactory.getLogger(PlansResourceData.class);
35 // data: [ [id, pre, name, type, lang]* ]
36 private String embeddedPlansTableData;
38 // data: [ [id, pre, name, type, lang, reference]* ]
39 private String linkedPlansTableData;
43 * Data object for the JSP
45 * @param serviceTemplateResource the service template the plans belong to
47 public PlansResourceData(List<TPlan> plans) {
48 if (plans.isEmpty()) {
49 this.embeddedPlansTableData = "[]";
50 this.linkedPlansTableData = "[]";
53 JsonFactory jsonFactory = new JsonFactory();
54 StringWriter embeddedPlansTableDataSW = new StringWriter();
55 StringWriter linkedPlansTableDataSW = new StringWriter();
57 JsonGenerator jGeneratorEmbedded = jsonFactory.createGenerator(embeddedPlansTableDataSW);
58 JsonGenerator jGeneratorLinked = jsonFactory.createGenerator(linkedPlansTableDataSW);
60 jGeneratorEmbedded.writeStartArray();
61 jGeneratorLinked.writeStartArray();
63 for (TPlan plan : plans) {
64 String name = plan.getName();
66 // name defaults to id
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;
74 boolean writeReference;
75 if (reference == null) {
76 gen = jGeneratorEmbedded;
77 writeReference = false;
78 } else if (reference.startsWith("../")) {
79 gen = jGeneratorEmbedded;
80 writeReference = false;
82 gen = jGeneratorLinked;
83 writeReference = true;
86 gen.writeStartArray();
87 gen.writeString(plan.getId());
88 gen.writeString(""); // precondition
89 gen.writeString(name);
90 gen.writeString(type);
91 gen.writeString(language);
93 gen.writeString(reference);
98 jGeneratorEmbedded.writeEndArray();
99 jGeneratorLinked.writeEndArray();
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 = "[]";
110 } catch (IOException e) {
111 PlansResourceData.logger.error("", e);
112 this.embeddedPlansTableData = "[]";
113 this.linkedPlansTableData = "[]";
116 this.embeddedPlansTableData = embeddedPlansTableDataSW.toString();
117 this.linkedPlansTableData = linkedPlansTableDataSW.toString();
120 public String getEmbeddedPlansTableData() {
121 return this.embeddedPlansTableData;
124 public String getLinkedPlansTableData() {
125 return this.linkedPlansTableData;
128 public Collection<TypeWithShortName> getPlanTypes() {
129 return PlanTypesManager.INSTANCE.getTypes();
132 public Collection<TypeWithShortName> getPlanLanguages() {
133 return PlanLanguagesManager.INSTANCE.getTypes();