blob: c4f4580bf0a9e989dcb5780862a3446067c4abd6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* global define, module, require, exports */
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery',
'd3',
'nf.Storage',
'nf.CanvasUtils',
'nf.Client'],
function ($, d3, nfStorage, nfCanvasUtils, nfClient) {
return (nf.Snippet = factory($, d3, nfStorage, nfCanvasUtils, nfClient));
});
} else if (typeof exports === 'object' && typeof module === 'object') {
module.exports = (nf.Snippet =
factory(require('jquery'),
require('d3'),
require('nf.Storage'),
require('nf.CanvasUtils'),
require('nf.Client')));
} else {
nf.Snippet = factory(root.$,
root.d3,
root.nf.Storage,
root.nf.CanvasUtils,
root.nf.Client);
}
}(this, function ($, d3, nfStorage, nfCanvasUtils, nfClient) {
'use strict';
var config = {
urls: {
snippets: '../nifi-api/snippets',
processGroups: '../nifi-api/process-groups'
}
};
return {
/**
* Marshals snippet from the specified selection.
*
* @argument {selection} selection The selection to marshal
* @argument {string} parentGroupId The parent group id
*/
marshal: function (selection, parentGroupId) {
var snippet = {
parentGroupId: parentGroupId,
processors: {},
funnels: {},
inputPorts: {},
outputPorts: {},
remoteProcessGroups: {},
processGroups: {},
connections: {},
labels: {}
};
// go through each component and identify its type
selection.each(function (d) {
var selected = d3.select(this);
if (nfCanvasUtils.isProcessor(selected)) {
snippet.processors[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isFunnel(selected)) {
snippet.funnels[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isLabel(selected)) {
snippet.labels[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isInputPort(selected)) {
snippet.inputPorts[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isOutputPort(selected)) {
snippet.outputPorts[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isProcessGroup(selected)) {
snippet.processGroups[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isRemoteProcessGroup(selected)) {
snippet.remoteProcessGroups[d.id] = nfClient.getRevision(selected.datum());
} else if (nfCanvasUtils.isConnection(selected)) {
snippet.connections[d.id] = nfClient.getRevision(selected.datum());
}
});
return snippet;
},
/**
* Creates a snippet.
*
* @argument {object} snippet The snippet
*/
create: function (snippet) {
var snippetEntity = {
'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged(),
'snippet': snippet
};
return $.ajax({
type: 'POST',
url: config.urls.snippets,
data: JSON.stringify(snippetEntity),
dataType: 'json',
contentType: 'application/json'
});
},
/**
* Copies the snippet to the specified group and origin.
*
* @argument {string} snippetId The snippet id
* @argument {object} origin The origin
* @argument {string} destinationGroupId The destination group id
*/
copy: function (snippetId, origin, destinationGroupId) {
var copySnippetRequestEntity = {
'snippetId': snippetId,
'originX': origin.x,
'originY': origin.y,
'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged()
};
return $.ajax({
type: 'POST',
url: config.urls.processGroups + '/' + encodeURIComponent(destinationGroupId) + '/snippet-instance',
data: JSON.stringify(copySnippetRequestEntity),
dataType: 'json',
contentType: 'application/json'
});
},
/**
* Removes the specified snippet.
*
* @argument {string} snippetId The snippet id
*/
remove: function (snippetId) {
return $.ajax({
type: 'DELETE',
url: config.urls.snippets + '/' + encodeURIComponent(snippetId) + '?' + $.param({
'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged()
})
});
},
/**
* Moves the snippet into the specified group.
*
* @argument {string} snippetId The snippet id
* @argument {string} newGroupId The new group id
*/
move: function (snippetId, newGroupId) {
var moveSnippetEntity = {
'disconnectedNodeAcknowledged': nfStorage.isDisconnectionAcknowledged(),
'snippet': {
'id': snippetId,
'parentGroupId': newGroupId
}
};
return $.ajax({
type: 'PUT',
url: config.urls.snippets + '/' + encodeURIComponent(snippetId),
data: JSON.stringify(moveSnippetEntity),
dataType: 'json',
contentType: 'application/json'
});
}
};
}));