/** * @Author: Diego Ponce de Leon * @Date: Julio 2008 */ package net.xinterface.managers { import net.xinterface.utils.ArrayUtils; public class CacheManager { private var cache:Array; private var searchParamName:String; /** Constructor: pSearchParamName es la propiedad * por la que se indentificarán los objetos de almacenados en caché */ public function CacheManager(pSearchParamName:String) { cache = new Array; searchParamName = pSearchParamName; } /** Añade un item a la caché si no existía (true). Si ya existía devuelve false */ public function Add(pItem:*):Boolean { var isNotHere:Boolean = true; cache.forEach( function(it:*, index:int, arr:Array):void { if(it[searchParamName] == pItem[searchParamName]) { isNotHere = false; } } ); if(isNotHere) { cache.push(pItem); } return isNotHere; } /** Elimina un item de la caché si existía (true). En caso contrario devuelve false. */ public function Remove(pItem:*):Boolean { var isHere:Boolean = false; cache.forEach( function(it:*, index:int, arr:Array):void { if(it[searchParamName] == pItem[searchParamName]) { isHere = true; ArrayUtils.Pop(cache, it); } } ); return isHere; } /** Busca dentro de la caché, comparando pParam con el identificador especificado en el constructor, en cada item * Si lo encuentra devuelve el item, en caso contrario, devuelve null */ public function GetData(pParam:*):* { var dataObj:* = null; cache.forEach( function(it:*, index:int, arr:Array):void { if(it[searchParamName] == pParam) { dataObj = it; } } ); return dataObj; } /** Traza el identificador especificado en el contructor, de cada item de la caché */ public function TraceData():void { trace(""); cache.forEach( function(it:*, index:int, arr:Array):void { trace(searchParamName + ":", it[searchParamName]); } ); trace("-------------------------\nTotal items:", cache.length); trace(""); } } }