summaryrefslogtreecommitdiffstats
path: root/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates
diff options
context:
space:
mode:
Diffstat (limited to 'winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates')
-rw-r--r--winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/nodeTemplateRenderer.tag266
-rw-r--r--winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/caps.tag33
-rw-r--r--winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqs.tag33
-rw-r--r--winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqsorcaps.tag63
4 files changed, 395 insertions, 0 deletions
diff --git a/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/nodeTemplateRenderer.tag b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/nodeTemplateRenderer.tag
new file mode 100644
index 0000000..16bc737
--- /dev/null
+++ b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/nodeTemplateRenderer.tag
@@ -0,0 +1,266 @@
+<%--
+/*******************************************************************************
+ * Copyright (c) 2012-2013 University of Stuttgart.
+ * 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:
+ * Uwe Breitenbücher - skeletton for node template shapes
+ * Oliver Kopp - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+--%>
+<%@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."%>
+<%-- Parameters --%>
+
+<%-- template and palette --%>
+<%@attribute name="client" required="true" description="IWineryRepository" type="org.eclipse.winery.common.interfaces.IWineryRepository"%>
+<%@attribute name="repositoryURL" required="true" type="java.lang.String" description="The URL of winery's repository"%>
+<%@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."%>
+<%@attribute name="relationshipTypes" description="the known relationship types" required="true" type="java.util.Collection"%>
+
+<%-- only for topology modeler --%>
+<%@attribute name="nodeTemplate" type="org.eclipse.winery.model.tosca.TNodeTemplate"%>
+<%@attribute name="top"%>
+<%@attribute name="left"%>
+
+<%-- only for palette.jsp --%>
+<%@attribute name="nodeType" type="org.eclipse.winery.model.tosca.TNodeType" %>
+<%@attribute name="nodeTypeQName" type="javax.xml.namespace.QName"%>
+
+<%@tag import="org.eclipse.winery.model.tosca.TArtifactTemplate"%>
+<%@tag import="org.eclipse.winery.model.tosca.TArtifactType"%>
+<%@tag import="org.eclipse.winery.model.tosca.TCapability"%>
+<%@tag import="org.eclipse.winery.model.tosca.TDeploymentArtifact"%>
+<%@tag import="org.eclipse.winery.model.tosca.TDeploymentArtifacts"%>
+<%@tag import="org.eclipse.winery.model.tosca.TEntityType.PropertiesDefinition"%>
+<%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate"%>
+<%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate.Capabilities"%>
+<%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate.Requirements"%>
+<%@tag import="org.eclipse.winery.model.tosca.TNodeTemplate.Policies"%>
+<%@tag import="org.eclipse.winery.model.tosca.TNodeType"%>
+<%@tag import="org.eclipse.winery.model.tosca.TPolicy"%>
+<%@tag import="org.eclipse.winery.model.tosca.TRelationshipType"%>
+<%@tag import="org.eclipse.winery.model.tosca.TRequirement"%>
+<%@tag import="org.eclipse.winery.common.ModelUtilities"%>
+<%@tag import="org.eclipse.winery.common.Util"%>
+<%@tag import="org.eclipse.winery.common.ids.definitions.ArtifactTemplateId"%>
+<%@tag import="org.eclipse.winery.common.ids.definitions.ArtifactTypeId"%>
+<%@tag import="org.eclipse.winery.common.interfaces.IWineryRepository"%>
+<%@tag import="org.w3c.dom.Element" %>
+<%@tag import="org.apache.commons.configuration.Configuration"%>
+<%@tag import="org.apache.commons.lang3.StringUtils"%>
+<%@tag import="org.apache.commons.lang3.StringEscapeUtils"%>
+<%@tag import="java.io.StringWriter" %>
+<%@tag import="java.util.Collections"%>
+<%@tag import="java.util.Collection"%>
+<%@tag import="java.util.Iterator"%>
+<%@tag import="java.util.List"%>
+<%@tag import="java.util.Map"%>
+<%@tag import="java.util.UUID"%>
+<%@tag import="javax.xml.namespace.QName"%>
+<%@tag import="javax.xml.transform.OutputKeys"%>
+<%@tag import="javax.xml.transform.Transformer"%>
+<%@tag import="javax.xml.transform.TransformerFactory"%>
+<%@tag import="javax.xml.transform.dom.DOMSource"%>
+<%@tag import="javax.xml.transform.stream.StreamResult"%>
+
+<%@taglib prefix="nt" tagdir="/WEB-INF/tags/common/templates/nodetemplates" %>
+<%@taglib prefix="ntrq" tagdir="/WEB-INF/tags/common/templates/nodetemplates/reqscaps" %>
+<%@taglib prefix="pol" tagdir="/WEB-INF/tags/common/policies" %>
+<%@taglib prefix="props" tagdir="/WEB-INF/tags/common/templates" %>
+
+<%
+ String visualElementId;
+
+ boolean paletteMode;
+ if (nodeTemplate == null) {
+ // we are in palette mode
+ // --> we render a template to be inserted in the drawing area by drag'n'drop
+ paletteMode = true;
+ assert(nodeType != null);
+ assert(nodeTypeQName != null);
+
+ // these values are only pseudo values, they get all overwritten in drop function of palette.jsp
+ visualElementId = UUID.randomUUID().toString();
+ left = "0";
+ top = "0";
+ } else {
+ // we render a real node template
+ paletteMode = false;
+ nodeTypeQName = nodeTemplate.getType();
+ nodeType = client.getType(nodeTypeQName, TNodeType.class);
+ if (nodeType == null) {
+%>
+ <script>vShowError("Could not get node type <%=nodeTypeQName%>");</script>
+<%
+ return;
+ }
+
+ visualElementId = nodeTemplate.getId();
+ }
+
+ String nodeTypeCSSName = Util.makeCSSName(nodeTypeQName);
+%>
+
+ <div class="NodeTemplateShape unselectable <%=nodeTypeCSSName%> <%if (paletteMode){%> hidden<%}%>" id="<%=visualElementId%>" style="left: <%=left%>px; top: <%=top%>px">
+ <div class="headerContainer">
+ <img class="icon" onerror="var that=this; require(['winery-common-topologyrendering'], function(wct){wct.imageError(that);});" src="<%=repositoryURL%>/nodetypes/<%=Util.DoubleURLencode(nodeTypeQName)%>/visualappearance/50x50" />
+ <%
+ String name;
+ if (paletteMode) {
+ name = ""; // will be changed on drop
+ } else {
+ name = nodeTemplate.getName();
+ if (StringUtils.isEmpty(name)) {
+ name = visualElementId;
+ }
+ }
+ %>
+ <div class="minMaxInstances">
+ <span class="minInstances"><%
+ if (!paletteMode) {
+ %><%=Util.renderMinInstances(nodeTemplate.getMinInstances())%><%
+ }
+ %></span>
+ <span class="maxInstances"><%
+ if (!paletteMode) {
+ %><%=Util.renderMaxInstances(nodeTemplate.getMaxInstances())%><%
+ }
+ %></span>
+ </div>
+ <div class="id nodetemplate"><%=visualElementId%></div>
+ <div class="name nodetemplate"><%=name%></div>
+ <div class="type nodetemplate"><%=Util.qname2hrefWithName(repositoryURL, TNodeType.class, nodeTypeQName, nodeType.getName())%></div>
+ <span class="typeQName hidden"><%=nodeTypeQName%></span>
+ <span class="typeNamespace hidden"><%=nodeTypeQName.getNamespaceURI()%></span>
+ </div>
+ <div class="endpointContainer">
+ <%
+ for (TRelationshipType relationshipType: (Collection<TRelationshipType>) relationshipTypes) {
+ %>
+ <div class="connectorEndpoint <%=Util.makeCSSName(relationshipType.getTargetNamespace(), relationshipType.getName())%>">
+ <div class="connectorBox <%=Util.makeCSSName(relationshipType.getTargetNamespace(), relationshipType.getName())%>_box"></div>
+ <div class="connectorLabel"><%=relationshipType.getName()%></div>
+ </div>
+ <%
+ }
+ %>
+ </div>
+
+ <%-- Properties --%>
+ <props:properties
+ propertiesDefinition="<%=nodeType.getPropertiesDefinition()%>"
+ wpd="<%=ModelUtilities.getWinerysPropertiesDefinition(nodeType)%>"
+ template="<%=paletteMode ? null : nodeTemplate %>"
+ pathToImages="${topologyModelerURI}images/" />
+
+ <%-- Deployment Artifacts --%>
+
+ <%
+ List<TDeploymentArtifact> deploymentArtifacts;
+ if (paletteMode) {
+ deploymentArtifacts = Collections.emptyList();
+ } else {
+ TDeploymentArtifacts tDeploymentArtifacts = nodeTemplate.getDeploymentArtifacts();
+ if (tDeploymentArtifacts == null) {
+ deploymentArtifacts = Collections.emptyList();
+ } else {
+ deploymentArtifacts = tDeploymentArtifacts.getDeploymentArtifact();
+ }
+ }
+ // Render even if (deploymentArtifacts.isEmpty()), because user could add some with drag'n'drop
+
+ // following is required to render artifact specific content
+ TransformerFactory transFactory = TransformerFactory.newInstance();
+ Transformer transformer = transFactory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ %>
+
+ <div class="deploymentArtifactsContainer">
+
+ <div class="header">Deployment Artifacts</div>
+ <div class="content">
+ <%
+ if (!paletteMode) {
+ for (TDeploymentArtifact deploymentArtifact : deploymentArtifacts) {
+ %>
+ <div class="deploymentArtifact row" onclick="showDeploymentArtifactInformation('<%=visualElementId%>', '<%=deploymentArtifact.getName()%>');">
+ <textarea class="hidden"><%=org.eclipse.winery.common.Util.getXMLAsString(org.eclipse.winery.model.tosca.TDeploymentArtifact.class, deploymentArtifact)%></textarea>
+ <div class="col-xs-4 overflowhidden deploymentArtifact name"><%=deploymentArtifact.getName()%></div>
+ <div class="col-xs-4 overflowhidden artifactTemplate"><%
+ QName artifactRef;
+ if ((artifactRef = deploymentArtifact.getArtifactRef()) != null) {
+ ArtifactTemplateId atId = new ArtifactTemplateId(artifactRef);
+ %><%=client.getName(atId)%><%
+ }
+ %></div>
+ <div class="col-xs-4 overflowhidden artifactType"><%
+ ArtifactTypeId atyId = new ArtifactTypeId(deploymentArtifact.getArtifactType());
+ %><%=client.getName(atyId)%></div>
+ </div>
+ <%
+ }
+ }
+ %>
+
+ <div class="row addDA">
+ <button class="btn btn-default btn-xs center-block addDA">Add new</button>
+ </div>
+
+ <div class="row addnewartifacttemplate">
+ <div class="center-block">Drop to add new deployment artifact. Not yet implemented.</div>
+ </div>
+ </div>
+ </div>
+
+ <%-- Requirements and Capabilities --%>
+ <%
+ List<TRequirement> reqList;
+ if (paletteMode) {
+ reqList = null;
+ } else {
+ Requirements reqs = nodeTemplate.getRequirements();
+ if (reqs == null) {
+ reqList = null;
+ } else {
+ reqList = reqs.getRequirement();
+ }
+ }
+ %>
+ <ntrq:reqs list="<%=reqList%>" repositoryURL="${repositoryURL}" pathToImages="${topologyModelerURI}images/" client="${client}" />
+
+ <%
+ List<TCapability> capList;
+ if (paletteMode) {
+ capList = null;
+ } else {
+ Capabilities caps = nodeTemplate.getCapabilities();
+ if (caps == null) {
+ capList = null;
+ } else {
+ capList = caps.getCapability();
+ }
+ }
+ %>
+ <ntrq:caps list="<%=capList%>" repositoryURL="${repositoryURL}" pathToImages="${topologyModelerURI}images/" client="${client}"/>
+
+ <%-- Policies --%>
+ <%
+ List<TPolicy> policyList;
+ if (paletteMode) {
+ policyList = null;
+ } else {
+ Policies policies = nodeTemplate.getPolicies();
+ if (policies == null) {
+ policyList = null;
+ } else {
+ policyList = policies.getPolicy();
+ }
+ }
+ %>
+ <pol:policies list="<%=policyList%>" repositoryURL="${repositoryURL}" />
+</div>
diff --git a/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/caps.tag b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/caps.tag
new file mode 100644
index 0000000..af70ff6
--- /dev/null
+++ b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/caps.tag
@@ -0,0 +1,33 @@
+<%--
+/*******************************************************************************
+ * Copyright (c) 2012-2013 University of Stuttgart.
+ * 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:
+ * Oliver Kopp - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+--%>
+<%@tag description="Renders the list of requirements or capabilties" pageEncoding="UTF-8"%>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@taglib prefix="nt" tagdir="/WEB-INF/tags/common/templates/nodetemplates/reqscaps" %>
+
+<%@attribute name="client" required="true" description="IWineryRepository" type="org.eclipse.winery.common.interfaces.IWineryRepository"%>
+<%@attribute name="list" required="false" type="java.util.List"%>
+<%@attribute name="repositoryURL" required="true" %>
+<%@attribute name="pathToImages" required="true" description="The path (URI path) to the image/ url, where xml.png is available. Has to end with '/'"%>
+
+<nt:reqsorcaps
+ headerLabel="Capabilities"
+ cssClassPrefix="capabilities"
+ list="${list}"
+ shortName="Cap"
+ TReqOrCapTypeClass="<%=org.eclipse.winery.model.tosca.TCapabilityType.class%>"
+ repositoryURL="${repositoryURL}"
+ typeURLFragment="capabilitytypes"
+ pathToImages="${pathToImages}"
+ client="${client}"
+/>
diff --git a/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqs.tag b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqs.tag
new file mode 100644
index 0000000..473443e
--- /dev/null
+++ b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqs.tag
@@ -0,0 +1,33 @@
+<%--
+/*******************************************************************************
+ * Copyright (c) 2012-2013 University of Stuttgart.
+ * 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:
+ * Oliver Kopp - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+--%>
+<%@tag description="Renders the list of requirements or capabilties" pageEncoding="UTF-8"%>
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@taglib prefix="nt" tagdir="/WEB-INF/tags/common/templates/nodetemplates/reqscaps" %>
+
+<%@attribute name="client" required="true" description="IWineryRepository" type="org.eclipse.winery.common.interfaces.IWineryRepository"%>
+<%@attribute name="list" required="false" type="java.util.List"%>
+<%@attribute name="repositoryURL" required="true" %>
+<%@attribute name="pathToImages" required="true" description="The path (URI path) to the image/ url, where xml.png is available. Has to end with '/'"%>
+
+<nt:reqsorcaps
+ headerLabel="Requirements"
+ cssClassPrefix="requirements"
+ list="${list}"
+ shortName="Req"
+ TReqOrCapTypeClass="<%=org.eclipse.winery.model.tosca.TRequirementType.class%>"
+ repositoryURL="${repositoryURL}"
+ typeURLFragment="requirementtypes"
+ pathToImages="${pathToImages}"
+ client="${client}"
+/>
diff --git a/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqsorcaps.tag b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqsorcaps.tag
new file mode 100644
index 0000000..6046730
--- /dev/null
+++ b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/WEB-INF/tags/common/templates/nodetemplates/reqscaps/reqsorcaps.tag
@@ -0,0 +1,63 @@
+<%--
+/*******************************************************************************
+ * Copyright (c) 2012-2014 University of Stuttgart.
+ * 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:
+ * Oliver Kopp - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+--%>
+<%@tag description="Renders the list of requirements or capabilties" pageEncoding="UTF-8"%>
+
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@taglib prefix="wc" uri="http://www.eclipse.org/winery/functions"%>
+<%@taglib prefix="nt" tagdir="/WEB-INF/tags/common/templates/nodetemplates/reqscaps" %>
+<%@taglib prefix="props" tagdir="/WEB-INF/tags/common/templates" %>
+
+<%@attribute name="list" required="false" type="java.util.List" %>
+<%@attribute name="headerLabel" required="true" description="Used for the heading" %>
+<%@attribute name="cssClassPrefix" required="true" %>
+<%@attribute name="TReqOrCapTypeClass" required="true" type="java.lang.Class" %>
+<%@attribute name="repositoryURL" required="true" %>
+<%@attribute name="typeURLFragment" required="true" description="requirementtypes|capabilitytypes"%>
+<%@attribute name="shortName" required="true" description="Used for diag id, function name suffix, Req|Cap"%>
+<%@attribute name="client" required="true" description="IWineryRepository" type="org.eclipse.winery.common.interfaces.IWineryRepository"%>
+<%@attribute name="pathToImages" required="true" description="The path (URI path) to the image/ url, where xml.png is available. Has to end with '/'"%>
+
+<%@tag import="org.eclipse.winery.common.ModelUtilities"%>
+
+<div class="${cssClassPrefix}Container">
+ <div class="header">${headerLabel}</div>
+ <div class="content">
+ <c:forEach var="item" items="${list}">
+ <div class="reqorcap ${cssClassPrefix} row" id="${item.id}">
+ <div class="col-xs-4 id reqorcap">${item.id}</div>
+ <div class="col-xs-4 name reqorcap">${item.name}</div>
+ <div class="col-xs-4 type reqorcap">${wc:qname2href(repositoryURL, TReqOrCapTypeClass, item.type)}</div>
+ <c:set var="type" value="${wc:getType(client, item.type, TReqOrCapTypeClass)}" />
+ <props:properties
+ template="${item}"
+ propertiesDefinition="${type.propertiesDefinition}"
+ wpd="${wc:winerysPropertiesDefinition(type)}"
+ pathToImages="${pathToImages}" />
+ </div>
+ </c:forEach>
+ <div class="addnewreqorcap row" style="display:none;">
+ <button class="btn btn-default btn-xs center-block" onclick="showAddOrUpdateDiagFor${shortName}($(this).parent().parent().parent().parent().attr('id'));">Add new</button>
+ </div>
+ </div>
+</div>
+
+<%-- parameters: o.id, o.name, o.type, o.xml. Has to be consistent with above HTML --%>
+<script type="text/x-tmpl" id="tmpl-${shortName}">
+ <div class="reqorcap ${cssClassPrefix}" id="{%=o.id%}">
+ <div class="col-xs-4 id reqorcap">{%=o.id%}</div>
+ <div class="col-xs-4 name reqorcap">{%=o.name%}</div>
+ <div class="col-xs-4 type reqorcap">{%#require("winery-support-common").qname2href("${repositoryURL}", "${typeURLFragment}", o.type)%}</div>
+ <div id="toBeReplacedByProperties"></div>
+ </div>
+</script>