11package helloWorld.contexts
22{
33 import flash.display.DisplayObject ;
4+ import flash.events.Event ;
5+ import flash.events.EventDispatcher ;
46
7+ import core.app.CoreApp ;
8+ import core.app.entities.URI ;
9+ import core.app.operations.ReadFileAndDeserializeOperation ;
510 import core.appEx.core.contexts.IOperationManagerContext ;
6- import core.appEx.core.contexts.IVisualContext ;
11+ import core.appEx.events.OperationManagerEvent ;
712 import core.appEx.managers.OperationManager ;
13+ import core.appEx.operations.SerializeAndWriteFileOperation ;
814 import core.data.ArrayCollection ;
15+ import core.editor.CoreEditor ;
16+ import core.editor.contexts.IEditorContext ;
917
1018 import helloWorld.ui.views.StringListView ;
1119
12- public class StringListContext implements IVisualContext , IOperationManagerContext
20+ [Event ( type="flash.events.Event" , name="change" )]
21+
22+ public class StringListContext extends EventDispatcher implements IEditorContext , IOperationManagerContext
1323 {
1424 private var _view : StringListView;
1525
1626 private var _dataProvider : ArrayCollection ;
1727
1828 private var _operationManager : OperationManager;
1929
30+ private var _uri : URI ;
31+ private var _changed : Boolean = false ;
32+ protected var _isNewFile : Boolean = false ;
33+
2034 public function StringListContext ()
2135 {
2236 _view = new StringListView();
@@ -25,6 +39,7 @@ package helloWorld.contexts
2539 _view . dataProvider = _dataProvider ;
2640
2741 _operationManager = new OperationManager();
42+ _operationManager . addEventListener (OperationManagerEvent. CHANGE , changeOperationManagerHandler);
2843 }
2944
3045 public function get view ():DisplayObject
@@ -34,9 +49,84 @@ package helloWorld.contexts
3449
3550 public function dispose ():void
3651 {
52+ _operationManager . removeEventListener (OperationManagerEvent. CHANGE , changeOperationManagerHandler);
3753 _operationManager . dispose ();
3854 }
3955
56+ public function enable ():void
57+ {
58+ // Do nothing
59+ }
60+
61+ public function disable ():void
62+ {
63+ // Do nothing
64+ }
65+
66+ public function publish ():void
67+ {
68+ // Do nothing
69+ }
70+
71+ public function save ():void
72+ {
73+ var serializeOperation: SerializeAndWriteFileOperation = new SerializeAndWriteFileOperation( _dataProvider , _uri , CoreApp. fileSystemProvider );
74+ CoreEditor. operationManager. addOperation(serializeOperation);
75+ changed = false ;
76+ }
77+
78+ public function load ():void
79+ {
80+ var deserializeOperation: ReadFileAndDeserializeOperation = new ReadFileAndDeserializeOperation( _uri , CoreApp. fileSystemProvider );
81+ deserializeOperation. addEventListener (Event . COMPLETE , deserializeCompleteHandler);
82+ CoreEditor. operationManager. addOperation(deserializeOperation);
83+ }
84+
85+ private function deserializeCompleteHandler ( event :Event ):void
86+ {
87+ var deserializeOperation: ReadFileAndDeserializeOperation = ReadFileAndDeserializeOperation(event. target );
88+
89+ // Handle case where the file on disk is empty. This occurs when we're opening a newly created file.
90+ if ( deserializeOperation. getResult() == null )
91+ {
92+ _dataProvider = new ArrayCollection ();
93+ }
94+ else
95+ {
96+ _dataProvider = ArrayCollection ( deserializeOperation. getResult() );
97+ }
98+ _view . dataProvider = _dataProvider ;
99+ changed = false ;
100+ }
101+
102+ public function set uri ( value :URI ):void
103+ {
104+ _uri = value ;
105+ }
106+
107+ public function get uri ():URI { return _uri ; }
108+
109+ public function set changed ( value :Boolean ):void
110+ {
111+ if ( value == _changed ) return ;
112+ _changed = value ;
113+ dispatchEvent ( new Event ( Event . CHANGE ) );
114+ }
115+
116+ public function get changed ():Boolean { return _changed ; }
117+
118+ private function changeOperationManagerHandler ( event :OperationManagerEvent ):void
119+ {
120+ changed = true ;
121+ }
122+
123+ public function set isNewFile ( value :Boolean ):void
124+ {
125+ _isNewFile = value ;
126+ }
127+
128+ public function get isNewFile ():Boolean { return _isNewFile ; }
129+
40130 public function get dataProvider ():ArrayCollection { return _dataProvider ; }
41131
42132 public function get operationManager ():OperationManager { return _operationManager ; }
0 commit comments