From fa49e78cc199526a9e33b59c5194f8e3bf0f0952 Mon Sep 17 00:00:00 2001 From: huangjian Date: Wed, 31 Aug 2016 16:47:33 +0800 Subject: Add winery source code Change-Id: I1c5088121d79b71098c3cba1996c6f784737532e Issue-id: TOSCA-49 Signed-off-by: huangjian --- .../main/webapp/js/winery-topologymodeler-AMD.js | 234 +++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 winery/org.eclipse.winery.topologymodeler/src/main/webapp/js/winery-topologymodeler-AMD.js (limited to 'winery/org.eclipse.winery.topologymodeler/src/main/webapp/js/winery-topologymodeler-AMD.js') diff --git a/winery/org.eclipse.winery.topologymodeler/src/main/webapp/js/winery-topologymodeler-AMD.js b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/js/winery-topologymodeler-AMD.js new file mode 100644 index 0000000..a292f43 --- /dev/null +++ b/winery/org.eclipse.winery.topologymodeler/src/main/webapp/js/winery-topologymodeler-AMD.js @@ -0,0 +1,234 @@ +/******************************************************************************* + * Copyright (c) 2012-2015 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 + *******************************************************************************/ + +/** + * This file contains supporting functions for the topoplogy modeler + */ +define( + // although XMLWriter ist not an AMD module, requirejs does not complain when loading it + ["winery-support-common", "XMLWriter"], + function (w) { + // has to be consistent with {@link org.eclipse.winery.common.constants.Namespaces} + var TOSCA_NAMESPACE = "http://docs.oasis-open.org/tosca/ns/2011/12"; + var TOSCA_WINERY_EXTENSIONS_NAMESPACE ="http://www.opentosca.org/winery/extensions/tosca/2013/02/12"; + + var topologyTemplateURL; + + var module = { + save: save, + setTopologyTemplateURL: function(url) { + topologyTemplateURL = url; + }, + getTopologyTemplateAsXML: getTopologyTemplateAsXML, + + TOSCA_NAMESPACE: TOSCA_NAMESPACE, + TOSCA_WINERY_EXTENSIONS_NAMESPACE: TOSCA_WINERY_EXTENSIONS_NAMESPACE + }; + return module; + + function writeReqOrCaps(elements, xmlw, globalWrapperElementName, singleElementWrapperName) { + if (elements.length != 0) { + xmlw.writeStartElement(globalWrapperElementName); + + $.each(elements, function(i,e) { + xmlw.writeStartElement(singleElementWrapperName); + e = $(e); + xmlw.writeAttributeString("id", e.children(".id").text()); + xmlw.writeAttributeString("name", e.children(".name").text()); + writeType(xmlw, e.children(".type").children("a").data("qname")); + savePropertiesFromDivToXMLWriter(e.children("div.propertiesContainer"), xmlw); + xmlw.writeEndElement(); + }); + + xmlw.writeEndElement(); + } + + } + + /** + * "doSave" + */ + function save() { + $("#saveBtn").button('loading'); + + $.ajax({ + url: topologyTemplateURL, + type: "PUT", + contentType: 'text/xml', + data: getTopologyTemplateAsXML(false), + success: function(data, textStatus, jqXHR) { + $("#saveBtn").button('reset'); + vShowSuccess("successfully saved."); + }, + error: function(jqXHR, textStatus, errorThrown) { + $("#saveBtn").button('reset'); + vShowAJAXError("Could not save", jqXHR, errorThrown); + } + }); + } + + /** + * Creates an XML String of the modelled topology template. + */ + function getTopologyTemplateAsXML(needsDefinitionsTag) { + + var xmlw = new XMLWriter("utf-8"); + xmlw.writeStartDocument(); + + if (needsDefinitionsTag) { + xmlw.writeStartElement("Definitions"); + xmlw.writeAttributeString("xmlns", TOSCA_NAMESPACE); + xmlw.writeAttributeString("xmlns:winery", TOSCA_WINERY_EXTENSIONS_NAMESPACE); + + xmlw.writeStartElement("ServiceTemplate"); + xmlw.writeAttributeString("xmlns", TOSCA_NAMESPACE); + xmlw.writeAttributeString("xmlns:winery", TOSCA_WINERY_EXTENSIONS_NAMESPACE); + } + xmlw.writeStartElement("TopologyTemplate"); + xmlw.writeAttributeString("xmlns", TOSCA_NAMESPACE); + xmlw.writeAttributeString("xmlns:winery", TOSCA_WINERY_EXTENSIONS_NAMESPACE); + $("div.NodeTemplateShape").not(".hidden").each (function() { + xmlw.writeStartElement("NodeTemplate"); + + var id = $(this).attr("id"); + + var headerContainer = $(this).children("div.headerContainer"); + var name = headerContainer.children("div.name").text(); + var typeQNameStr = headerContainer.children("span.typeQName").text(); + var minmaxdiv = headerContainer.children("div.minMaxInstances"); + var min = minmaxdiv.children("span.minInstances").text(); + var max = minmaxdiv.children("span.maxInstances").text(); + if (max == "∞") { + max = "unbounded"; + } + var x = $(this).css("left"); + x = x.substring(0, x.indexOf("px")); + var y = $(this).css("top"); + y = y.substring(0, y.indexOf("px")); + + xmlw.writeAttributeString("id", id); + if (name != "") { + xmlw.writeAttributeString("name", name); + } + writeType(xmlw, typeQNameStr); + if (min != "") { + xmlw.writeAttributeString("minInstances", min); + } + if (max != "") { + xmlw.writeAttributeString("maxInstances", max); + } + xmlw.writeAttributeString("winery:x", x); + xmlw.writeAttributeString("winery:y", y); + + /** Properties **/ + savePropertiesFromDivToXMLWriter($(this).children("div.propertiesContainer"), xmlw); + + /** Requirements **/ + writeReqOrCaps( + $(this).children("div.requirementsContainer").children("div.content").children("div.reqorcap"), + xmlw, + "Requirements", + "Requirement"); + + /** Capabilities **/ + writeReqOrCaps( + $(this).children("div.capabilitiesContainer").children("div.content").children("div.reqorcap"), + xmlw, + "Capabilities", + "Capability"); + + /** Policies **/ + w.writeCollectionDefinedByATextArea(xmlw, + $(this).children("div.policiesContainer").children("div.content").children("div.policy"), + "Policies"); + + /** Deployment Artifacts **/ + var das = $(this).children("div.deploymentArtifactsContainer").children("div.content").children("div.deploymentArtifact"); + if (das.length != 0) { + xmlw.writeStartElement("DeploymentArtifacts"); + das.each(function(i,e) { + // the textarea contains a valid deployment artifact xml + var xml = $(e).children("textarea").val(); + xmlw.writeXML(xml); + }); + xmlw.writeEndElement(); + } + + // End: Nodetemplate + xmlw.writeEndElement(); + }); + jsPlumb.select().each(function(connection) { + xmlw.writeStartElement("RelationshipTemplate"); + var id = connection.id; + var typeQNameStr = connection.getType()[0]; + + var connData = winery.connections[id]; + if (!connData) { + vShowError("Error in the internal data structure: Id " + id + " not found"); + return; + } + + xmlw.writeAttributeString("id", connData.id); + if (connData.name != "") { + xmlw.writeAttributeString("name", connData.name); + } + writeType(xmlw, typeQNameStr); + + if (typeof connData.propertiesContainer !== "undefined") { + savePropertiesFromDivToXMLWriter(connData.propertiesContainer, xmlw); + } + + xmlw.writeStartElement("SourceElement"); + if (connData.req) { + // conn starts at a requirement + xmlw.writeAttributeString("ref", connData.req); + } else { + // conn starts at a node template + xmlw.writeAttributeString("ref", connection.sourceId); + } + xmlw.writeEndElement(); + xmlw.writeStartElement("TargetElement"); + if (connData.cap) { + // conn ends at a capability + xmlw.writeAttributeString("ref", connData.cap); + } else { + // conn ends at a node template + xmlw.writeAttributeString("ref", connection.targetId); + } + xmlw.writeEndElement(); + + xmlw.writeEndElement(); + }); + + if (needsDefinitionsTag) { + xmlw.writeEndElement(); + xmlw.writeEndElement(); + } + + xmlw.writeEndDocument(); + + return xmlw.flush(); + } + + function writeQNameAttribute(w, nsPrefix, qnameStr) { + var qname = getQName(qnameStr); + w.writeAttributeString("xmlns:" + nsPrefix, qname.namespace); + w.writeAttributeString("type", nsPrefix + ":" + qname.localName); + } + + function writeType(w, typeQNameStr) { + writeQNameAttribute(w, "ty", typeQNameStr); + } + + } +); + -- cgit 1.2.3-korg