hackedteam/rcs-console-library

View on GitHub
src/it/ht/rcs/console/entities/controller/EntityManager.as

Summary

Maintainability
Test Coverage
package it.ht.rcs.console.entities.controller
{
  import flash.events.Event;
  import flash.net.FileReference;
  
  import it.ht.rcs.console.DB;
  import it.ht.rcs.console.ObjectUtils;
  import it.ht.rcs.console.agent.controller.AgentManager;
  import it.ht.rcs.console.agent.model.Agent;
  import it.ht.rcs.console.controller.ItemManager;
  import it.ht.rcs.console.dashboard.controller.DashboardController;
  import it.ht.rcs.console.entities.model.Entity;
  import it.ht.rcs.console.entities.model.Position;
  import it.ht.rcs.console.entities.model.Position_attr;
  import it.ht.rcs.console.operation.model.Operation;
  import it.ht.rcs.console.push.PushController;
  import it.ht.rcs.console.push.PushEvent;
  import it.ht.rcs.console.search.controller.SearchManager;
  
  import mx.collections.ArrayCollection;
  import mx.collections.ListCollectionView;
  import mx.events.CollectionEvent;
  import mx.rpc.events.FaultEvent;
  import mx.rpc.events.ResultEvent;

  public class EntityManager extends ItemManager
  {

    public function EntityManager()
    {
      super(Entity);
      PushController.instance.addEventListener(PushEvent.ENTITY, onEntityPush);
    }

    private static var _instance:EntityManager = new EntityManager();

    public static function get instance():EntityManager
    {
      return _instance;
    }

    
    public function listenPush():void
    {
      PushController.instance.addEventListener( PushEvent.ENTITY, onEntityPush);
    }
    public function unlistenPush():void
    {
      PushController.instance.removeEventListener( PushEvent.ENTITY, onEntityPush);
    }
    
    
    override public function refresh():void
    {
      super.refresh();
      DB.instance.entity.all(onResult);
    }

    public function show(_id:String, onResult:Function = null):void
    {
      DB.instance.entity.show(_id, function(re:ResultEvent):void
      {
        var e:Entity = getItem(_id);

        if (e == null)
          addItem(re.result);
        SearchManager.instance.showItem(_id);

        if (onResult != null)
          onResult(re);
      }, function(fe:FaultEvent):void
      {
        SearchManager.instance.showItem(_id);
      });
    }

    public function addPhoto(fileReference:FileReference, id:String, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.add_photo(fileReference, id, onResult, onFault)
    }

    public function addPhotoFromGrid(entityId:String, gridId:String, targetId:String, onResult:Function, onFault:Function = null):void
    {
      DB.instance.entity.add_photo_from_grid(entityId, gridId, targetId, onResult, onFault)
    }

    public function deletePhoto(entityId:String, photoId:String, onResult:Function, onFault:Function = null):void
    {
      DB.instance.entity.delete_photo(entityId, photoId, onResult, onFault)

    }

    public function addHandle(entityId:String, handle:String, handleName:String, handleType:String, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.add_handle(entityId, handle, handleName, handleType, onResult, onFault)

    }

    public function addLink(entity1:String, entity2:String, type:String, versus:String, rel:int, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.add_link(entity1, entity2, type, versus, rel, onResult, onFault)
    }
    
    public function updatePosition(entity:Entity, position:Position, position_attr:Position_attr, onResult:Function = null, onFault:Function = null):void
    {
      var entityToHash:Object = {}
      entityToHash.position = {latitude:position.latitude, longitude: position.longitude}
      entityToHash.position_attr = {accuracy:position_attr.accuracy}
      DB.instance.entity.update(entity, entityToHash)
    }

    public function editLink(entity1:String, entity2:String, type:String, versus:String, rel:int, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.edit_link(entity1, entity2, type, versus, rel, onResult, onFault)
    }

    public function deleteLink(entity1:String, entity2:String, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.del_link(entity1, entity2, onResult, onFault)
    }

    public function deleteHandle(entityId:String, handleId:String, onResult:Function, onFault:Function = null):void
    {
      DB.instance.entity.del_handle(entityId, handleId, onResult, onFault)

    }

    public function mostContacted(entityId:String, from:String, to:String, num:String, onResult:Function, onFault:Function = null):void
    {
      DB.instance.entity.most_contacted(entityId, from, to, num, onResult, onFault);
    }
    
    public function mostVisitedUrls(entityId:String, from:String, to:String, num:String, onResult:Function, onFault:Function = null):void
    {
      DB.instance.entity.most_visited_urls(entityId, from, to, num, onResult, onFault);
    }
    
    public function mostVisitedPlaces(entityId:String, from:String, to:String, num:String, onResult:Function, onFault:Function = null):void
    {
      DB.instance.entity.most_visited_places(entityId, from, to, num, onResult, onFault);
    }
    
    public function promoteToTarget(entityId:String, onResult:Function=null, onFault:Function = null):void
    {
      DB.instance.entity.promote_to_target(entityId, onResult, onFault);
    }
      

    private function onEntityPush(e:PushEvent):void
    {
      trace("EntityPush")
     // EntityManager.instance.show(e.data.id as String);

        //EntityManager.instance.refresh();
        //EntityManager.instance.dispatchEvent(new Event(e.data.action));
      
      var entity:Entity;
      switch (e.data.action)
      {
        case PushEvent.CREATE:
          trace("entity creation");
          var position_attr:Position_attr=new Position_attr(e.data.changes.position_attr)
          e.data.changes.position_attr=position_attr;
          var position:Position=new Position(e.data.changes.position)
          e.data.changes.position=position;
          entity=new Entity(e.data.changes);
          if(!getItem(e.data.id))
          addItem(entity);
          break;
        
        
        case PushEvent.MODIFY:
          trace("entity update");
          entity = getItem(e.data.id)
          if(!entity)
            return;
          _items.removeEventListener(CollectionEvent.COLLECTION_CHANGE, onItemsChange);

          if(e.data.changes.position)
          {
            e.data.changes.position=new Position(e.data.changes.position);
          }
          
          for(var property:String in e.data.changes)
          {
            if(entity[property])
            entity[property]= e.data.changes[property];
          }
          _items.addEventListener(CollectionEvent.COLLECTION_CHANGE, onItemsChange);
          break;
        
        
        case PushEvent.DESTROY:
          trace("entity deletion");
          _items.removeEventListener(CollectionEvent.COLLECTION_CHANGE, onItemsChange);
          removeItem(getItem(e.data.id))
          _items.addEventListener(CollectionEvent.COLLECTION_CHANGE, onItemsChange);
          break;
      }
     
    }

    public function getEntityById(id:String):Entity
    {
      var lcv:ListCollectionView = getView();
      
      for (var i:int = 0; i < lcv.length; i++) {
        var entity:Entity = lcv.getItemAt(i) as Entity
        
        if (entity._id == id) {
          return entity;
        }
      }
      
      return null
    }
    
    public function getEntityByTarget(targetId:String):Entity
    {
      var lcv:ListCollectionView = getView();

      for (var i:int = 0; i < lcv.length; i++) {
        var entity:Entity = lcv.getItemAt(i) as Entity

        if (entity.path.getItemAt(entity.path.length - 1) == targetId) {
          return entity;
        }
      }

      return null
    }

    public function addEntity(entity:Entity, o:Operation, callback:Function):void
    {
      var entityToHash:Object = ObjectUtils.toHash(entity);
      entityToHash.position = ObjectUtils.toHash(entity.position);
      entityToHash.position_attr = ObjectUtils.toHash(entity.position_attr);
      DB.instance.entity.create(entityToHash, o, function(e:ResultEvent):void
      {
        var entity:Entity = e.result as Entity;
        addItem(entity);
        refresh()
        SearchManager.instance.showItem(entity._id);
        callback(entity);
      });
    }

    public function merge(entity1:Entity, entity2:Entity, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.merge(entity1._id, entity2._id, function(e:ResultEvent):void
      {
        DB.instance.entity.all(onResult);
      }, onFault)
    }
    
    public function flow(entities:Array, from:String, to:String,  onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.flow(entities, from, to, onResult, onFault);
    }
    
    public function positions(entities:Array, from:String, to:String,  summary:Boolean, onResult:Function = null, onFault:Function = null):void
    {
      DB.instance.entity.positions(entities, from, to, summary, onResult, onFault);
    }

    override protected function onItemUpdate(event:*):void
    {
      var property:Object = new Object();
      property[event.property] = event.newValue is ArrayCollection ? event.newValue.source : event.newValue;
      DB.instance.entity.update(event.source, property);
    }

    override protected function onItemRemove(item:*):void
    {
      DB.instance.entity.destroy(item._id);
    }

    private function onResult(e:ResultEvent):void
    {
      clear();
      for each (var item:* in e.result.source)
        addItem(item);
      dispatchDataLoadedEvent();
    }

  }

}