RLOpenCatalyst/core

View on GitHub
client/cat3/src/partials/sections/dashboard/workzone/orchestration/popups/newTaskCtrl.js

Summary

Maintainability
F
6 days
Test Coverage
/* Copyright (C) Relevance Lab Private Limited- All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
 * Written by Relevance UI Team,
 * Aug 2015
 */

(function (angular) {
    'use strict';
    angular.module('workzone.orchestration')
        .controller('newTaskCtrl', ['chefSelectorComponent', '$scope', '$modalInstance', 'items', '$modal', 'arrayUtil', 'workzoneServices', 'responseFormatter', '$rootScope', '$q', 'genericServices', function (chefSelectorComponent, $scope, $modalInstance, items, $modal, arrayUtil, workzoneServices, responseFormatter, $rootScope, $q, genericServices) {

            $scope.role={
                name : ''
            };
            $scope.isNewTaskPageLoading = true;
            $scope.isScriptInstanceLoading = true;
            $scope.chefrunlist = [];
            $scope.cookbookAttributes = [];
            $scope.scriptParamShow = false;
            $scope.scriptSelectAll = false;
            $scope.scriptParamsObj = {};
            $scope.chefJenkScriptTaskObj = {};
            $scope.cronDetails = {};
            $scope.type = 'new';
            $scope.showAddTask = false;
            $scope.isSudo = false;
            $scope.botCategoryList = [];
            workzoneServices.getBotCategoryList().then(function (catList) {
                $scope.botCategoryList=catList.data;
            });
            $scope.toggleAll = function() {
                var toggleStatus = $scope.isAllSelected;
                angular.forEach($scope.chefInstanceList, function(itm){ itm._isNodeSelected = toggleStatus;});
            };
            $scope.botStatus = function() {
                if($scope.checkBotType){
                    $scope.checkBotStatus = true;
                }else{
                    $scope.checkBotStatus = false;
                }
            };
            $scope.optionToggled = function(){
                $scope.isAllSelected = $scope.chefInstanceList.every(function(itm){ return  itm._isNodeSelected; });
            };
            $scope.toggleAllScriptInstance = function() {
                var toggleStatusInstance = $scope.isAllInstanceScriptSelected;
                angular.forEach($scope.chefInstanceList, function(itm){ itm._isNodeSelected = toggleStatusInstance; });
            };
            $scope.optionInstanceToggled = function(){
                $scope.isAllInstanceScriptSelected = $scope.chefInstanceList.every(function(itm){ return  itm._isNodeSelected; });
            };
            $scope.toggleAllScripts = function() {
                var toggleStatusScript = $scope.isAllScriptSelected;
                angular.forEach($scope.scriptTaskList, function(itm){ itm._isScriptSelected = toggleStatusScript;});
            };
            $scope.optionScriptToggled = function() {
                $scope.isAllScriptSelected = $scope.scriptTaskList.every(function(itm){ return  itm._isScriptSelected; });
            };
            //default values for new task
            angular.extend($scope, {
                taskTypes: {
                    'chef':{name:'Chef'},
                    'jenkins':{name:'Jenkins'},
                    'puppet':{name:'Puppet'},
                    'composite':{name:'Composite'},
                    'script':{name:'Script'}
                },
                parentItems:items,
                updateCookbook: function () {
                    if ($scope.chefInstanceList.length || $scope.chefBluePrintList.length) {
                        genericServices.editRunlist($scope.chefrunlist,$scope.cookbookAttributes);
                    }
                },
                changeJobURL: function () {
                    if($scope.jenkinsServerSelect && $scope.jenkinJobSelected){
                        workzoneServices.getJenkinsJobDetails($scope.jenkinsServerSelect, $scope.jenkinJobSelected).then(function (response) {
                            var data;
                            if (response.data) {
                                data = response.data;
                            } else {
                                data = response;
                            }
                            $scope.jobUrl = data.url;
                        });
                    }
                },
                changeJobList: function () {
                    if ($scope.jenkinsServerSelect) {
                        workzoneServices.getJenkinsServerJobList($scope.jenkinsServerSelect).then(function (response) {
                            if (response.data) {
                                $scope.jenkinServerJobList = response.data;
                            } else {
                                $scope.jenkinServerJobList = response;
                            }
                        });
                    }
                },
                isChefNodeAvailable: function (id) {
                    if (!$scope.isEditMode) {
                        return false;
                    } else if ($scope.taskType === "chef") {
                        return arrayUtil.isValueAvailable(items.taskConfig.nodeIds, id);
                    }
                },
                isPuppetNodeAvailable: function (id) {
                    if (!$scope.isEditMode) {
                        return false;
                    } else {
                        return arrayUtil.isValueAvailable(items.taskConfig.nodeIds, id);
                    }
                },
                addJenkinsParams: function () {
                    $modal.open({
                        templateUrl: 'src/partials/sections/dashboard/workzone/orchestration/popups/addJenkinsParams.html',
                        controller: 'addJenkinsParamsCtrl',
                        backdrop: 'static',
                        keyboard: false
                    }).result.then(function (addJenkinsParams) {
                        $scope.jenkinsParamsList.push(addJenkinsParams);
                    }, function () {
                        console.log('Dismiss time is ' + new Date());
                    });
                },
                changeNodeScriptList: function() {
                    if($scope.scriptTypeSelelct !==""){
                        workzoneServices.getScriptList($scope.scriptTypeSelelct).then(function (response) {
                            var data;
                            if (response.data) {
                                data = response.data;
                            } else {
                                data = response;
                            }
                            $scope.scriptSelectAll = true;
                            if ($scope.isEditMode && items.taskType === "script") {
                                var isScriptChecked = [];
                                for(var i =0;i<items.taskConfig.scriptDetails.length;i++){
                                    isScriptChecked.push(items.taskConfig.scriptDetails[i].scriptId);
                                    $scope.scriptTaskList = responseFormatter.identifyAvailableScript(data, isScriptChecked);
                                    $scope.scriptParamsObj[items.taskConfig.scriptDetails[i].scriptId] = items.taskConfig.scriptDetails[i].scriptParameters;
                                    $scope.isNewTaskPageLoading = false;
                                }
                            } else{
                                $scope.scriptTaskList = responseFormatter.identifyAvailableScript(data,[]);
                                $scope.isScriptInstanceLoading = false;
                            }
                        });
                    }
                },
                addScriptParams: function (scriptObject) {
                    $modal.open({
                        templateUrl: 'src/partials/sections/dashboard/workzone/orchestration/popups/addScriptParams.html',
                        controller: 'addScriptParamsCtrl',
                        backdrop: 'static',
                        keyboard: false,
                        resolve: {
                            items: function () {
                                return scriptObject;
                            }
                        }
                    }).result.then(function (addScriptParams) {
                        $scope.scriptParamsObj[scriptObject._id] = $scope.scriptParamsObj[scriptObject._id].concat(addScriptParams);
                    }, function () {
                        console.log('Dismiss time is ' + new Date());
                    });
                },
                removeJenkinsParams: function (params) {
                    var idx = $scope.jenkinsParamsList.indexOf(params);
                    $scope.jenkinsParamsList.splice(idx,1);
                },
                botTypeList : function() {
                    workzoneServices.getBotTypeList().then(function (response) {
                        $scope.botTypeList = response;
                    });
                },
                removeScriptParams: function (scriptObject,params) {
                    var idx = $scope.scriptParamsObj[scriptObject].indexOf(params);
                    $scope.scriptParamsObj[scriptObject].splice(idx,1);
                },
                removeJobLink: function (jobLink) {
                    var idx = $scope.jobResultURL.indexOf(jobLink);
                    $scope.jobResultURL.splice(idx,1);
                },
                openAddJobLink: function (type) {
                    $modal.open({
                        templateUrl: 'src/partials/sections/dashboard/workzone/orchestration/popups/addJobLinks.html',
                        controller: 'addJobLinksCtrl',
                        backdrop: 'static',
                        keyboard: false,
                        width: '600px',
                        resolve: {
                            items: function () {
                                return type;
                            }
                        }
                    }).result.then(function (addJobLink) {
                        //adding the job link in the main list.
                        $scope.jobResultURL.push(addJobLink);

                    }, function () {
                        console.log('Dismiss time is ' + new Date());
                    });
                },
                postNewTask : function(taskObj){
                    //new task creation.
                    var reqBody = {
                        taskData: taskObj
                    };
                    workzoneServices.postNewTask(reqBody).then(function () {
                        items = reqBody.taskData;
                        $rootScope.$emit('WZ_ORCHESTRATION_SHOW_LATEST');
                        $rootScope.$emit('GET_ALL_TASK');
                        $scope.taskSaving = false;
                        $modalInstance.close(items);
                    });
                },
                updateTask : function(taskObj){
                    //update task.
                    var reqBody = {
                        taskData: taskObj
                    };
                    workzoneServices.updateTask(reqBody, $scope.id).then(function () {
                        items = reqBody.taskData;
                        $rootScope.$emit('WZ_ORCHESTRATION_REFRESH_CURRENT');
                        $scope.taskSaving = false;
                        $modalInstance.close(items);
                    });
                },
                showScriptParams : function(scriptObj){
                    $scope.scriptParamShow = true;
                    $scope.selectedScript = scriptObj;
                    if(!$scope.scriptParamsObj[scriptObj._id]){
                        $scope.scriptParamsObj[scriptObj._id] = [];
                    }
                },
                addRemoveScriptTable : function(scriptObj){
                    $scope.scriptParamShow = false;
                    $scope.checkedScript = scriptObj;
                    if(!$scope.checkedScript._isScriptSelected){
                        $scope.scriptParamsObj[scriptObj._id] = [];
                    }
                },
                selectTaskCheckbox: function(){
                    if($scope._isEventSelected.flag) {
                        $scope.showAddTask = true;
                    } else {
                        $scope.showAddTask = false;
                    }
                },
                addTaskEvent : function() {
                    $modal.open({
                        templateUrl: 'src/partials/sections/dashboard/workzone/orchestration/popups/addChefJobEvent.html',
                        controller: 'addChefJobEventCtrl',
                        backdrop: 'static',
                        keyboard: false,
                        resolve: {
                            items: function () {
                                return {
                                    chefJenkScriptTaskObj:$scope.chefJenkScriptTaskObj,
                                    type:$scope.type
                                }
                            }
                        }
                    }).result.then(function (chefEventDetails) {
                        $scope.chefJenkScriptTaskObj = chefEventDetails;
                        var startTimeMinute,startTimeHour,dayOfWeek,selectedDayOfTheMonth,selectedMonth;
                        startTimeMinute = $scope.chefJenkScriptTaskObj.startTimeMinute;
                        startTimeHour = $scope.chefJenkScriptTaskObj.startTime;
                        dayOfWeek = $scope.chefJenkScriptTaskObj.dayOfWeek;
                        selectedDayOfTheMonth = $scope.chefJenkScriptTaskObj.selectedDayOfTheMonth;
                        selectedMonth = $scope.chefJenkScriptTaskObj.monthOfYear;
                        $scope.type = 'edit';
                        
                        $scope.repeatPattern = 'Repeat Every -' +  $scope.chefJenkScriptTaskObj.repeats;   
                        $scope.cronDetails = {
                            cronStartOn : $scope.chefJenkScriptTaskObj.cronStart,
                            cronEndOn : $scope.chefJenkScriptTaskObj.cronEnd,
                            cronRepeatEvery : $scope.chefJenkScriptTaskObj.repeatBy,
                            cronFrequency: $scope.chefJenkScriptTaskObj.repeats,
                            cronMinute:startTimeMinute,
                            cronHour: startTimeHour,
                            cronWeekDay:dayOfWeek,
                            cronDate: selectedDayOfTheMonth,
                            cronMonth: selectedMonth,
                            cronYear: $scope.chefJenkScriptTaskObj.monthOfYear
                        };
                    }, function () {
                        console.log('Dismiss time is ' + new Date());
                    });
                },
                clearRoleSelection : function(){
                    $scope.role.name = '';
                },
                clearBluePrintSelection : function(){
                    for(var bi = 0; bi < $scope.chefBluePrintList.length; bi++){
                        $scope.chefBluePrintList[bi]._isBlueprintSelected = false;
                    }
                },
                ok: function () {
                    //these values are common across all task types
                    var taskJSON={};
                    if($scope.checkBotType){
                        taskJSON = {
                            taskType: $scope.taskType,
                            name: $scope.name,
                            description: $scope.description,
                            botType:$scope.botType,
                            botCategory: $scope.botCategory,
                            shortDesc:$scope.shortDesc,
                            manualExecutionTime:$scope.manualExecutionTime,
                            serviceDeliveryCheck:$scope.checkBotType
                        };
                        $scope.taskSaving = true;
                    }else{
                        taskJSON = {
                            taskType: $scope.taskType,
                            name: $scope.name,
                            description: $scope.description
                        };
                        $scope.taskSaving = true;
                    }
                    //checking for name of the task
                    if (!taskJSON.name.trim()) {
                        $scope.inputValidationMsg='Please enter the name of the task.';
                        $scope.taskSaving = false;
                        return false;
                    }
                    //validating the task selections values and taking selected values from chef components
                    if ($scope.taskType === "composite") {
                        taskJSON.assignTasks = [];
                        var selectedList = compositeSelector.getSelectorList();
                        if (selectedList && selectedList.length) {
                            for (var i = 0; i < selectedList.length; i++) {
                                taskJSON.assignTasks.push(selectedList[i].data._id);
                            }
                        } else {
                            $scope.inputValidationMsg='please select atleast one job';
                            $scope.taskSaving = false;
                            return false;
                        }
                    }
                    if($scope.taskType === "chef" || $scope.taskType === "script") {
                        taskJSON.nodeIds = [];
                        taskJSON.executionOrder = $scope.isExecution.flag;
                        taskJSON.isTaskScheduled = $scope._isEventSelected.flag;
                        taskJSON.taskScheduler = $scope.cronDetails;
                        var selectedList = instanceSelector.getSelectorList();
                        if (selectedList && selectedList.length) {
                            for (var i = 0; i < selectedList.length; i++) {
                                taskJSON.nodeIds.push(selectedList[i].data);
                            }
                        }
                    }
                    /*This will get the values in order to create chef type task and check for any chef node selections*/
                    if ($scope.taskType === "chef") {
                        
                        taskJSON.blueprintIds = [];
                        taskJSON.role = $scope.role.name;
                        for(var bi = 0; bi < $scope.chefBluePrintList.length; bi++){
                            if ($scope.chefBluePrintList[bi]._isBlueprintSelected) {
                                taskJSON.blueprintIds.push($scope.chefBluePrintList[bi]._id);
                            }
                        }
                        if (!taskJSON.nodeIds.length && !taskJSON.blueprintIds.length && !taskJSON.role ) {
                            $scope.inputValidationMsg='Please select a node or blueprint or role';
                            $scope.taskSaving = false;
                            return false;
                        }
                        if (taskJSON.nodeIds.length && taskJSON.blueprintIds.length) {
                            $scope.inputValidationMsg='Please choose either nodes or blueprints or role, not all';
                            $scope.taskSaving = false;
                            return false;
                        }

                        if (taskJSON.nodeIds.length && taskJSON.role) {
                            $scope.inputValidationMsg='Please choose either nodes or blueprints or role, not all';
                            $scope.taskSaving = false;
                            return false;
                        }

                        if (taskJSON.blueprintIds.length && taskJSON.role) {
                            $scope.inputValidationMsg='Please choose either nodes or blueprints or role, not all';
                            $scope.taskSaving = false;
                            return false;
                        }

                        taskJSON.runlist = responseFormatter.formatSelectedChefRunList($scope.chefrunlist);
                        taskJSON.attributes = responseFormatter.formatSelectedCookbookAttributes($scope.cookbookAttributes);
                    }
                    /*This will get the values in order to create puppet type task and check for any puppet node selections*/
                    if ($scope.taskType === "puppet") {
                        taskJSON.nodeIds = [];
                        for (var pi = 0; pi < $scope.puppetInstanceList.length; pi++) {
                            if ($scope.puppetInstanceList[pi]._isNodeSelected) {
                                taskJSON.nodeIds.push($scope.puppetInstanceList[pi]._id);
                            }
                        }
                        if (!taskJSON.nodeIds.length) {
                            $scope.inputValidationMsg='Please select atleast one puppet node';
                            $scope.taskSaving = false;
                            return false;
                        }
                    }
                    if ($scope.taskType === "jenkins") {
                        taskJSON.jenkinsServerId = $scope.jenkinsServerSelect;
                        if (!taskJSON.jenkinsServerId.length) {
                            $scope.inputValidationMsg='Please select the Jenkins Server';
                            $scope.taskSaving = false;
                            return false;
                        }
                        taskJSON.autoSyncFlag = $scope.autoSync.flag;
                        taskJSON.jobName = $scope.jenkinJobSelected;
                        if (!taskJSON.jobName.length) {
                            $scope.inputValidationMsg='Please select one Job';
                            $scope.taskSaving = false;
                            return false;
                        }
                        taskJSON.jobURL = $scope.jobUrl;
                        if (!taskJSON.jobURL.length) {
                            $scope.inputValidationMsg='No Job Url';
                            $scope.taskSaving = false;
                            return false;
                        }
                        taskJSON.isParameterized = $scope.isParameterized.flag;
                        taskJSON.jobResultURL = $scope.jobResultURL;
                        //first time execute will get result from jobResultURLPattern.
                        taskJSON.jobResultURLPattern = taskJSON.jobResultURL;
                        taskJSON.parameterized = $scope.jenkinsParamsList;
                        taskJSON.isTaskScheduled = $scope._isEventSelected.flag;
                        taskJSON.taskScheduler = $scope.cronDetails;
                    }
                    //if task type is script
                    if ($scope.taskType === "script") {
                        taskJSON.scriptDetails = [];
                        taskJSON.isSudo = $scope.isSudo;
                        taskJSON.scriptTypeName = $scope.scriptTypeSelelct;
                        if (!taskJSON.scriptTypeName.length) {
                            $scope.inputValidationMsg='Please select one Script Type';
                            $scope.taskSaving = false;
                            return false;
                        }
                        
                        for (var k = 0; k < $scope.scriptTaskList.length; k++) {
                            if ($scope.scriptTaskList[k]._isScriptSelected) {
                                var scriptId = $scope.scriptTaskList[k]._id;
                                var obj = {
                                    scriptId: scriptId,
                                    scriptParameters:[]
                                };
                                if($scope.scriptParamsObj[scriptId]){
                                    obj.scriptParameters = $scope.scriptParamsObj[scriptId];
                                }
                                taskJSON.scriptDetails.push(obj);
                            }
                        }
                        if (!taskJSON.scriptDetails.length) {
                            $scope.inputValidationMsg = 'Please select a script';
                            $scope.taskSaving = false;
                            return false;
                        }
                    }
                    
                    //checking whether its a update or a new task creation
                    if ($scope.isEditMode) {
                        $scope.updateTask(taskJSON);
                    } else {
                        $scope.postNewTask(taskJSON);
                    }
                    $rootScope.createChefJob=false;
                },
                cancel: function () {
                    $rootScope.createChefJob=false;
                    $modalInstance.dismiss('cancel');
                }
            });
            $scope.name = "";
            $scope.shortDesc = "";
            $scope.manualExecutionTime = "";
            $scope.taskType = "chef";//default Task type selection;
            $scope.botType = "Task";//default Bot type selection;
            $scope.botCategory = 'Active Directory';
            $scope.isEditMode = false;//default edit mode is false;
            $scope.taskSaving = false;//to disable submit button, dfault false
            $scope.autoSync = {
                flag: false
            };
            $scope.isParameterized = {
                flag: false
            };
            $scope.isExecution = {
                flag: 'PARALLEL'
            };
            $scope._isEventSelected = {
                flag: false
            };
            /*in backend at the time of edit of task the jobResultUrlPattern
             was going as null. So there was in issue with the links disappearing.*/
            $scope.jobResultURLPattern = [];
            $scope.jobResultURL = [];
            $scope.jenkinsParamsList = [];
            $scope.jenkinsServerSelect = '';
            $scope.jenkinJobSelected = '';
            $scope.description = '';
            $scope.chefInstanceList = [];
            $scope.scriptTaskList = [];
            $scope.scriptTypeSelelct = '';
            $scope.chefBluePrintList = [];
            $scope.puppetInstanceList = [];
            $scope.editRunListAttributes = false;

            $rootScope.$on('WZ_ORCHESTRATION_REFRESH_CURRENT', function(event,reqParams) {
                if(reqParams) {
                    $scope.chefrunlist = reqParams.list;
                    $scope.cookbookAttributes = reqParams.cbAttributes;
                }
            });
            var compositeSelector,instanceSelector;
            workzoneServices.getEnvironmentTaskList().then(function (response) {
                var data, selectorList = [],
                    optionList = [];
                if (response.data) {
                    data = response.data;
                } else {
                    data = response;
                }
                if (items.taskType && items.taskType === "composite") {
                    for (var j = 0; j < items.taskConfig.assignTasks.length; j++) {
                        for (var i = 0; i < data.length; i++) {
                            if (items.taskConfig.assignTasks[j] === data[i]._id) {
                                selectorList.push(data[i]);
                            }
                        }
                    }
                } else {
                    selectorList = [];
                }
                optionList = data;
                var factory = chefSelectorComponent.getComponent;
                compositeSelector = new factory({
                    scopeElement: '#component_for_composite',
                    optionList: responseFormatter.formatTaskList(optionList),
                    selectorList: responseFormatter.formatTaskList(selectorList),
                    isSortList: true,
                    isSearchBoxEnable: false,
                    isOverrideHtmlTemplate: true,
                    isExcludeDataFromOption: true
                });
                $scope.isNewTaskPageLoading = false;
            });

            $scope.isTargetTypesLoading = true;
            $scope.isScriptNodesLoading = true;
            var allInstances = workzoneServices.getCurrentEnvInstances();
            $scope.allInstances=function(){
                allInstances.then(function (response) {
                    var data, selectorList = [],
                        optionList = [];
                    if (response.data) {
                        data = response.data;
                    } else {
                        data = response;
                    }

                    if (items.taskType && items.taskType === "chef" || items.taskType && items.taskType === "script") {
                        for (var j = 0; j < items.taskConfig.nodeIds.length; j++) {
                            for (var i = 0; i < data.length; i++) {
                                if (items.taskConfig.nodeIds[j] === data[i]._id) {
                                    selectorList.push(data[i]);
                                }
                            }
                        }
                    } else {
                        selectorList = [];
                    }
                    optionList = data;
                    var factory = chefSelectorComponent.getComponent;
                    instanceSelector = new factory({
                        scopeElement: '.component_for_instances',
                        optionList: responseFormatter.formatInstanceList(optionList),
                        selectorList: responseFormatter.formatInstanceList(selectorList),
                        isSortList: true,
                        isSearchBoxEnable: false,
                        isOverrideHtmlTemplate: true,
                        isExcludeDataFromOption: true
                    });
                    $scope.isNewTaskPageLoading = false;
                });
            };
             $scope.$watch('taskType', function() {
                if($scope.taskType === 'chef' || $scope.taskType === 'script'){
                    $scope.allInstances();
                }
            });

            var allBlueprints = workzoneServices.getBlueprints();
            var allRunlist = workzoneServices.getCookBookListForOrg();
            $q.all([allInstances,allBlueprints,allRunlist]).then(function(promiseObjs) {
                $scope.isTargetTypesLoading = false;
                $scope.isScriptNodesLoading = false;
                var instances = promiseObjs[0].data;
                var blueprints = promiseObjs[1].data;
                var roles = Object.keys(promiseObjs[2].data.roles);
                /*Identifying the chef nodes and adding a flag for identifying the selection in the angular checkbox selection*/
                if ($scope.taskType === "chef") {
                    if($scope.isEditMode){
                        if(items.taskConfig && items.taskConfig.role) {
                            $scope.role.name = items.taskConfig.role;
                        }
                        $scope.editRunListAttributes = true;
                        $scope.isScriptInstanceLoading = false;
                        $scope.chefInstanceList = responseFormatter.identifyAvailableChefNode(responseFormatter.getChefList    (instances), items.taskConfig.nodeIds);
                        $scope.isNewTaskPageLoading = false;
                        $scope.chefBluePrintList = responseFormatter.identifyAvailableBlueprint(responseFormatter.getBlueprintList(blueprints), items.blueprintIds);
                        $scope.chefComponentSelectorList = responseFormatter.findDataForEditValue(items.taskConfig.runlist);
                        $scope.cookbookAttributes = responseFormatter.formatSavedCookbookAttributes(items.taskConfig.attributes);
                        $scope.chefrunlist = responseFormatter.chefRunlistFormatter($scope.chefComponentSelectorList);
                        $scope.chefRoleList = roles;

                        if (items.blueprintIds.length){
                            $scope.targetType="blueprint";
                        }else if(items.taskConfig && items.taskConfig.nodeIds && items.taskConfig.nodeIds.length){
                            $scope.targetType="instance";
                        } else {
                            $scope.targetType="role";
                        }
                    }else{
                        $scope.chefInstanceList = responseFormatter.identifyAvailableChefNode(responseFormatter.getChefList(instances), []);
                        $scope.isNewTaskPageLoading = false;
                        $scope.chefBluePrintList = responseFormatter.identifyAvailableBlueprint(responseFormatter.getBlueprintList(blueprints), []);
                        $scope.chefRoleList = roles;
                        $scope.targetType="instance";
                    }
                }
                /*Identifying the Puppet nodes and adding a flag for identifying the selection in the angular checkbox selection*/
                if ($scope.isEditMode && $scope.taskType === "puppet") {
                    if ($scope.isEditMode) {
                        $scope.puppetInstanceList = responseFormatter.identifyAvailablePuppetNode(responseFormatter.getPuppetList(instances), items.taskConfig.nodeIds);
                        $scope.isNewTaskPageLoading = false;
                    } else {
                        $scope.puppetInstanceList = responseFormatter.identifyAvailablePuppetNode(responseFormatter.getPuppetList(instances), []);
                    }
                }
                /*Identifying the nodes and script list and checking for task type to be script*/
                if ($scope.taskType === "script") {
                    if($scope.isEditMode){
                        $scope.isSudo=items.taskConfig.isSudo;
                        $scope.chefInstanceList = responseFormatter.identifyAvailableChefNode(responseFormatter.getChefList(instances), items.taskConfig.nodeIds);
                        $scope.isScriptInstanceLoading = false;
                        $scope.isNewTaskPageLoading = false;
                        $scope.targetType="instance";
                    }else{
                        $scope.isSudo = false;
                        $scope.chefInstanceList = responseFormatter.identifyAvailableChefNode(responseFormatter.getChefList(instances), []);
                        $scope.isScriptInstanceLoading = false;
                        $scope.isNewTaskPageLoading = false;
                        $scope.targetType="instance";
                    }
                }
                $scope.optionToggled();
                $scope.optionInstanceToggled();
                $scope.optionScriptToggled();
            });
            workzoneServices.getJenkinsServerList().then(function (response) {
                var data;
                if (response.data) {
                    data = response.data;
                } else {
                    data = response;
                }
                $scope.jenkinsServerList = responseFormatter.formatJenkinsServerList(data);

                if ($scope.isEditMode && items.taskType === "jenkins") {
                    $scope.jenkinsServerSelect = items.taskConfig.jenkinsServerId;
                    $scope.isNewTaskPageLoading = false;
                }
                $scope.changeJobList();
                $scope.changeJobURL();
            });

            // if new task creation then we will give chef as default selection.
            if (!(typeof items === "string" && items === "new")) {
                /*common properties across all task*/
                $scope.isEditMode = true;
                $scope.id = items._id;
                $scope.description = items.description;
                $scope.taskType = items.taskType;
                $scope.name = items.name;
                if(items.serviceDeliveryCheck &&  items.serviceDeliveryCheck === true){
                    $scope.checkBotStatus = true;
                    $scope.checkBotType = true;
                    $scope.botType = items.botType;
                    $scope.botCategory = items.botCategory;
                    $scope.shortDesc = items.shortDesc;
                    $scope.manualExecutionTime = items.manualExecutionTime;
                }
                //properties specific to jenkins
                if (items.taskType === "jenkins") {
                    $scope.jobUrl = items.taskConfig.jobURL;
                    $scope.autoSync.flag = items.taskConfig.autoSyncFlag === "false" ? false : true;
                    $scope.isParameterized.flag = items.taskConfig.isParameterized;
                    $scope.jobResultURL = items.taskConfig.jobResultURL;
                    $scope.jenkinsParamsList = items.taskConfig.parameterized;
                    $scope.jenkinJobSelected = items.taskConfig.jobName;
                }
                if(items.taskType === "script") {
                    $scope.scriptTypeSelelct = items.taskConfig.scriptTypeName;
                    $scope.isNewTaskPageLoading = false;
                    $scope.changeNodeScriptList();
                }
                if(items.taskType === "chef" || items.taskType === "script") {
                    $scope.isExecution.flag = items.executionOrder;
                }
                if(items.taskType === "chef" || items.taskType === "jenkins" || items.taskType === "script") {
                    $scope._isEventSelected.flag = items.isTaskScheduled;
                    if(items.isTaskScheduled === true) {
                        $scope.showAddTask = true;
                    }
                    $scope.chefJenkScriptTaskObj = items.taskScheduler;
                    $scope.type = 'edit';
                }
            }
        }
        ]);
})(angular);