Creating a review template and uploading support documents using Flex API

The following code uploads supporting documents and creates a review template.

package customsolution 
{ 
    import com.adobe.livecycle.rca.model.CustomAttribute; 
    import com.adobe.livecycle.rca.model.ReviewContext; 
    import com.adobe.livecycle.rca.model.constant.DocumentType; 
    import com.adobe.livecycle.rca.model.constant.DurationUnit; 
    import com.adobe.livecycle.rca.model.constant.StageTypes; 
    import com.adobe.livecycle.rca.model.document.DocumentCollection; 
    import com.adobe.livecycle.rca.model.document.SupportingDocument; 
    import com.adobe.livecycle.rca.model.participant.Approver; 
    import com.adobe.livecycle.rca.model.participant.ApproverCollection; 
    import com.adobe.livecycle.rca.model.participant.Reviewer; 
    import com.adobe.livecycle.rca.model.participant.ReviewerCollection; 
    import com.adobe.livecycle.rca.model.stage.ApprovalStage; 
    import com.adobe.livecycle.rca.model.stage.ReviewStage; 
    import com.adobe.livecycle.rca.model.stage.StageCollection; 
    import com.adobe.livecycle.rca.service.ServiceProvider; 
    import com.adobe.livecycle.rca.service.core.IReviewCommentingAndApprovalService; 
    import com.adobe.livecycle.rca.token.IAsyncToken; 
     
    import flash.events.*; 
    import flash.net.*; 
     
    import mx.collections.ArrayCollection; 
    import mx.controls.Alert; 
    import mx.messaging.ChannelSet; 
    import mx.messaging.channels.AMFChannel; 
    import mx.rpc.events.FaultEvent; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.livecycle.DocumentReference; 
    import mx.rpc.remoting.RemoteObject; 
    import mx.utils.ObjectUtil; 
     
    /** 
     * This sample stores a review template with 2 supporting document. 
     * Also it shows how to upload a document to LiveCycle file upload servlet. 
     * 
     * There is a public filerefence variable defined in the class. 
     * To use it, create a button and bind its click with filerefence.browse(); 
     * 
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2 
     */ 
     
    public class StoreReviewTemplateWithSupportingDocument 
    { 
        public static var username:String; 
        public static var password:String; 
        public static var server_url:String; 
        public static var server_port:String; 
        public static var amfChannelURI:String; 
        public var _channelSet:ChannelSet = null; 
        public var rc : ReviewContext = null; 
        public var rcaService:IReviewCommentingAndApprovalService = null; 
         
        // File reference public variables 
        public var supportingDocFileRef : FileReference = new FileReference(); 
        private var supportingDocRef : DocumentReference; 
         
        public function init():void 
        { 
            server_url="http://localhost"; 
            server_port="8080"; 
            amfChannelURI="/remoting/messagebroker/amf"; 
            username= "administrator"; 
            password = "password"; 
             
            _channelSet = new ChannelSet(); 
            _channelSet.addChannel(new AMFChannel('amf-channel',server_url+":"+server_port+amfChannelURI)); 
            _channelSet.login(username, password); 
             
             //fileRef event handlers 
            supportingDocFileRef.addEventListener(Event.SELECT, supportingDocSelectHandler); 
            supportingDocFileRef.addEventListener(IOErrorEvent.IO_ERROR, 
ioErrorHandler); 
            supportingDocFileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, 
supportingDocFileUploaded); 
             
            rcaService = 
ServiceProvider.getReviewCommentingAndApprovalService(_channelSet); 
        } 
         
        public function StoreReviewTemplateWithSupportingDocument() 
        { 
            init(); 
             
        } 
         
        private function ioErrorHandler(event : IOErrorEvent) { 
            trace(ObjectUtil.toString(event)); 
        } 
         
        private function supportingDocSelectHandler(event:Event):void { 
            var authTokenService:RemoteObject = new RemoteObject("LC.FileUploadAuthenticator"); 
            authTokenService.addEventListener("result", supportingDocTokenReceived); 
            authTokenService.channelSet = _channelSet; 
            authTokenService.getFileUploadToken(); 
            } 
             
            private function supportingDocTokenReceived(event:ResultEvent):void 
            { 
            var token:String = event.result as String; 
            var urlString:String = server_url + ":" + server_port; 
            var request:URLRequest = DocumentReference.constructRequestForUpload(urlString, token); 
            supportingDocFileRef.upload(request); 
            } 
             
            private function supportingDocFileUploaded(event:DataEvent):void { 
            supportingDocRef = new DocumentReference(); 
            supportingDocRef.contentType = "application/pdf"; 
            // assumption that the uploaded document is pdf, else define the content type for specific doc. 
            supportingDocRef.url = event.data; 
            supportingDocRef.referenceType = DocumentReference.REF_TYPE_URL; 
            } 
         
        private function createReviewTemplate() : void 
        { 
            rc = new ReviewContext(); 
            rc.templateName = "CustomSolutionTemplateWithSD"; 
            rc.templateDesc = "Sample Template"; 
            rc.stages = new StageCollection(); 
             
            //create stage 
            var reviewStage:ReviewStage = new ReviewStage(); 
            reviewStage.name = "ParallelReviewStage"; 
            reviewStage.type = StageTypes.PARALLEL_REVIEW; 
            reviewStage.duration = 1; 
            reviewStage.durationUnit= DurationUnit.DAYS; 
             
            //add reviewers 
            reviewStage.reviewers = new ReviewerCollection(); 
            var reviewer:Reviewer = new Reviewer(); 
            reviewer.canonicalName = "apink"; 
            reviewer.domain = "DefaultDom"; 
            reviewer.isGroup = false; 
            reviewer.isOptional = false; 
             
            //add review to reviewer collection 
            reviewStage.reviewers.addItem(reviewer); 
            //add stage to stage collection 
            rc.stages.addStage(reviewStage); 
             
            //create stage 
            var approvalStage:ApprovalStage = new ApprovalStage(); 
            approvalStage.type = StageTypes.PARALLEL_APPROVAL; 
            approvalStage.name = "ParallelApprovalStage"; 
            approvalStage.duration = 1; 
            approvalStage.durationUnit= DurationUnit.DAYS; 
             
            //add reviewers 
            approvalStage.approvers = new ApproverCollection(); 
            var approver:Approver = new Approver(); 
            approver.canonicalName = "apink"; 
            approver.domain = "DefaultDom"; 
            approver.isGroup = false; 
             
            //add review to reviewer collection 
            approvalStage.approvers.addItem(approver); 
            //add stage to stage collection 
            rc.stages.addStage(approvalStage); 
            //add custom attributes 
            var customAttributes:ArrayCollection = new ArrayCollection(); 
            var attr1:CustomAttribute = new CustomAttribute(); 
            attr1.attrKey = "DEPARTMENT"; 
            attr1.attrValue = "LC"; 
            customAttributes.addItem(attr1); 
            var attr2:CustomAttribute = new CustomAttribute(); 
            attr2.attrKey = "REVISION"; 
            attr2.attrValue = "9.5"; 
            customAttributes.addItem(attr2); 
            rc.customAttributes = customAttributes; 
        } 
         
        public function storeTemplate() : void 
        { 
            createReviewTemplate(); 
             
            var supportingDocCollection : DocumentCollection = new 
DocumentCollection(); 
             
            var supportingDoc1 : SupportingDocument = new SupportingDocument(); 
            supportingDoc1.type = DocumentType.REF; 
            supportingDoc1.uri = "www.adobe.com"; 
            supportingDoc1.description = "Sample reference type supporting document"; 
            supportingDocCollection.addSupportingDocument(supportingDoc1); 
             
            var supportingDoc2 : SupportingDocument = new SupportingDocument(); 
            supportingDoc2.type = DocumentType.DOCUMENT; 
            supportingDoc2.document = supportingDocRef; 
            supportingDoc2.name = "Supporting Doc Sample"; 
            supportingDoc2.description = "Sample document type supporting document"; 
            supportingDocCollection.addSupportingDocument(supportingDoc2); 
             
             
            var token:IAsyncToken = rcaService.storeReviewTemplate(rc, 
supportingDocCollection.source); 
            token.addHandlers(handleStoreTemplateResult, handleStoreTemplateFault); 
        } 
         
        public function handleStoreTemplateResult(event: ResultEvent):void{ 
            Alert.show("Template Stored Successfully.");                                               
            trace(ObjectUtil.toString(event)); 
        } 
           
        public function handleStoreTemplateFault(event: FaultEvent):void{ 
            trace(ObjectUtil.toString(event)); 
        } 
 
    } 
}

// Ethnio survey code removed