/**
* Copyright (c) 2013/2014, Intel Performance Learning Solutions Ltd, Intel Corporation.
*
* Licensed 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 (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.
*
**/
/**
* Contains functions which handle user actions
*
* created by Sridhar Voorakkara (vsridhar420@gmail.com)
*/
//handle click on a button on the main toolbar
function actionBtnClick(action) {
setupUserScreen();
clearMessage(); //clear any user previous feedback message
if (!userStatus().loggedIn) { //if a user is logged in
displayMessage('Please login first!');
}
else { //if no user is logged in
displayTabs(action);
var showMenuStub = function () {
$('#hiddenMenu').show();
};
$('#fullMenu').slideUp('slow', showMenuStub);
}
}
//show the tab menu
var displayTabs = function(tabName) {
var actTabs = ["prepare", "preserve", "manage", "deploy"];
actTabs.forEach(function(element, idx, array) {
var tabClass = '#'+ element + 'Tabs';
var titleClass = '#'+ element + 'Title';
if (element==tabName) {
$(tabClass).show();
$(titleClass).show();
}
else {
$(tabClass).hide();
$(titleClass).hide();
}
});
};
//creates a new business process on the server
var createBP = function (bpName) {
displayWait();
//post data to server
var url = 'plan/businessprocess/'+userStatus().user+'/'+bpName + '/create';
var qs = "op=create&description="+bpName;
xmlhttpPost(url, qs, function(err, data) {
clearMessage();
toDialog(JSON.parse(data).messages, "uploadResultDialog", "Create Business Process Result");
$("#btnCreateBp").hide();
});
};
//displays the feasibility analysis result
var displayRiskResult = function(err, data) {
//alert(data.businessProcess);
var datarows = data.businessProcess.resources.resource;
var bpid = data.businessProcess.id;
createResourcesTable ('feasibilityResult', {id: bpid, resources: datarows});
clearMessage();
};
//displays selected alternate
var displayAlternate = function (bpSelect, altSelect, containerId) {
if (altSelect.selectedIndex === 0) {
return;
}
var bpId = bpSelect.options[bpSelect.selectedIndex].value;
var bpName = bpSelect.options[bpSelect.selectedIndex].text.split(" : ")[1];
var altArr = altSelect.options[altSelect.selectedIndex].text.split(" : ");
var riskName = "";
if (altArr.length > 1) {//if an alternative for a risk has been selected
riskName = altArr[1];
}
var altIdx = altSelect.options[altSelect.selectedIndex].value;
getAlternative(bpId, riskName, altIdx, function (altJson) {
var businessProcess = {id: altJson.id, 'altIdx': altIdx, name: bpName, resources: altJson.resources};
if (riskName)
businessProcess.riskName = riskName;
createResourcesTable(containerId, businessProcess);
});
};
//get cost projection
/*
var getCostProjection = function () {
var bp = getResourceJson();
var qs = "op=get-cost";
qs = qs + "&data=" + JSON.stringify(bp);
displayWait();
//post data to server
xmlhttpPost('plan', qs, displayRecommendation);
};
*/
//save resources with costing inputs to the server
var saveResources = function () {
var bp = getResourceJson();
var qs = "op=save-resources";
qs = qs + "&data=" + JSON.stringify(bp);
displayWait();
//post data to server
var url = 'plan/resources/'+userStatus().user;
xmlhttpPost(url, qs, function(err, data) {
clearMessage();
toDialog(JSON.parse(data).messages, "resSaveResult", "Resource Save Result");
});
};
//setup contents of a tab
var setupTab = function (action, tabIdx) {
if (action=='prepare') {
if (tabIdx == 0)
return;
if (tabIdx == 1)
setupFeasibilityAnalysisTab();
if (tabIdx == 2)
setupArtifactTab();
if (tabIdx == 3)
setupManageMetaTab();
}
};
//setup feasibility analysis tab
var setupFeasibilityAnalysisTab = function () {
getBpList(function (bplist) {
bpselect = document.getElementById('caBpSelect');
populateBpSelectList(bpselect, bplist);
$('#artifactTabl').html('');
$('#artifactForm').html('');
});
};
//setup artifact tab
var setupArtifactTab = function () {
getBpList(function (bplist) {
bpselect = document.getElementById('bpListPrepArt');
populateBpSelectList(bpselect, bplist);
$('#artifactTabl').html('');
$('#artifactForm').html('');
});
};
//get artifacts for a business process and display on screen
var loadArtifactTable = function (bpId, containerid) {
if (bpId=='') {
$('#'+containerid).html('');
return;
}
getArtifacts(bpId, function(arts) {
if (!arts)
arts = [];
var artlist = {businessProcessId:bpId, artifacts:arts};
createArtifactTable(containerid, artlist);
$('#artifactForm').html('');
});
};
//setup manage metadata tab
var setupManageMetaTab = function () {
getBpList(function (bplist) {
bpselect = document.getElementById('bpListPrepMeta');
populateBpSelectList(bpselect, bplist);
});
};
//show the toolbar
function showFullMenu() {
$('#hiddenMenu').hide();
$('#fullMenu').slideDown('slow');
}
function saveBpDoc(theform, waitImgContainer, resultDialog) {
var bpId = "";
var docType = "";
bpId = theform.bpSelect.value;
for (var i=0; i<theform.elements.length; i++){
if (theform.elements[i].name == "docType") {
if (theform.elements[i].checked) {
docType = theform.elements[i].value;
}
}
}
var url = "uiapi/businessprocess/"+bpId+"/docupload/"+docType;
performAjaxSubmit(url, theform, waitImgContainer, resultDialog);
}
//Ajax submit of a form with file field (for file upload)
function performAjaxSubmit(url, theform, waitImgContainer, resultDialog) {
$("#"+waitImgContainer).show(); //show wait image
//append form data to be submitted
var formdata = new FormData();
var bpId = "";
var docType = "";
for (var i=0; i<theform.elements.length; i++){
if (theform.elements[i].name == "bpSelect") {
bpId = theform.elements[i].value;
}
if (theform.elements[i].name == "docType") {
if (theform.elements[i].checked) {
docType = theform.elements[i].value;
}
}
if (theform.elements[i].type === "text" || theform.elements[i].type === "hidden") {
formdata.append(theform.elements[i].name, theform.elements[i].value);
}
if (theform.elements[i].type === "radio") {
if (theform.elements[i].checked) {
formdata.append(theform.elements[i].name, theform.elements[i].value);
}
}
if (theform.elements[i].type === "file") {
formdata.append(theform.elements[i].name, theform.elements[i].files[0]);
}
}
//add the user
formdata.append('user', userStatus().user);
var xhr = new XMLHttpRequest();
xhr.open("POST",url , true);
//add an event handler
xhr.onload = function(e) {
$("#"+waitImgContainer).hide();
if (this.status == 200) { //success response
var messages = JSON.parse(this.responseText).messages;
var msg = "<ul style='text-align:left'>";
for (var i = 0; i < messages.length; i++) {
msg = msg + "<li>" + messages[i].message + "</li>";
}
msg = msg + "</ul>";
$("#"+resultDialog).html(msg);
$("#"+resultDialog).dialog({autoOpen: false, title: 'Document upload result', width: 'auto', modal: true,
show: {effect: "blind", duration: 500}});
$("#"+resultDialog).dialog('open');
}
else //error response
alert(this.responseText);
};
xhr.send(formdata); //post the data
};
//reset the business process document upload form
var resetFileUpload = function (radio) {
var bp = document.getElementById("bpSelect").value;
radio.form.reset();
document.getElementById("bpSelect").value = bp;
radio.checked = true;
};
//display events for a business process
var populateHistoryPanel = function (bpName, container) {
getEvents(bpName, function(data) {
buildHistoryTable(data, container);
});
};
//display cost detail
var showCostDetail = function () {
toDialog([], 'resSaveResult', 'Cost breakdown');
};