package <%= base_package %>.models.presentation { import flash.events.Event; import flash.events.IOErrorEvent; import org.restfulx.utils.RxFileReference; import <%= base_package %>.controllers.event.ResourceEvent; import <%= base_package %>.models.constant.Resource; import <%= base_package %>.models.presentation.ResourceModel; import <%= base_package %>.models.domain.User; import <%= base_package %>.models.domain.Account; import <%= base_package %>.models.domain.Address; public class ProfileModel extends ResourceModel { /** Injector targets */ [Bindable] public var accountEvent:ResourceEvent; [Bindable] public var addressEvent:ResourceEvent; [Bindable] public var userEvent:ResourceEvent; private var accountDirty:Boolean; private var addressDirty:Boolean; private var userDirty:Boolean; private var profileDirty:Boolean; [Bindable] public var profileInvalid:Boolean; private var photo:RxFileReference; private var _user:User; [Bindable] public function get currentUser():User { return _user; } public function set currentUser(value:User):void { _user = value; } public function setAccountDirty():void { accountDirty = true; profileDirty = true; } public function setAddressDirty():void { addressDirty = true; profileDirty = true; } public function setUserDirty():void { userDirty = true; profileDirty = true; } [Bindable] public function get submitButtonEnabled():Boolean { return profileDirty; } public function ProfileModel() { } public function saveProfile():void { if (photo) if (addressDirty) { save(currentUser.address, addressEvent); } if (accountDirty) { save(currentUser.account, accountEvent); } if (userDirty) { save(currentUser, userEvent); } } public function chooseFile():void { photo = new RxFileReference("avatar"); photo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true); photo.addEventListener(Event.SELECT, selectFile, false, 0, true); photo.addEventListener(Event.CANCEL, cancelBrowse, false, 0, true); photo.browse(); } private function selectFile(event:Event):void { fileSelected(event) } private function cancelBrowse(event:Event):void { photo = null; } private function fileSelected(event:Event):void { currentUser.account.attachment = photo; accountDirty = true; saveProfile(); } private function ioErrorHandler(event:Event):void { photo = null; } } }