%
/*******************************************************************************
* Copyright (c) 2013 Pascal Hirmer.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and the Apache License 2.0 which both accompany this distribution,
* and are available at http://www.eclipse.org/legal/epl-v10.html
* and http://www.apache.org/licenses/LICENSE-2.0
*
* Contributors:
* Pascal Hirmer - initial API and implementation
*******************************************************************************/
/**
* This JSP calls the topology completion and handles the response.
* It is called the event handler when "Complete Topology" is selected in the EnterCompletionInformationDiag.
* There are several possible responses from the completion:
* - the topology is complete: display a success message
* - the topology is complete, several solutions exist: display dialog to choose topology solution
* - topology completion interrupted: the user has to chose inserted Node or Relationship Templates
*/
%>
<%@page import="java.io.StringWriter"%>
<%@page import="java.util.List"%>
<%@page import="java.util.Map"%>
<%@page import="javax.xml.bind.Marshaller"%>
<%@page import="javax.xml.bind.JAXBContext"%>
<%@page import="javax.xml.bind.JAXBException"%>
<%@page import="org.eclipse.winery.model.tosca.Definitions"%>
<%@page import="org.eclipse.winery.model.tosca.TEntityTemplate"%>
<%@page import="org.eclipse.winery.model.tosca.TNodeTemplate"%>
<%@page import="org.eclipse.winery.model.tosca.TServiceTemplate"%>
<%@page import="org.eclipse.winery.model.tosca.TTopologyTemplate"%>
<%@page import="org.eclipse.winery.topologymodeler.addons.topologycompleter.topologycompletion.CompletionInterface"%>
<%@taglib prefix="tc" tagdir="/WEB-INF/tags/common/topologycompletion"%>
<%
// parse Strings from the request to Boolean values
boolean stepByStep = Boolean.parseBoolean(request.getParameter("stepByStep"));
boolean restarted = Boolean.parseBoolean(request.getParameter("restarted"));
boolean overwriteTopology = Boolean.parseBoolean(request.getParameter("overwriteTopology"));
// call the topology completion component which will return a message if it was successful.
CompletionInterface completionInterface = new CompletionInterface();
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);
if (message.equals("success")) { %>
<%
} else if (message.equals("topologyComplete") && !restarted) { %>
<%
} else if (message.equals("failure")) {
%>
<%=completionInterface.getErrorMessage()%>
<%} else if (message.equals("userInteraction")) {
// a user interaction is necessary to choose RelationshipTemplates, receive
// the current topology and the choices from the CompletionInterface
// and display them via relationshipTemplateSelector.jsp
TTopologyTemplate currentTopology = completionInterface.getCurrentTopology();
List relationshipTemplateSelection = completionInterface.getRelationshipTemplateChoices();
/////////////////////////////////////////////////////
// Convert JAXB objects of the topology and the
// Relationship Templates to be chosen to XML Strings
/////////////////////////////////////////////////////
Definitions definitions = new Definitions();
TServiceTemplate serviceTemplate = new TServiceTemplate();
serviceTemplate.setTopologyTemplate(currentTopology);
definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
JAXBContext context = JAXBContext.newInstance(Definitions.class);
Marshaller marshaller = context.createMarshaller();
StringWriter currentTopologyString = new StringWriter();
marshaller.marshal(definitions, currentTopologyString);
TTopologyTemplate topologyTemplate = new TTopologyTemplate();
// add all choices to a TopologyTemplate
for (TEntityTemplate entityTemplate: relationshipTemplateSelection) {
topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(entityTemplate);
}
// get the choices as XML
definitions = new Definitions();
serviceTemplate = new TServiceTemplate();
serviceTemplate.setTopologyTemplate(topologyTemplate);
definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
context = JAXBContext.newInstance(Definitions.class);
StringWriter choicesAsXMLString = new StringWriter();
marshaller.marshal(definitions, choicesAsXMLString);
%>
<%} else if (message.equals("userTopologySelection")) {
// there are several topology solutions. Receive the choices from the CompletionInterface
// and display them via topologyTemplateSelector.tag
List topologyTemplateSelection = completionInterface.getTopologyTemplateChoices();
%>
<%
} else if (message.equals("stepByStep")) {
// the topology completion is processed step-by-step. The user has to choose inserted Node and RelationshipTemplates
TTopologyTemplate currentTopology = completionInterface.getCurrentTopology();
Map>> nodeTemplateSelection = completionInterface.getNodeTemplateChoices();
///////////////////////////////////////////////
// Convert JAXB objects of the topology and the
// Templates to be chosen to XML Strings
///////////////////////////////////////////////
Definitions definitions = new Definitions();
TServiceTemplate serviceTemplate = new TServiceTemplate();
serviceTemplate.setTopologyTemplate(currentTopology);
definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
JAXBContext context = JAXBContext.newInstance(Definitions.class);
Marshaller marshaller = context.createMarshaller();
StringWriter currentTopologyString = new StringWriter();
marshaller.marshal(definitions, currentTopologyString);
// add all choices to a TopologyTemplate
TTopologyTemplate topologyTemplate = new TTopologyTemplate();
for (TNodeTemplate nodeTemplate: nodeTemplateSelection.keySet()) {
Map> entityTemplates = nodeTemplateSelection.get(nodeTemplate);
for (TNodeTemplate entity: entityTemplates.keySet()) {
topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(entity);
topologyTemplate.getNodeTemplateOrRelationshipTemplate().addAll(entityTemplates.get(entity));
}
topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(nodeTemplate);
}
// get the choices as XML
definitions = new Definitions();
serviceTemplate = new TServiceTemplate();
serviceTemplate.setTopologyTemplate(topologyTemplate);
definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);
StringWriter choicesAsXMLString = new StringWriter();
marshaller.marshal(definitions, choicesAsXMLString);
%>
<%}
%>