Name
global.PlannedTaskStateManagement
Description
No description available
Script
var PlannedTaskStateManagement = Class.create();
PlannedTaskStateManagement.Rank = {};
PlannedTaskStateManagement.Rank['undefined'] = 0;
PlannedTaskStateManagement.Rank[PlannedTaskStateUtil.PENDING_STATES] = 1;
PlannedTaskStateManagement.Rank[PlannedTaskStateUtil.OPEN_STATES] = 2;
PlannedTaskStateManagement.Rank[PlannedTaskStateUtil.WORK_IN_PROGRESS] = 3;
PlannedTaskStateManagement.Rank[PlannedTaskStateUtil.CLOSE_STATES] = 4;
PlannedTaskStateManagement.prototype = {
initialize: function(task, topTask, siblings) {
this.task = task;
this.topTask = topTask;
if ( JSUtil.nil(siblings) ) {
this.siblings = function() {
var nexter = {};
nexter.next = function() { return false; };
return nexter;
};
}
else
this.siblings = siblings;
this.topTaskStateUtil = new PlannedTaskStateUtil(this.topTask);
this.topTaskBucket = this.topTaskStateUtil.getBucketForState(this.topTask.state);
this.taskStates = {};
},
manageStateChange: function(isDeleted) {
if ( isDeleted )
return this._manageStateChangeDeletedTask();
else {
return this._manageStateChangeTask();
}
},
_manageStateChangeTask: function() {
var eventualBucket;
var stateUtil = new PlannedTaskStateUtil(this.task);
this.taskBucket = stateUtil.getBucketForState(this.task.state);
if ( this.task.state == this.topTask.state && this.taskBucket == this.topTaskBucket ) {
return this.topTask.state;
}
if ( this.taskBucket == this.topTaskBucket ) {
if ( this.topTaskStateUtil.isDefaultState(this.topTask.state) )
return this.topTask.state;
}
eventualBucket = this.taskBucket;
return this._findState(eventualBucket, false);
},
_manageStateChangeDeletedTask: function() {
var eventualBucket = "undefined";//this.topTaskBucket;
return this._findState(eventualBucket, true);
},
_findState: function(eventualBucket, isDeleted) {
var siblingRecords = this.siblings.call();
var taskStateUtil, bucket, openTasksExists = false, hasSiblings = false;
while ( siblingRecords.next() ) {
hasSiblings = true;
taskStateUtil = new PlannedTaskStateUtil(siblingRecords);
bucket = taskStateUtil.getBucketForState(siblingRecords.state);
if ( bucket != PlannedTaskStateUtil.CLOSE_STATES )
openTasksExists = true;
if ( this.rank(bucket) > this.rank(eventualBucket) )
eventualBucket = bucket;
this.pushTaskStates(bucket, siblingRecords.getValue('state'));
}
if ( !isDeleted && !openTasksExists ) { //there are no open tasks, make sure the input task is open
if ( this.taskBucket != PlannedTaskStateUtil.CLOSE_STATES )
openTasksExists = true;
}
if ( !isDeleted && !hasSiblings ) //new node is inserted
eventualBucket = this.taskBucket;
if ( isDeleted && !hasSiblings ) //the only task is deleted
eventualBucket = this.topTaskBucket;
if ( eventualBucket == PlannedTaskStateUtil.CLOSE_STATES && openTasksExists ) //reset to WIP if there are openTasks
eventualBucket = PlannedTaskStateUtil.WORK_IN_PROGRESS;
if ( !isDeleted )
this.pushTaskStates(this.taskBucket, this.task.getValue('state'));
return this.getEventualState(eventualBucket);
},
rank: function(bucket) {
return PlannedTaskStateManagement.Rank[bucket];
},
pushTaskStates: function(bucket, state) {
if ( this.taskStates[bucket] == undefined )
this.taskStates[bucket] = [];
if ( this.taskStates[bucket].indexOf(state) < 0 )
this.taskStates[bucket].push(state);
},
getEventualState: function(bucket) {
if ( this.taskStates[bucket] == undefined ) {
return this.topTaskStateUtil.getDefaultStateForBucket(bucket);
}
var states = this.taskStates[bucket];
if ( states.length == 1 )
return this.topTaskStateUtil.getValidStateForBucket(bucket, states[0]);
else
return this.topTaskStateUtil.getDefaultStateForBucket(bucket);
},
type: 'PlannedTaskStateManagement'
};
Sys ID
bb7bda4e37311200455726877e41f145