src/it/ht/rcs/console/entities/controller/EntityManager.as
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();
}
}
}