2 /*******************************************************************************
3 * Copyright (c) 2013 Pascal Hirmer.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * and the Apache License 2.0 which both accompany this distribution,
7 * and are available at http://www.eclipse.org/legal/epl-v10.html
8 * and http://www.apache.org/licenses/LICENSE-2.0
11 * Pascal Hirmer - initial API and implementation
12 *******************************************************************************/
15 * This JSP calls the topology completion and handles the response.
16 * It is called the event handler when "Complete Topology" is selected in the EnterCompletionInformationDiag.
17 * There are several possible responses from the completion:
18 * - the topology is complete: display a success message
19 * - the topology is complete, several solutions exist: display dialog to choose topology solution
20 * - topology completion interrupted: the user has to chose inserted Node or Relationship Templates
24 <%@page import="java.io.StringWriter"%>
25 <%@page import="java.util.List"%>
26 <%@page import="java.util.Map"%>
27 <%@page import="javax.xml.bind.Marshaller"%>
28 <%@page import="javax.xml.bind.JAXBContext"%>
29 <%@page import="javax.xml.bind.JAXBException"%>
30 <%@page import="org.eclipse.winery.model.tosca.Definitions"%>
31 <%@page import="org.eclipse.winery.model.tosca.TEntityTemplate"%>
32 <%@page import="org.eclipse.winery.model.tosca.TNodeTemplate"%>
33 <%@page import="org.eclipse.winery.model.tosca.TServiceTemplate"%>
34 <%@page import="org.eclipse.winery.model.tosca.TTopologyTemplate"%>
35 <%@page import="org.eclipse.winery.topologymodeler.addons.topologycompleter.topologycompletion.CompletionInterface"%>
37 <%@taglib prefix="tc" tagdir="/WEB-INF/tags/common/topologycompletion"%>
40 // parse Strings from the request to Boolean values
41 boolean stepByStep = Boolean.parseBoolean(request.getParameter("stepByStep"));
42 boolean restarted = Boolean.parseBoolean(request.getParameter("restarted"));
43 boolean overwriteTopology = Boolean.parseBoolean(request.getParameter("overwriteTopology"));
45 // call the topology completion component which will return a message if it was successful.
46 CompletionInterface completionInterface = new CompletionInterface();
47 String message = completionInterface.complete(request.getParameter("topology"), request.getParameter("stName"), request.getParameter("templateURL"), overwriteTopology, request.getParameter("topologyName"), request.getParameter("topologyNamespace"), request.getParameter("repositoryURL"), stepByStep, restarted);
49 if (message.equals("success")) { %>
50 <script> vShowSuccess('Completion Successful!'); </script>
52 } else if (message.equals("topologyComplete") && !restarted) { %>
54 vShowSuccess('The topology is already complete.');
57 } else if (message.equals("failure")) {
59 <p> <%=completionInterface.getErrorMessage()%> </p>
60 <%} else if (message.equals("userInteraction")) {
62 // a user interaction is necessary to choose RelationshipTemplates, receive
63 // the current topology and the choices from the CompletionInterface
64 // and display them via relationshipTemplateSelector.jsp
66 TTopologyTemplate currentTopology = completionInterface.getCurrentTopology();
67 List<TEntityTemplate> relationshipTemplateSelection = completionInterface.getRelationshipTemplateChoices();
69 /////////////////////////////////////////////////////
70 // Convert JAXB objects of the topology and the
71 // Relationship Templates to be chosen to XML Strings
72 /////////////////////////////////////////////////////
74 Definitions definitions = new Definitions();
75 TServiceTemplate serviceTemplate = new TServiceTemplate();
77 serviceTemplate.setTopologyTemplate(currentTopology);
78 definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
79 JAXBContext context = JAXBContext.newInstance(Definitions.class);
80 Marshaller marshaller = context.createMarshaller();
81 StringWriter currentTopologyString = new StringWriter();
83 marshaller.marshal(definitions, currentTopologyString);
85 TTopologyTemplate topologyTemplate = new TTopologyTemplate();
87 // add all choices to a TopologyTemplate
88 for (TEntityTemplate entityTemplate: relationshipTemplateSelection) {
89 topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(entityTemplate);
92 // get the choices as XML
93 definitions = new Definitions();
94 serviceTemplate = new TServiceTemplate();
95 serviceTemplate.setTopologyTemplate(topologyTemplate);
96 definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
97 context = JAXBContext.newInstance(Definitions.class);
98 StringWriter choicesAsXMLString = new StringWriter();
100 marshaller.marshal(definitions, choicesAsXMLString);
103 var topology = "<%=currentTopologyString.toString()%>";
104 var choices = "<%=choicesAsXMLString.toString()%>";
106 <!-- call the relationshipTemplateSelector tag to render the selection to graphic objects -->
107 <tc:relationshipTemplateSelector choices='<%=relationshipTemplateSelection%>' templateURL='<%=request.getParameter("templateURL")%>' topologyName='<%=request.getParameter("topologyName")%>'
108 topologyNamespace='<%=request.getParameter("topologyNamespace")%>' repositoryURL='<%=request.getParameter("repositoryURL")%>' stName='<%=request.getParameter("stName")%>' />
109 <%} else if (message.equals("userTopologySelection")) {
110 // there are several topology solutions. Receive the choices from the CompletionInterface
111 // and display them via topologyTemplateSelector.tag
112 List<TTopologyTemplate> topologyTemplateSelection = completionInterface.getTopologyTemplateChoices();
114 <!-- call the topologyTemplateSelector tag to render the selection to graphic objects -->
115 <tc:topologyTemplateSelector solutionTopologies='<%=topologyTemplateSelection%>' templateURL='<%=request.getParameter("templateURL")%>' topologyName='<%=request.getParameter("topologyName")%>'
116 topologyNamespace='<%=request.getParameter("topologyNamespace")%>' repositoryURL='<%=request.getParameter("repositoryURL")%>' />
118 } else if (message.equals("stepByStep")) {
120 // the topology completion is processed step-by-step. The user has to choose inserted Node and RelationshipTemplates
121 TTopologyTemplate currentTopology = completionInterface.getCurrentTopology();
122 Map<TNodeTemplate, Map<TNodeTemplate, List<TEntityTemplate>>> nodeTemplateSelection = completionInterface.getNodeTemplateChoices();
124 ///////////////////////////////////////////////
125 // Convert JAXB objects of the topology and the
126 // Templates to be chosen to XML Strings
127 ///////////////////////////////////////////////
129 Definitions definitions = new Definitions();
130 TServiceTemplate serviceTemplate = new TServiceTemplate();
131 serviceTemplate.setTopologyTemplate(currentTopology);
132 definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
133 JAXBContext context = JAXBContext.newInstance(Definitions.class);
134 Marshaller marshaller = context.createMarshaller();
135 StringWriter currentTopologyString = new StringWriter();
137 marshaller.marshal(definitions, currentTopologyString);
139 // add all choices to a TopologyTemplate
140 TTopologyTemplate topologyTemplate = new TTopologyTemplate();
142 for (TNodeTemplate nodeTemplate: nodeTemplateSelection.keySet()) {
143 Map<TNodeTemplate, List<TEntityTemplate>> entityTemplates = nodeTemplateSelection.get(nodeTemplate);
145 for (TNodeTemplate entity: entityTemplates.keySet()) {
146 topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(entity);
147 topologyTemplate.getNodeTemplateOrRelationshipTemplate().addAll(entityTemplates.get(entity));
149 topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(nodeTemplate);
152 // get the choices as XML
153 definitions = new Definitions();
154 serviceTemplate = new TServiceTemplate();
155 serviceTemplate.setTopologyTemplate(topologyTemplate);
156 definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
158 StringWriter choicesAsXMLString = new StringWriter();
160 marshaller.marshal(definitions, choicesAsXMLString);
164 var topology = '<%=currentTopologyString.toString()%>';
165 var choices = '<%=choicesAsXMLString.toString()%>';
167 <!-- call the tc:nodeTemplateSelector tag to render the selection to graphic objects -->
168 <tc:nodeTemplateSelector choices='<%=nodeTemplateSelection%>' templateURL='<%=request.getParameter("templateURL")%>' topologyName='<%=request.getParameter("topologyName")%>'
169 topologyNamespace='<%=request.getParameter("topologyNamespace")%>' repositoryURL='<%=request.getParameter("repositoryURL")%>' stName='<%=request.getParameter("stName")%>' />
174 var message = "<%=message%>";