Changeset 1255


Ignore:
Timestamp:
04/28/11 13:19:50 (13 years ago)
Author:
twagoo
Message:

When a file (component or profile xml expected) is selected for import, it is read and import type, name and description values are extracted. For this, a new 'fileLoaded' event is added to UploadService?.

Component/Profile? selection radio buttons are no longer needed on import form, so they have been replaced by a label that gets its text from the detected type.

Location:
ComponentRegistry/trunk/ComponentBrowserGui/src/main/flex/clarin/cmdi/componentregistry
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • ComponentRegistry/trunk/ComponentBrowserGui/src/main/flex/clarin/cmdi/componentregistry/importer/Importer.mxml

    r1254 r1255  
    99        <mx:Script>
    1010                <![CDATA[
     11                        import clarin.cmdi.componentregistry.common.ComponentMD;
     12                        import clarin.cmdi.componentregistry.common.Profile;
    1113                        import clarin.cmdi.componentregistry.services.Config;
    1214                        import mx.events.ValidationResultEvent;
     
    1820                        import mx.core.Application;
    1921                        import clarin.cmdi.componentregistry.common.ItemDescription;
    20 
    21                         private static const BTN_PROFILE_LABEL:String = "Select profile xml...";
    22                         private static const BTN_COMPONENT_LABEL:String = "Select component xml...";
     22                        import mx.controls.Alert;
    2323
    2424                        private var validators:ArrayCollection = new ArrayCollection();
     
    2727                        private var isProfile:Boolean = true;
    2828                        [Bindable]
    29                         private var btnLabel:String = BTN_PROFILE_LABEL;
     29                        private var importTypeString:String = "";
    3030
    3131                        private function submit(event:Event):void {
     
    6060                                isProfile = isProfileValue;
    6161                                if (isProfile) {
    62                                         btnLabel = BTN_PROFILE_LABEL;
     62                                        importTypeString = "Profile";
    6363                                } else {
    64                                         btnLabel = BTN_COMPONENT_LABEL;
     64                                        importTypeString = "Component";
    6565                                }
    6666                        }
     
    6868                        private function registryChange(event:UploadCompleteEvent):void {
    6969                                parentApplication.viewStack.switchToBrowse(event.itemDescription);
     70                        }
     71
     72                        private function fileLoaded(event:FileLoadedEvent):void {
     73                                var data:ByteArray = event.fileReference.data;
     74                                if (data && data.bytesAvailable) {
     75                                        try {
     76                                                var utfBytes:String = data.readUTFBytes(data.length);
     77                                                var resultXml:XML = new XML(utfBytes);
     78
     79                                                // New file selected, clear all previous entries
     80                                                clearForm();
     81                                                // Set import type (profile or component) from attribute in XML
     82                                                setImportTypeFromFile(resultXml);
     83                                                // Set name, description from values in XML
     84                                                setFormFieldsFromFile(resultXml);
     85                                        } catch (error:Error) {
     86                                                Alert.show("Could not read the selected file. Not a valid XML file?", "Error");
     87                                                importTypeString = "Error";
     88                                                trace("Error while reading loaded file " + event.fileReference.name);
     89                                                return;
     90                                        }
     91                                }
     92                        }
     93
     94                        private function setImportTypeFromFile(resultXml:XML):void {
     95                                if (resultXml.hasOwnProperty("@isProfile")) {
     96                                        setIsProfile(("true" == resultXml.@isProfile));
     97                                } else {
     98                                        Alert.show("Unable to determine import type. Selected file may not be a valid component specification!", "Warning");
     99                                        importTypeString = "Unknown";
     100                                }
     101                        }
     102
     103                        private function setFormFieldsFromFile(resultXml:XML):void {
     104                                if (resultXml.hasOwnProperty("Header")) {
     105                                        var nodes:XMLList = resultXml.Header;
     106                                        if (nodes && nodes.length() > 0) {
     107                                                var header:XML = nodes[0];
     108                                                nameInput.text = header.Name;
     109                                                description.text = header.Description;
     110                                        }
     111                                }
     112                        }
     113
     114                        private function clearForm():void {
     115                                importTypeString = "";
     116                                nameInput.text = "";
     117                                description.text = "";
     118                                groupName.text = "";
     119                                domainName.selectedItem = null;
    70120                        }
    71121
     
    97147
    98148        <local:UploadService id="uploadSrv"
     149                                                 loadBeforeUploading="true"
     150                                                 fileLoaded="fileLoaded(event)"
    99151                                                 uploadComplete="registryChange(event)"/>
    100152        <mx:VBox>
    101153                <mx:Form>
    102154                        <mx:HBox>
    103                                 <mx:FormHeading label="Import"/>
    104                                 <mx:RadioButton groupName="importType"
    105                                                                 id="profileType"
    106                                                                 label="Profile"
    107                                                                 click="setIsProfile(true)"
    108                                                                 selected="true"/>
    109                                 <mx:RadioButton groupName="importType"
    110                                                                 id="componentType"
    111                                                                 label="Component"
    112                                                                 click="setIsProfile(false)"/>
    113                         </mx:HBox>
    114                         <mx:HBox>
    115                                 <mx:Button label="{btnLabel}"
     155                                <mx:Button label="Select xml..."
    116156                                                   id="btnSelect"
    117157                                                   click="uploadSrv.selectXmlFile(event)"
     
    121161                        </mx:HBox>
    122162
     163                        <mx:FormItem label="Type">
     164                                <mx:Label id="importType"
     165                                                  text="{importTypeString}"/>
     166                        </mx:FormItem>
    123167                        <mx:FormItem label="Name">
    124168                                <mx:TextInput id="nameInput"
     
    140184                        </mx:FormItem>
    141185                        <mx:FormItem label="Group Name">
    142                                 <mx:TextInput id="groupName"
    143                                                           creationComplete="registerIsRequiredValidator(event)"/>
     186                                <mx:TextInput id="groupName"/>
    144187                        </mx:FormItem>
    145188                        <mx:Button label="Submit"
  • ComponentRegistry/trunk/ComponentBrowserGui/src/main/flex/clarin/cmdi/componentregistry/services/UploadService.as

    r1086 r1255  
    11package clarin.cmdi.componentregistry.services {
    22        import clarin.cmdi.componentregistry.common.ItemDescription;
     3        import clarin.cmdi.componentregistry.importer.FileLoadedEvent;
    34        import clarin.cmdi.componentregistry.importer.UploadCompleteEvent;
    45
     
    2122
    2223        [Event(name="uploadComplete", type="clarin.cmdi.componentregistry.importer.UploadCompleteEvent")]
     24        [Event(name="fileLoaded", type="clarin.cmdi.componentregistry.importer.FileLoadedEvent")]
    2325        public class UploadService {
    2426
     
    4749                private var pb:ProgressBar;
    4850                private var ml:MultipartURLLoader;
     51                private var _loadBeforeUploading:Boolean = false;
     52
     53                public function set loadBeforeUploading(lbu:Boolean):void {
     54                        _loadBeforeUploading = lbu;
     55                }
    4956
    5057                public function init(progressBar:ProgressBar):void {
     
    6572                        fileRef = new FileReference();
    6673                        fileRef.addEventListener(Event.SELECT, selectHandler);
    67                         //no uploads are done through FileRef only loads so this UPLOAD_COMPLETE_DATA event will not be thrown
    68                         //fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, responseHandler);
     74
    6975                        fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    7076                        fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
    7177                        fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
     78
     79                        // If loading is enabled, register handler that will dispatch loadFile event
     80                        if (_loadBeforeUploading) {
     81                                fileRef.addEventListener(Event.COMPLETE, fileLoadedHandler);
     82                        }
    7283                }
    7384
     
    167178                        message = "";
    168179                        pb.visible = false;
     180                        if (_loadBeforeUploading) {
     181                                fileRef.load();
     182                        }
     183                }
     184
     185                private function fileLoadedHandler(event:Event):void {
     186                        dispatchEvent(new FileLoadedEvent(fileRef));
    169187                }
    170188
Note: See TracChangeset for help on using the changeset viewer.