Merge "Fix build errors in autorelease full clean build"
[vfc/nfvo/wfengine.git] / winery / org.eclipse.winery.topologymodeler / src / main / webapp / jsp / topologyCompletion / topologyCompletion.jsp
1 <%
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
9  *
10  * Contributors:
11  *    Pascal Hirmer - initial API and implementation
12  *******************************************************************************/
13
14 /**
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
21  */
22 %>
23
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"%>
36
37 <%@taglib prefix="tc"   tagdir="/WEB-INF/tags/common/topologycompletion"%>
38
39 <%
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"));
44
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);
48
49         if (message.equals("success")) { %>
50                 <script> vShowSuccess('Completion Successful!'); </script>
51         <%
52         } else if (message.equals("topologyComplete") && !restarted) { %>
53                 <script>
54                         vShowSuccess('The topology is already complete.');
55                 </script>
56         <%
57         } else if (message.equals("failure")) {
58                 %>
59                 <p> <%=completionInterface.getErrorMessage()%> </p>
60         <%} else if (message.equals("userInteraction")) {
61
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
65
66                         TTopologyTemplate currentTopology = completionInterface.getCurrentTopology();
67                         List<TEntityTemplate> relationshipTemplateSelection = completionInterface.getRelationshipTemplateChoices();
68
69                         /////////////////////////////////////////////////////
70                         // Convert JAXB objects of the topology and the
71                         // Relationship Templates to be chosen to XML Strings
72                         /////////////////////////////////////////////////////
73
74                         Definitions definitions = new Definitions();
75                         TServiceTemplate serviceTemplate = new TServiceTemplate();
76
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();
82
83                         marshaller.marshal(definitions, currentTopologyString);
84
85                         TTopologyTemplate topologyTemplate = new TTopologyTemplate();
86
87                         // add all choices to a TopologyTemplate
88                         for (TEntityTemplate entityTemplate: relationshipTemplateSelection) {
89                                 topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(entityTemplate);
90                         }
91
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();
99
100                         marshaller.marshal(definitions, choicesAsXMLString);
101                 %>
102                 <script>
103                         var topology = "<%=currentTopologyString.toString()%>";
104                         var choices = "<%=choicesAsXMLString.toString()%>";
105                 </script>
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();
113         %>
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")%>' />
117         <%
118         } else if (message.equals("stepByStep")) {
119
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();
123
124                 ///////////////////////////////////////////////
125                 // Convert JAXB objects of the topology and the
126                 // Templates to be chosen to XML Strings
127                 ///////////////////////////////////////////////
128
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();
136
137                 marshaller.marshal(definitions, currentTopologyString);
138
139                 // add all choices to a TopologyTemplate
140                 TTopologyTemplate topologyTemplate = new TTopologyTemplate();
141
142                 for (TNodeTemplate nodeTemplate: nodeTemplateSelection.keySet()) {
143                         Map<TNodeTemplate, List<TEntityTemplate>> entityTemplates = nodeTemplateSelection.get(nodeTemplate);
144
145                         for (TNodeTemplate entity: entityTemplates.keySet()) {
146                                 topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(entity);
147                                 topologyTemplate.getNodeTemplateOrRelationshipTemplate().addAll(entityTemplates.get(entity));
148                         }
149                         topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(nodeTemplate);
150                 }
151
152                 // get the choices as XML
153                 definitions = new Definitions();
154                 serviceTemplate = new TServiceTemplate();
155                 serviceTemplate.setTopologyTemplate(topologyTemplate);
156                 definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
157
158                 StringWriter choicesAsXMLString = new StringWriter();
159
160                 marshaller.marshal(definitions, choicesAsXMLString);
161
162                 %>
163                 <script>
164                         var topology = '<%=currentTopologyString.toString()%>';
165                         var choices = '<%=choicesAsXMLString.toString()%>';
166                 </script>
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")%>' />
170         <%}
171 %>
172
173 <script>
174         var message = "<%=message%>";
175 </script>