2 /*******************************************************************************
3 * Copyright (c) 2012-2013 University of Stuttgart.
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 * Uwe Breitenbücher - skeletton for node template shapes
12 * Oliver Kopp - initial API and implementation and/or initial documentation
13 *******************************************************************************/
15 <%@tag language="java" pageEncoding="UTF-8" description="This tag is used for both real nodeTemplate node rendering and rendering of a 'template' used to create a nodeTemplateShape. The latter is called by palette.jsp. Therefore, this tag has to be more general."%>
18 <%-- template and palette --%>
19 <%@attribute name="client" required="true" description="IWineryRepository" type="org.eclipse.winery.common.interfaces.IWineryRepository"%>
20 <%@attribute name="repositoryURL" required="true" type="java.lang.String" description="The URL of winery's repository"%>
21 <%@attribute name="topologyModelerURI" required="false" type="java.lang.String" description="The URL of winery topology modeler's URI - required for images/. Has to end with '/'. Can be left blank."%>
22 <%@attribute name="relationshipTypes" description="the known relationship types" required="true" type="java.util.Collection"%>
24 <%-- only for topology modeler --%>
25 <%@attribute name="nodeTemplate" type="org.eclipse.winery.model.tosca.TNodeTemplate"%>
26 <%@attribute name="top"%>
27 <%@attribute name="left"%>
29 <%-- only for palette.jsp --%>
30 <%@attribute name="nodeType" type="org.eclipse.winery.model.tosca.TNodeType" %>
31 <%@attribute name="nodeTypeQName" type="javax.xml.namespace.QName"%>
33 <%@tag import="org.eclipse.winery.model.tosca.TArtifactTemplate"%>
34 <%@tag import="org.eclipse.winery.model.tosca.TArtifactType"%>
35 <%@tag import="org.eclipse.winery.model.tosca.TCapability"%>
36 <%@tag import="org.eclipse.winery.model.tosca.TDeploymentArtifact"%>
37 <%@tag import="org.eclipse.winery.model.tosca.TDeploymentArtifacts"%>
38 <%@tag import="org.eclipse.winery.model.tosca.TEntityType.PropertiesDefinition"%>
39 <%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate"%>
40 <%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate.Capabilities"%>
41 <%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate.Requirements"%>
42 <%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate.Policies"%>
43 <%@tag import="org.eclipse.winery.model.tosca.TNodeType"%>
44 <%@tag import="org.eclipse.winery.model.tosca.TPolicy"%>
45 <%@tag import="org.eclipse.winery.model.tosca.TRelationshipType"%>
46 <%@tag import="org.eclipse.winery.model.tosca.TRequirement"%>
47 <%@tag import="org.eclipse.winery.common.ModelUtilities"%>
48 <%@tag import="org.eclipse.winery.common.Util"%>
49 <%@tag import="org.eclipse.winery.common.ids.definitions.ArtifactTemplateId"%>
50 <%@tag import="org.eclipse.winery.common.ids.definitions.ArtifactTypeId"%>
51 <%@tag import="org.eclipse.winery.common.interfaces.IWineryRepository"%>
52 <%@tag import="org.w3c.dom.Element" %>
53 <%@tag import="org.apache.commons.configuration.Configuration"%>
54 <%@tag import="org.apache.commons.lang3.StringUtils"%>
55 <%@tag import="org.apache.commons.lang3.StringEscapeUtils"%>
56 <%@tag import="java.io.StringWriter" %>
57 <%@tag import="java.util.Collections"%>
58 <%@tag import="java.util.Collection"%>
59 <%@tag import="java.util.Iterator"%>
60 <%@tag import="java.util.List"%>
61 <%@tag import="java.util.Map"%>
62 <%@tag import="java.util.UUID"%>
63 <%@tag import="javax.xml.namespace.QName"%>
64 <%@tag import="javax.xml.transform.OutputKeys"%>
65 <%@tag import="javax.xml.transform.Transformer"%>
66 <%@tag import="javax.xml.transform.TransformerFactory"%>
67 <%@tag import="javax.xml.transform.dom.DOMSource"%>
68 <%@tag import="javax.xml.transform.stream.StreamResult"%>
70 <%@taglib prefix="nt" tagdir="/WEB-INF/tags/common/templates/nodetemplates" %>
71 <%@taglib prefix="ntrq" tagdir="/WEB-INF/tags/common/templates/nodetemplates/reqscaps" %>
72 <%@taglib prefix="pol" tagdir="/WEB-INF/tags/common/policies" %>
73 <%@taglib prefix="props" tagdir="/WEB-INF/tags/common/templates" %>
76 String visualElementId;
79 if (nodeTemplate == null) {
80 // we are in palette mode
81 // --> we render a template to be inserted in the drawing area by drag'n'drop
83 assert(nodeType != null);
84 assert(nodeTypeQName != null);
86 // these values are only pseudo values, they get all overwritten in drop function of palette.jsp
87 visualElementId = UUID.randomUUID().toString();
91 // we render a real node template
93 nodeTypeQName = nodeTemplate.getType();
94 nodeType = client.getType(nodeTypeQName, TNodeType.class);
95 if (nodeType == null) {
97 <script>vShowError("Could not get node type <%=nodeTypeQName%>");</script>
102 visualElementId = nodeTemplate.getId();
105 String nodeTypeCSSName = Util.makeCSSName(nodeTypeQName);
108 <div class="NodeTemplateShape unselectable <%=nodeTypeCSSName%> <%if (paletteMode){%> hidden<%}%>" id="<%=visualElementId%>" style="left: <%=left%>px; top: <%=top%>px">
109 <div class="headerContainer">
110 <img class="icon" onerror="var that=this; require(['winery-common-topologyrendering'], function(wct){wct.imageError(that);});" src="<%=repositoryURL%>/nodetypes/<%=Util.DoubleURLencode(nodeTypeQName)%>/visualappearance/50x50" />
114 name = ""; // will be changed on drop
116 name = nodeTemplate.getName();
117 if (StringUtils.isEmpty(name)) {
118 name = visualElementId;
122 <div class="minMaxInstances">
123 <span class="minInstances"><%
125 %><%=Util.renderMinInstances(nodeTemplate.getMinInstances())%><%
128 <span class="maxInstances"><%
130 %><%=Util.renderMaxInstances(nodeTemplate.getMaxInstances())%><%
134 <div class="id nodetemplate"><%=visualElementId%></div>
135 <div class="name nodetemplate"><%=name%></div>
136 <div class="type nodetemplate"><%=Util.qname2hrefWithName(repositoryURL, TNodeType.class, nodeTypeQName, nodeType.getName())%></div>
137 <span class="typeQName hidden"><%=nodeTypeQName%></span>
138 <span class="typeNamespace hidden"><%=nodeTypeQName.getNamespaceURI()%></span>
140 <div class="endpointContainer">
142 for (TRelationshipType relationshipType: (Collection<TRelationshipType>) relationshipTypes) {
144 <div class="connectorEndpoint <%=Util.makeCSSName(relationshipType.getTargetNamespace(), relationshipType.getName())%>">
145 <div class="connectorBox <%=Util.makeCSSName(relationshipType.getTargetNamespace(), relationshipType.getName())%>_box"></div>
146 <div class="connectorLabel"><%=relationshipType.getName()%></div>
155 propertiesDefinition="<%=nodeType.getPropertiesDefinition()%>"
156 wpd="<%=ModelUtilities.getWinerysPropertiesDefinition(nodeType)%>"
157 template="<%=paletteMode ? null : nodeTemplate %>"
158 pathToImages="${topologyModelerURI}images/" />
160 <%-- Deployment Artifacts --%>
163 List<TDeploymentArtifact> deploymentArtifacts;
165 deploymentArtifacts = Collections.emptyList();
167 TDeploymentArtifacts tDeploymentArtifacts = nodeTemplate.getDeploymentArtifacts();
168 if (tDeploymentArtifacts == null) {
169 deploymentArtifacts = Collections.emptyList();
171 deploymentArtifacts = tDeploymentArtifacts.getDeploymentArtifact();
174 // Render even if (deploymentArtifacts.isEmpty()), because user could add some with drag'n'drop
176 // following is required to render artifact specific content
177 TransformerFactory transFactory = TransformerFactory.newInstance();
178 Transformer transformer = transFactory.newTransformer();
179 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
180 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
183 <div class="deploymentArtifactsContainer">
185 <div class="header">Deployment Artifacts</div>
186 <div class="content">
189 for (TDeploymentArtifact deploymentArtifact : deploymentArtifacts) {
191 <div class="deploymentArtifact row" onclick="showDeploymentArtifactInformation('<%=visualElementId%>', '<%=deploymentArtifact.getName()%>');">
192 <textarea class="hidden"><%=org.eclipse.winery.common.Util.getXMLAsString(org.eclipse.winery.model.tosca.TDeploymentArtifact.class, deploymentArtifact)%></textarea>
193 <div class="col-xs-4 overflowhidden deploymentArtifact name"><%=deploymentArtifact.getName()%></div>
194 <div class="col-xs-4 overflowhidden artifactTemplate"><%
196 if ((artifactRef = deploymentArtifact.getArtifactRef()) != null) {
197 ArtifactTemplateId atId = new ArtifactTemplateId(artifactRef);
198 %><%=client.getName(atId)%><%
201 <div class="col-xs-4 overflowhidden artifactType"><%
202 ArtifactTypeId atyId = new ArtifactTypeId(deploymentArtifact.getArtifactType());
203 %><%=client.getName(atyId)%></div>
210 <div class="row addDA">
211 <button class="btn btn-default btn-xs center-block addDA">Add new</button>
214 <div class="row addnewartifacttemplate">
215 <div class="center-block">Drop to add new deployment artifact. Not yet implemented.</div>
220 <%-- Requirements and Capabilities --%>
222 List<TRequirement> reqList;
226 Requirements reqs = nodeTemplate.getRequirements();
230 reqList = reqs.getRequirement();
234 <ntrq:reqs list="<%=reqList%>" repositoryURL="${repositoryURL}" pathToImages="${topologyModelerURI}images/" client="${client}" />
237 List<TCapability> capList;
241 Capabilities caps = nodeTemplate.getCapabilities();
245 capList = caps.getCapability();
249 <ntrq:caps list="<%=capList%>" repositoryURL="${repositoryURL}" pathToImages="${topologyModelerURI}images/" client="${client}"/>
253 List<TPolicy> policyList;
257 Policies policies = nodeTemplate.getPolicies();
258 if (policies == null) {
261 policyList = policies.getPolicy();
265 <pol:policies list="<%=policyList%>" repositoryURL="${repositoryURL}" />