Exporting Tosca from UI
Change-Id: Ie7e58ac5bd51a56d028daa1c1e2577e7723a8297
diff --git a/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js
new file mode 100644
index 0000000..5798aca
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js
@@ -0,0 +1,79 @@
+(function () {
+ 'use strict';
+
+ /**
+ * @ngdoc service
+ * @name xos.toscaExporter.serviceGrid
+ **/
+
+ angular.module('xos.serviceGrid')
+ .service('ToscaEncoder', function($q, _, ArchiveManager, ServiceEncoder, SlicesEncoder){
+
+ let toscaSpec = {
+ tosca_definitions_version: 'tosca_simple_yaml_1_0',
+ description: '',
+ imports: [
+ 'custom_types/xos.yaml'
+ ],
+ topology_template:{
+ node_templates: {}
+ }
+ };
+
+ /**
+ * @ngdoc method
+ * @name xos.serviceGrid.ToscaEncoder#$toYml
+ * @methodOf xos.serviceGrid.ToscaEncoder
+ * @description
+ * Convert a Json data structure to Yaml, use https://github.com/nodeca/js-yaml
+ * @param {Object} item A Json object to be converted
+ * @returns {string} The Yaml representation of the Json input
+ **/
+
+ this.toYml = (item) => {
+ return jsyaml.dump(item).replace(/'/g, '');
+ };
+
+ this.export = (service) => {
+ ArchiveManager.download(service.name);
+ const file = this.toYml(toscaSpec);
+ return file;
+ };
+
+ this.serviceToTosca = service => {
+
+ ArchiveManager.createArchive();
+ //clean
+ toscaSpec.topology_template.node_templates = {};
+
+ toscaSpec.description = `Just enough Tosca to get the ${service.humanReadableName} service up and running`;
+
+ const d = $q.defer();
+
+ // build service properties
+ ServiceEncoder.formatServiceProperties(service, toscaSpec)
+ .then(spec => {
+ return SlicesEncoder.getServiceSlices(service, spec);
+ })
+ // add required slices (and it will all the slice requirements)
+ .then((spec) => {
+ return ServiceEncoder.getServiceRequirements(service, spec);
+ })
+ // add required services (provider services)
+ .then((spec) => {
+ ArchiveManager.addFile(`${service.name}_service.yaml`, this.toYml(spec));
+
+ this.export(service);
+
+ d.resolve(this.toYml(spec));
+ })
+ .catch(e => {
+ d.reject(e);
+ });
+ return d.promise;
+
+ }
+
+ });
+
+}());
\ No newline at end of file