hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/entities/view/EntitiesActionBar.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<actionbar:ActionBar xmlns:fx="http://ns.adobe.com/mxml/2009"
                                         xmlns:s="library://ns.adobe.com/flex/spark"
                                         xmlns:mx="library://ns.adobe.com/flex/mx"
                                         xmlns:editors="it.ht.rcs.console.operations.view.evidences.actionbar.editors.*"
                     
                                         xmlns:actionbar="it.ht.rcs.console.main.actionbar.*"
                                         xmlns:view="it.ht.rcs.console.entities.view.*">
  <fx:Declarations>
    <s:Parallel id="fadeIn" duration="200">
      <s:Fade alphaFrom="0" alphaTo="1"/>
  
    </s:Parallel>
    <s:Parallel id="fadeOut" duration="200">
      <s:Fade alphaFrom="1" alphaTo="0"/>
    
    </s:Parallel>
  </fx:Declarations>
  <fx:Metadata>
    [Event(name="update", type="flash.events.Event")]
    [Event(name="linkAdded", type="flash.events.Event")]
    [Event(name="linkUpdated", type="flash.events.Event")]
    [Event(name="linkRemoved", type="flash.events.Event")]
    [Event(name="entityDeleted", type="flash.events.Event")]
    [Event(name="entityCreated", type="flash.events.Event")]
    [Event(name="entityUpdated", type="flash.events.Event")]
    [Event(name="entityMerged", type="flash.events.Event")]
    [Event(name="group", type="flash.events.Event")]
    [Event(name="ungroup", type="flash.events.Event")]
    [Event(name="expandAll", type="flash.events.Event")]
    [Event(name="collapseAll", type="flash.events.Event")]
    
  </fx:Metadata>

    <actionbar:states>
        <s:State name="linkmap"/>
        <s:State name="geomap"/>
        <s:State name="list"/>
        <s:State name="table"/>
    </actionbar:states>

    <s:Button label="{R.get('NEW')}"
                        click="onNewClick()"
                        enabled="{Console.currentSession.user.is_view_profiles()}"
                        icon="@Embed('/img/NEW/newEntity.png')"
                        visible="{LicenseManager.instance.intelligence}"
                        includeInLayout="{LicenseManager.instance.intelligence}"
                        includeIn="geomap, linkmap,list, table"/>

    <s:Button label="{R.get('EDIT')}"
                        click="onEditClick()"
                        enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; selectedObjects.length==1 &amp;&amp; selectedObject is Entity &amp;&amp; hasEditPermission} "
                        icon="@Embed('/img/NEW/edit.png')"
                        includeIn="geomap, linkmap,list, table"/>

    <s:Button label="{R.get('DELETE')}"
                        click="onDeleteClick()"
                        enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; selectedObjects.length==1 &amp;&amp; selectedObject is Entity &amp;&amp; selectedObject.type!='target' &amp;&amp; hasDeletePermission}"
                        icon="@Embed('/img/NEW/delete_32.png')"
                        visible="{LicenseManager.instance.intelligence}"
                        includeInLayout="{LicenseManager.instance.intelligence}"
                        includeIn="geomap, linkmap,list, table"/>

    <s:Button label="{R.get('EXPORT')}"
                        icon="@Embed('/img/NEW/export.png')"
                        visible="{LicenseManager.instance.intelligence}"
                        click="exportEntity(event)"
                        includeInLayout="{LicenseManager.instance.intelligence}"
                        enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; exportEnabled }"
                        includeIn="geomap, linkmap,list, table"/>

    <s:Button label="{R.get('MERGE')}"
                        enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; mergeEnabled}" 
                        icon="@Embed('/img/NEW/merge32.png')"
                        visible="{LicenseManager.instance.intelligence}"
                        includeInLayout="{LicenseManager.instance.intelligence}" 
            click="onMergeClick()"
                        includeIn="linkmap"/>


    <actionbar:Separator width="20"/>

    <s:Button label="{R.get('JUMP_TO_TARGET')}"
                        click="onJumpClick()"
                        enabled="{selectedObjects.length==1 &amp;&amp; selectedObject.type=='target'}"
                        icon="@Embed('/img/NEW/jumpToTarget.png')"
                        includeIn="geomap, linkmap,list, table"/>

    <s:Button label="{R.get('JUMP_TO_EVIDENCE')}"
                        visible="{LicenseManager.instance.intelligence}"
                        includeInLayout="{LicenseManager.instance.intelligence}"
                        enabled="{jumpEnabled}"
                        icon="@Embed('/img/NEW/jumpToEvidence.png')"
                        click="jumpToEvidence()"
                        includeIn="linkmap"/>

    <actionbar:Separator width="20"/>

  <s:VGroup includeIn="linkmap, geomap" horizontalAlign="center" paddingBottom="0" paddingLeft="0" paddingRight="0" paddingTop="0">
    
  <s:HGroup verticalAlign="bottom" paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0" gap="0" buttonMode="true" useHandCursor="true"  click="{popup.displayPopUp=true}">
  <s:Button label="{R.get('LINK')}"
            visible="{LicenseManager.instance.intelligence}"
            includeInLayout="{LicenseManager.instance.intelligence}"
            enabled="{Console.currentSession.user.is_view_profiles()}"
            icon="@Embed('/img/NEW/link32.png')"
            click="{popup.displayPopUp=true}"
            includeIn="linkmap, geomap"/>
    <s:Image source="@Embed('/img/NEW/downArrow.png')"/>
  </s:HGroup>
  <s:PopUpAnchor id="popup" includeIn="linkmap, geomap">
    <s:BorderContainer backgroundAlpha="1" backgroundColor="#E6E9EE" right="0" bottom="0" mouseDownOutside="{popup.displayPopUp=false}" borderColor="0x333333" borderAlpha="0.5" cornerRadius="6" dropShadowVisible="true">
      <s:HGroup paddingBottom="4" paddingLeft="4" paddingTop="4" paddingRight="4" horizontalAlign="center" verticalAlign="middle">
        
 
      <s:Button label="{R.get('LINK_ADD')}"
                visible="{LicenseManager.instance.intelligence}"
                includeInLayout="{LicenseManager.instance.intelligence}"
                enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; this.linkEnabled==true}" iconPlacement="top" skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                icon="@Embed('/img/NEW/linkAdd.png')"
                click="addLink()"
                includeIn="linkmap, geomap" fontWeight="normal"/>
        
      
      
                    <s:Button label="{R.get('LINK_EDIT')}"
                                        visible="{LicenseManager.instance.intelligence}"
                                        includeInLayout="{LicenseManager.instance.intelligence} "
                                        enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; this.selectedObject  &amp;&amp; !this.selectedObject.name &amp;&amp; this.selectedObject.type!='identity'}"
                                        iconPlacement="top"
                                        skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                                        icon="@Embed('/img/NEW/linkEdit.png')"
                                        click="editLink()"
                                        includeIn="linkmap, geomap"
                                        fontWeight="normal"/>
        
      
      
      <s:Button label="{R.get('LINK_REMOVE')}"
                visible="{LicenseManager.instance.intelligence}"
                includeInLayout="{LicenseManager.instance.intelligence}"
                enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; this.selectedObject &amp;&amp; !this.selectedObject.name}" iconPlacement="top" skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                icon="@Embed('/img/NEW/linkRemove.png')"
                click="onDeleteLinkClick()"
                includeIn="linkmap, geomap" fontWeight="normal"/>
        
    
        
        <editors:TagEditor label="{R.get('RELEVANCE')}"
                           id="tagEditor"
                           width="80"
                           enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; this.selectedObject &amp;&amp; !this.selectedObject.name}"
                           change="updateRelevance(tagEditor.tag)"
                           tag="{selectedObject.name ? 0: selectedObject.rel}"
                           includeIn="linkmap, geomap"/>
      </s:HGroup>
    </s:BorderContainer>
  </s:PopUpAnchor>
  </s:VGroup>
    

    <actionbar:Separator includeIn="linkmap"
                                             width="20"/>
  
  <s:VGroup includeIn="linkmap" horizontalAlign="center" paddingBottom="0" paddingLeft="0" paddingRight="0" paddingTop="0">
  <s:HGroup verticalAlign="bottom" buttonMode="true" useHandCursor="true"  click="{groupPopup.displayPopUp=true}">
    <s:Button label="{R.get('GROUP')}"
              visible="{LicenseManager.instance.intelligence}"
              includeInLayout="{LicenseManager.instance.intelligence}"
              enabled="{Console.currentSession.user.is_view_profiles() }"
              icon="@Embed('/img/NEW/group32.png')"
              click="{groupPopup.displayPopUp=true}"
              includeIn="linkmap"/>

    <s:Image source="@Embed('/img/NEW/downArrow.png')" includeIn="linkmap"/>
  </s:HGroup>
   
  
  
  <s:PopUpAnchor id="groupPopup" includeIn="linkmap">
    <s:BorderContainer backgroundAlpha="1" backgroundColor="#E6E9EE" right="0" bottom="0" mouseDownOutside="{groupPopup.displayPopUp=false}" borderColor="0x333333" borderAlpha="0.5" cornerRadius="6" dropShadowVisible="true">
      <s:HGroup paddingBottom="4" paddingLeft="4" paddingTop="4" paddingRight="4" horizontalAlign="center" verticalAlign="middle">
        <s:Button label="{R.get('DO_GROUP')}"
                  visible="{LicenseManager.instance.intelligence}"
                  includeInLayout="{LicenseManager.instance.intelligence}"
                  enabled="{Console.currentSession.user.is_view_profiles() &amp;&amp; this.groupEnabled}"
                  icon="@Embed('/img/NEW/dogroup.png')" click="onGroup(event)"
                  iconPlacement="top" skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                  includeIn="linkmap"/>
        
        <s:Button label="{R.get('UNGROUP')}"
                  visible="{LicenseManager.instance.intelligence}"
                  includeInLayout="{LicenseManager.instance.intelligence}" click="onUngroup(event)"
                  icon="@Embed('/img/NEW/ungroup.png')" enabled="{Console.currentSession.user.is_view_profiles()  &amp;&amp;  this.ungroupEnabled}"
                  iconPlacement="top" skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                  includeIn="linkmap"/>
        
        <s:Button label="{R.get('EXPAND_ALL')}"
                  visible="{LicenseManager.instance.intelligence}"
                  includeInLayout="{LicenseManager.instance.intelligence}"  click="onExpandAll(event)"
                  icon="@Embed('/img/NEW/expandAll.png')" enabled="{Console.currentSession.user.is_view_profiles()}"
                  iconPlacement="top" skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                  includeIn="linkmap"/>
        
        <s:Button label="{R.get('COLLAPSE_ALL')}"
                  visible="{LicenseManager.instance.intelligence}"
                  includeInLayout="{LicenseManager.instance.intelligence}" click="onCollapseAll(event)"
                  icon="@Embed('/img/NEW/collapseAll.png')" enabled="{Console.currentSession.user.is_view_profiles()}"
                  iconPlacement="top" skinClass="it.ht.rcs.console.main.actionbar.RCSActionBarButtonSkin"
                  includeIn="linkmap"/>
        
      </s:HGroup>
    </s:BorderContainer>
  </s:PopUpAnchor>
  </s:VGroup>
  <actionbar:Separator includeIn="linkmap"
                       width="20"/>

    <s:Button label="{R.get('EXPORT_GRAPH')}"
                        icon="@Embed('/img/NEW/exportGraph.png')"
                        visible="{LicenseManager.instance.intelligence}"
                        includeInLayout="{LicenseManager.instance.intelligence}"
                        enabled="{section.stateManager.tableView.length>0}"
            click="exportGraph(event)"
                        includeIn="linkmap"/>

    <s:Spacer width="100%"/>

    <s:ButtonBar dataProvider="{viewStack}"
                             requireSelection="true"/>

    <s:TextInput id="searchInput"
                             keyUp="onKeyUp(event)"
                             removedFromStage="onRemovedFromStage()"
                             enabled="{currentState=='list' || currentState=='table'}"/>
    <fx:Metadata>
    [Event(name="update", type="flash.events.Event")]
    [Event(name="linkAdded", type="flash.events.Event")]
    [Event(name="linkRemoved", type="flash.events.Event")]
    [Event(name="entityDeleted", type="flash.events.Event")]
    [Event(name="entityCreated", type="flash.events.Event")]
    [Event(name="entityUpdated", type="flash.events.Event")]
    [Event(name="merge", type="flash.events.Event")]
    
  </fx:Metadata>
    <fx:Script>
        <![CDATA[
      import it.ht.rcs.console.entities.controller.EntityManager;
      import it.ht.rcs.console.entities.model.Entity;
      import it.ht.rcs.console.entities.model.Link;
      import it.ht.rcs.console.entities.model.LinkInfo;
      import it.ht.rcs.console.events.SectionEvent;
      import it.ht.rcs.console.monitor.controller.LicenseManager;
      import it.ht.rcs.console.search.controller.SearchManager;
      import it.ht.rcs.console.utils.AlertPopUp;
      
      import locale.R;
      
      import mx.collections.ArrayCollection;
      import mx.core.FlexGlobals;
      import mx.events.CloseEvent;
      import mx.managers.PopUpManager;
      import mx.rpc.events.FaultEvent;
      import mx.rpc.events.ResultEvent;
      


            [Bindable]
            public var section:EntitiesSection;
      
      


            [Bindable]
            public var selectedEntities:ArrayCollection;

            [Bindable]
            public var selectedObjects:Vector.<Object>;

            [Bindable]
            public var mergeEnabled:Boolean;
      
      [Bindable]
      public var linkEnabled:Boolean; //Add a link
      
      [Bindable]
      public var isLink:Boolean; 

            [Bindable]
            public var jumpEnabled:Boolean; //Jump to evidence
      
      [Bindable]
      public var exportEnabled:Boolean; //Export entities
      
      [Bindable]
      public var groupEnabled:Boolean; //Jump to evidence
      
      [Bindable]
      public var ungroupEnabled:Boolean; //Jump to evidence
      
      private function exportGraph(event:MouseEvent):void
      {
        var popup:EntityExport=PopUpManager.createPopUp(root, EntityExport, true) as EntityExport;
        popup.operation=section.stateManager.selectedOperation;
        popup.type="entitygraph";
        var ids:Array=[]
        for (var i:int=0; i < section.stateManager.tableView.length; i++)
        {
          var entity:Entity=section.stateManager.tableView.getItemAt(i) as Entity;
          ids.push(entity._id)
        }
        popup.ids=ids
        PopUpManager.centerPopUp(popup); 
      }

            private function onNewClick():void
            {
                var popup:EntityForm=PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, EntityForm, true) as EntityForm;
        popup.addEventListener(EntityForm.CLOSE, onEntityAdded)
                popup.operation=section.stateManager.selectedOperation;
                popup.entity=new Entity(Entity.defaultEntity());
                popup.currentState=EntityForm.CREATE;
                PopUpManager.centerPopUp(popup);
            }

            private function onEditClick():void
            {

                var popup:EntityForm=PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, EntityForm, true) as EntityForm;
                popup.addEventListener("update", onUpdate)
                popup.entity=selectedObject as Entity;
                popup.entity.desc=selectedObject.desc;
                popup.currentState=EntityForm.EDIT
                PopUpManager.centerPopUp(popup);
            }

            private function onJumpClick():void
            {
                var event:SectionEvent=new SectionEvent(SectionEvent.CHANGE_SECTION);
                event.section=SectionEvent.OPERATIONS;
                event.subsection='target';
                var entity:Entity=selectedObject as Entity;
                var targetId:String=entity.path[entity.path.length - 1];
                event.item=SearchManager.instance.getItem(targetId);
                FlexGlobals.topLevelApplication.dispatchEvent(event);
            }

            private function onUpdate(e:Event):void
            {
                selectedObject.name=e.currentTarget.entity.name;
                selectedObject.desc=e.currentTarget.entity.desc;

                dispatchEvent(e)
                dispatchEvent(new Event("entityUpdated"));
            }

            private function onDeleteClick():void
            {

                AlertPopUp.show(R.get('CONFIRM_ENTITY_DELETION', [selectedObject.name]), R.get('CONFIRM'), AlertPopUp.YES | AlertPopUp.NO, null, function(e:CloseEvent):void
                {
                    if (e.detail == AlertPopUp.YES)
                    {
                        EntityManager.instance.removeItem(selectedObject);
                        section.stateManager.setState("singleOperation")
            dispatchEvent(new Event("entityDeleted"));
                    }
                }, null, AlertPopUp.NO);
            }

            private function onLinkClick():void
            {
                selectedEntities=new ArrayCollection()
                var i:int;
                var entity:Entity;


                if (this.selectedObjects.length == 0 || this.selectedObjects.length == section.stateManager.view.length) //??

                { 
                    for (i=0; i < section.stateManager.view.length; i++)
                    {
                        entity=section.stateManager.view.getItemAt(i) as Entity;
                        selectedEntities.addItem(entity);
                    }
                }
                else
                {
                    for (i=0; i < this.selectedObjects.length; i++)
                    {
                        entity=selectedObjects[i] as Entity;
                        selectedEntities.addItem(entity);
                    }
                }
                section.stateManager.selectedEntities=selectedEntities;
                section.stateManager.setState("links")
            }

            private function onMapClick():void
            {
                selectedEntities=new ArrayCollection()

                for (var i:int=0; i < section.stateManager.view.length; i++)
                {
                    var entity:Entity=section.stateManager.view.getItemAt(i) as Entity;
                    selectedEntities.addItem(entity);
                }
                section.stateManager.selectedEntities=selectedEntities;
                section.stateManager.setState("map");
            }

            private function onRemovedFromStage():void
            {
                searchInput.text='';
                section.stateManager.searchField=searchInput;
                section.stateManager.view.refresh();
                section.stateManager.tableView.refresh();
            }

            private function onKeyUp(event:KeyboardEvent):void
            {
                section.stateManager.searchField=searchInput;
                section.stateManager.view.refresh();
                section.stateManager.tableView.refresh();
            }

            private function exportEntity(event:MouseEvent):void
            {
                var popup:EntityExport=PopUpManager.createPopUp(root, EntityExport, true) as EntityExport;
                popup.operation=section.stateManager.selectedOperation;
                popup.type="entity";
                var ids:Array=[];
                for (var i:int=0; i < this.selectedObjects.length; i++)
                {
                    var entity:Entity=selectedObjects[i] as Entity;
                    ids.push(entity._id);
                }
                popup.ids=ids;
                PopUpManager.centerPopUp(popup);
            }
      
      
    

            public function jumpToEvidence():void
            {
                var entity1:Entity=EntityManager.instance.getItem(selectedObject.source);
                var entity2:Entity=EntityManager.instance.getItem(selectedObject.target);

        
        var li:LinkInfo=selectedObject.info as LinkInfo;
       
        
        //getInfo(li)
        
                var temp:Array= li.getPlainList();//selectedObject.info.toString().split(",");
        var info:Array=[]
                if (entity1.type == "position" || entity2.type == "position")
                {
                    var position:Entity=entity1.type == "position" ? entity1 : entity2;
                    info.push("lon:" + position.position.longitude + ",lat:" + position.position.latitude + ",r:500")
                }
                else
                { //really needed???
                    for (var i:int=0; i <temp.length; i++)
                    {
                        info.push(temp[i]);
                    }
                }
                var targetId:String;
                if (entity1.type == "target" && entity2.type == "target")
                {
                    //open dialog
                    var popup:TargetSelectionForm=PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, TargetSelectionForm, true) as TargetSelectionForm;
                    popup.entity1=entity1;
                    popup.entity2=entity2;
                    popup.info=info;
                    popup.addEventListener("targetSelected", onTargetSelection);
                    PopUpManager.centerPopUp(popup);
                    return;
                }
                else if (entity1.type == "target" && entity2.type != "target")
                {
                    targetId=String(entity1.path.getItemAt(entity1.path.length - 1));
                }
                else if (entity2.type == "target" && entity1.type != "target")
                {
                    targetId=String(entity2.path.getItemAt(entity2.path.length - 1));
                }
                var event:SectionEvent=new SectionEvent(SectionEvent.CHANGE_SECTION);
                event.section=SectionEvent.OPERATIONS;
                event.subsection='evidence';

                event.item=SearchManager.instance.getItem(targetId);
                if (entity1.type == "position" || entity2.type == "position")
                    event.evidenceTypes=["position", "photo"];
        else if (entity1.type == "virtual" || entity2.type == "virtual")
          event.evidenceTypes=["url"];
                else
                    event.evidenceTypes=["call", "chat", "message","money"];

                event.info=info;
                //event.from=getFromTimestamp();
                //event.to=getToTimestamp();
                event.from=0;
                event.to=0; //no filter
                FlexGlobals.topLevelApplication.dispatchEvent(event);

            }

            private function onTargetSelection(e:Event):void
            {
                var targetId:String=String(e.currentTarget.selectedTarget.path.getItemAt(e.currentTarget.selectedTarget.path.length - 1));
                var event:SectionEvent=new SectionEvent(SectionEvent.CHANGE_SECTION);
                event.section=SectionEvent.OPERATIONS;
                event.subsection='evidence';
                event.item=SearchManager.instance.getItem(targetId);
        event.evidenceTypes=["call", "chat", "message", "money"];
                event.info=e.currentTarget.info;
                //event.from=getFromTimestamp();
                //event.to=getToTimestamp();
                event.from=0;
                event.to=0; //no filter
                FlexGlobals.topLevelApplication.dispatchEvent(event);
            }
      
      private function updateRelevance(value:int):void
      {
        if (selectedObject  != null && !selectedObject.name)
        {
          selectedObject.rel=value;
          
        /*  if(selectedObject is Edge)
         {
           var currentRenderer:BidirectedArrowEdgeRenderer=selectedObject.vedge.edgeView as BidirectedArrowEdgeRenderer; //TODO REMOCVE
           currentRenderer.draw();
         }
         else
         {
         trace("update geoview")
         } */

          var entity1:Entity=EntityManager.instance.getItem(selectedObject.source);
          var entity2:Entity=EntityManager.instance.getItem(selectedObject.target);
          
          trace("1: " + entity1.name);
          trace("2: " + entity2.name);
          //
          
          EntityManager.instance.editLink(entity1._id, entity2._id, selectedObject.type, selectedObject.versus, value, onLinkUpdated, null);
        }
      }
      
      private function addLink():void
      {
        var popup:LinkForm=PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, LinkForm, true) as LinkForm;
        
        var entity1:Entity;
        var entity2:Entity;
        
        if(selectedObjects[0] is Dictionary) //link view
          entity1=EntityManager.instance.getItem(selectedObjects[0].id);
        else  //geo view
          entity1=selectedObjects[0] as Entity;
        
        if(selectedObjects[1] is Dictionary)//link view
          entity2=EntityManager.instance.getItem(selectedObjects[1].id);
        else //geo view
          entity2=selectedObjects[1] as Entity;
        
      
        
        if (entity1.type == "position" && (entity2.type == "target" || entity2.type == "person"))
        {
          popup.entity1=entity2;
          popup.entity2=entity1;
          popup.versusSelectionEnabled=false;
        }
        else if (entity2.type == "position" && (entity1.type == "target" || entity1.type == "person"))
        {
          popup.entity1=entity1;
          popup.entity2=entity2;
          popup.versusSelectionEnabled=false;
        }
          
        else if (entity1.type == "virtual" && (entity2.type == "target" || entity2.type == "person"))
        {
          popup.entity1=entity2;
          popup.entity2=entity1;
          popup.versusSelectionEnabled=false;
        }
        else if (entity2.type == "virtual" && (entity1.type == "target" || entity1.type == "person"))
        {
          popup.entity1=entity1;
          popup.entity2=entity2;
          popup.versusSelectionEnabled=false;
        }
        else
        {
          popup.entity1=entity1;
          popup.entity2=entity2;
          popup.versusSelectionEnabled=true;
        }
        
        popup.currentState=LinkForm.CREATE;
        popup.addEventListener(LinkForm.LINK_ADDED, onLinkAdded)
        PopUpManager.centerPopUp(popup);
      }
      
      private function onLinkAdded(e:Event):void
      {
        dispatchEvent(new Event("linkAdded"));
      }
      
      private function onLinkUpdated(e:Event):void
      {
        dispatchEvent(new Event("linkUpdated"));
      }
      
      private function onDeleteLinkClick():void
      {
        
        AlertPopUp.show('Do you want to remove the selected link ', R.get('CONFIRM'), AlertPopUp.YES | AlertPopUp.NO, null, function(e:CloseEvent):void
        {
          if (e.detail == AlertPopUp.YES)
          {
            EntityManager.instance.deleteLink(selectedObject.source, selectedObject.target, onDeleteLinkResult, onFault)
            
          }
        }, null, AlertPopUp.NO);
      }
      
      private function onDeleteLinkResult(e:ResultEvent):void
      {
        dispatchEvent(new Event("linkRemoved"))
      }
      
      private function onFault(e:FaultEvent):void
      {
        trace("Fault CallBack");
      }
      
      private function editLink():void
      {
        var popup:LinkForm=PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, LinkForm, true) as LinkForm;
        var entity1:Entity=EntityManager.instance.getItem(selectedObject.source);
        var entity2:Entity=EntityManager.instance.getItem(selectedObject.target);
        
        var versus:String=selectedObject.versus //== "both" ? "both" : "out";
        var type:String=selectedObject.type;
        var relevance:int=selectedObject.rel;
        
        
        popup.entity1=entity1;
        popup.entity2=entity2;
        popup.versus=versus;
        popup.type=type;
        popup.rel=relevance;
        
        if (entity1.type == "position" && (entity2.type == "target" || entity2.type == "person"))
        {
       
          popup.versusSelectionEnabled=false;
        }
        else if (entity2.type == "position" && (entity1.type == "target" || entity1.type == "person"))
        {
         
          popup.versusSelectionEnabled=false;
        }
        else
        {
       
          popup.versusSelectionEnabled=true;
        }
        popup.currentState=LinkForm.EDIT;
        popup.addEventListener(LinkForm.LINK_ADDED, onLinkUpdated)
        PopUpManager.centerPopUp(popup);
        
        
      }
      
      private function onMergeClick():void
      {
        var entity1:Entity=EntityManager.instance.getItem(selectedObjects[0]._id);
        var entity2:Entity=EntityManager.instance.getItem(selectedObjects[1]._id);
        var msg:String;
        
        if (entity1.type == "person" && entity2.type == "target")
        {
          msg='Merge ' + entity2.name + ' with ' + entity1.name + '?'
        }
        else
        {
          msg='Merge ' + entity1.name + ' with ' + entity2.name + '?'
        }
        
        AlertPopUp.show(msg, R.get('CONFIRM'), AlertPopUp.YES | AlertPopUp.NO, null, function(e:CloseEvent):void
        {
          if (e.detail == AlertPopUp.YES)
          {
            merge()
          }
        }, null, AlertPopUp.NO);
      }
      
      private function merge():void
      {
        var entity1:Entity=EntityManager.instance.getItem(selectedObjects[0]._id);
        var entity2:Entity=EntityManager.instance.getItem(selectedObjects[1]._id);
        
        if (entity1.type == "person" && entity2.type == "target")
        {
          EntityManager.instance.merge(entity2, entity1, onMergeResult, onFault)
        }
        else
        {
          EntityManager.instance.merge(entity1, entity2, onMergeResult, onFault)
        }
      }
      
      private function onMergeResult(e:ResultEvent):void
      {
        dispatchEvent(new Event("entityMerged"));
      }
      
      private function onEntityAdded(e:Event):void
      {
        dispatchEvent(new Event("entityCreated"));
      }


      protected function onGroup(event:MouseEvent):void
      {
        dispatchEvent(new Event("group"));
        groupPopup.displayPopUp=false
      }
      
      protected function onUngroup(event:MouseEvent):void
      {
        dispatchEvent(new Event("ungroup"));
        groupPopup.displayPopUp=false
      }
      
      protected function onExpandAll(event:MouseEvent):void
      {
        dispatchEvent(new Event("expandAll"));
        groupPopup.displayPopUp=false
      }
      
      protected function onCollapseAll(event:MouseEvent):void
      {
        dispatchEvent(new Event("collapseAll"));
        groupPopup.displayPopUp=false
      }
      
      private function get  hasEditPermission():Boolean
      {
        if(selectedObject.type=="group" && selectedObject.stand_for && !SearchManager.instance.getItem(selectedObject.stand_for))
          return false;
        return true;
      }
      
      private function get  hasDeletePermission():Boolean
      {
        if(selectedObject.type=="group" && selectedObject.stand_for)
          return false;
        return true;
      }
      
    ]]>
    </fx:Script>

</actionbar:ActionBar>