agentItemsReferenceTracker.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /********************************************************************************************************************************
  2. * Licensed Materials - Property of IBM *
  3. * *
  4. * IBM Cognos Products: AGS *
  5. * *
  6. * (C) Copyright IBM Corp. 2005, 2008 *
  7. * *
  8. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *
  9. *********************************************************************************************************************************/
  10. /**
  11. this holds on to how many agent items of a particular type there are
  12. */
  13. function AgentItemsReferenceTracker(){
  14. this.agentItemRefs = new Object();
  15. }
  16. AgentItemsReferenceTracker.prototype.toString = function(){
  17. var state = "\n ******* topic references *******\n";
  18. for(var modelItem in this.agentItemRefs){
  19. state += modelItem + " (" + this.agentItemRefs[modelItem] + " references)\n";
  20. }
  21. return state
  22. }
  23. AgentItemsReferenceTracker.prototype.addReference = function(modelItem){
  24. var count = 0;
  25. if(this.agentItemRefs[modelItem]){
  26. count = this.agentItemRefs[modelItem];
  27. }
  28. this.agentItemRefs[modelItem] = ++count;
  29. }
  30. AgentItemsReferenceTracker.prototype.addReferences = function(modelItems){
  31. for(var i = 0; modelItems && modelItems.length && i < modelItems.length; i++){
  32. this.addReference(modelItems[i]);
  33. }
  34. }
  35. /*
  36. call the tree to delete removed references. an optional text_edit_action
  37. accompanies to allow text changes to be bundled with the agent item changes and tracked
  38. */
  39. AgentItemsReferenceTracker.prototype.removeReferences = function(modelItems){
  40. var deleted_items = new Array();
  41. for(var i = 0; modelItems && modelItems.length && i < modelItems.length; i++){
  42. var deleted_item = this.removeReference(modelItems[i]);
  43. if(deleted_item){
  44. deleted_items.push(deleted_item);
  45. }
  46. }
  47. return deleted_items;
  48. }
  49. AgentItemsReferenceTracker.prototype.removeReference = function(modelItem){
  50. var count = 0;
  51. var deleted_item;
  52. if(this.agentItemRefs[modelItem]){
  53. count = this.agentItemRefs[modelItem];
  54. if(count > 1){
  55. this.agentItemRefs[modelItem] = --count;
  56. }else if(count == 1){
  57. delete this.agentItemRefs[modelItem];
  58. //call to the agentItems tree
  59. //deleted_item = deleteDataItem(modelItem);
  60. }else{
  61. //this is probably bad
  62. alert("warning: ags count for model item " + modelItem + " is now " + count);
  63. }
  64. }
  65. return deleted_item;
  66. }
  67. AgentItemsReferenceTracker.prototype.countReferences = function(modelItem){
  68. var count = 0;
  69. if(this.agentItemRefs[modelItem]){
  70. count = this.agentItemRefs[modelItem];
  71. }
  72. return count;
  73. }
  74. AgentItemsReferenceTracker.prototype.getReferencedModelItems = function(modelItem){
  75. var modelItems = new Array();
  76. for(var modelItem in this.agentItemRefs){
  77. if(modelItem && this.agentItemRefs[modelItem] > 0){
  78. modelItems.push(modelItem);
  79. }
  80. }
  81. return modelItems;
  82. }