/******************************************************************************************************************************** * Licensed Materials - Property of IBM * * * * IBM Cognos Products: AGS * * * * (C) Copyright IBM Corp. 2005, 2008 * * * * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. * *********************************************************************************************************************************/ /** this holds on to how many agent items of a particular type there are */ function AgentItemsReferenceTracker(){ this.agentItemRefs = new Object(); } AgentItemsReferenceTracker.prototype.toString = function(){ var state = "\n ******* topic references *******\n"; for(var modelItem in this.agentItemRefs){ state += modelItem + " (" + this.agentItemRefs[modelItem] + " references)\n"; } return state } AgentItemsReferenceTracker.prototype.addReference = function(modelItem){ var count = 0; if(this.agentItemRefs[modelItem]){ count = this.agentItemRefs[modelItem]; } this.agentItemRefs[modelItem] = ++count; } AgentItemsReferenceTracker.prototype.addReferences = function(modelItems){ for(var i = 0; modelItems && modelItems.length && i < modelItems.length; i++){ this.addReference(modelItems[i]); } } /* call the tree to delete removed references. an optional text_edit_action accompanies to allow text changes to be bundled with the agent item changes and tracked */ AgentItemsReferenceTracker.prototype.removeReferences = function(modelItems){ var deleted_items = new Array(); for(var i = 0; modelItems && modelItems.length && i < modelItems.length; i++){ var deleted_item = this.removeReference(modelItems[i]); if(deleted_item){ deleted_items.push(deleted_item); } } return deleted_items; } AgentItemsReferenceTracker.prototype.removeReference = function(modelItem){ var count = 0; var deleted_item; if(this.agentItemRefs[modelItem]){ count = this.agentItemRefs[modelItem]; if(count > 1){ this.agentItemRefs[modelItem] = --count; }else if(count == 1){ delete this.agentItemRefs[modelItem]; //call to the agentItems tree //deleted_item = deleteDataItem(modelItem); }else{ //this is probably bad alert("warning: ags count for model item " + modelItem + " is now " + count); } } return deleted_item; } AgentItemsReferenceTracker.prototype.countReferences = function(modelItem){ var count = 0; if(this.agentItemRefs[modelItem]){ count = this.agentItemRefs[modelItem]; } return count; } AgentItemsReferenceTracker.prototype.getReferencedModelItems = function(modelItem){ var modelItems = new Array(); for(var modelItem in this.agentItemRefs){ if(modelItem && this.agentItemRefs[modelItem] > 0){ modelItems.push(modelItem); } } return modelItems; }