Added permanent storage option to Storage project.

Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/1bc555d9
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/1bc555d9
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/1bc555d9

Branch: refs/heads/spark
Commit: 1bc555d93d756abdf804e39e0521df726d4f0dac
Parents: 6271091
Author: Peter Ent <[email protected]>
Authored: Wed Mar 9 11:12:28 2016 -0500
Committer: Peter Ent <[email protected]>
Committed: Wed Mar 9 11:12:28 2016 -0500

----------------------------------------------------------------------
 frameworks/projects/Storage/build.xml           |   3 +
 .../Storage/src/main/flex/StorageClasses.as     |   9 +
 .../apache/flex/storage/IPermanentStorage.as    |  63 +++++++
 .../org/apache/flex/storage/PermanentStorage.as |  97 +++++++++++
 .../apache/flex/storage/events/FileReadEvent.as |  70 ++++++++
 .../flex/storage/events/FileWriteEvent.as       |  60 +++++++
 .../org/apache/flex/storage/file/LocalFile.as   |  84 +++++++++
 .../storage/providers/AirStorageProvider.as     | 165 ++++++++++++++++++
 .../providers/IPermanentStorageProvider.as      |  74 ++++++++
 .../storage/providers/WebStorageProvider.as     | 169 +++++++++++++++++++
 .../src/main/resources/basic-manifest.xml       |   1 +
 .../Storage/src/main/resources/defaults.css     |  16 ++
 12 files changed, 811 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/build.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/build.xml 
b/frameworks/projects/Storage/build.xml
index 0d5fd9a..6fc0ed5 100644
--- a/frameworks/projects/Storage/build.xml
+++ b/frameworks/projects/Storage/build.xml
@@ -30,6 +30,7 @@
     <property name="FALCONJX_HOME" value="${env.FALCONJX_HOME}"/>
     <property name="JS.SWC" 
value="${FALCONJX_HOME}/../externs/js/out/bin/js.swc" />
     <property name="GCL.SWC" 
value="${FALCONJX_HOME}/../externs/GCL/out/bin/GCL.swc" />
+    <property name="CORDOVA.SWC" 
value="${FALCONJX_HOME}/../externs/cordova/out/bin/cordova.swc" />
     <property name="target.name" value="Storage-${release.version}.swc" />
     <property name="target.name.no.version" value="Storage.swc" />
 
@@ -118,6 +119,7 @@
             <arg value="-external-library-path+=${JS.SWC}" />
             <!-- this is not on external-library path otherwise goog.requires 
are not generated -->
             <arg value="-library-path+=${GCL.SWC}" />
+            <arg value="--external-library-path+=${CORDOVA.SWC}" />
             <arg value="-define=COMPILE::AS3,false" />
             <arg value="-define=COMPILE::JS,true" />
         </java>
@@ -155,6 +157,7 @@
             <arg value="-external-library-path+=${JS.SWC}" />
             <!-- this is not on external-library path otherwise goog.requires 
are not generated -->
             <arg value="-library-path+=${GCL.SWC}" />
+            <arg value="--external-library-path+=${CORDOVA.SWC}" />
             <arg value="-define=COMPILE::AS3,false" />
             <arg value="-define=COMPILE::JS,true" />
         </compc>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/StorageClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/flex/StorageClasses.as 
b/frameworks/projects/Storage/src/main/flex/StorageClasses.as
index db34477..92d9bd4 100644
--- a/frameworks/projects/Storage/src/main/flex/StorageClasses.as
+++ b/frameworks/projects/Storage/src/main/flex/StorageClasses.as
@@ -29,6 +29,15 @@ internal class StorageClasses
 {
     import org.apache.flex.storage.LocalStorage; LocalStorage;
     import org.apache.flex.storage.providers.LocalStorageProvider; 
LocalStorageProvider;
+
+       import org.apache.flex.storage.PermanentStorage; PermanentStorage;
+       import org.apache.flex.storage.events.FileReadEvent; FileReadEvent;
+       import org.apache.flex.storage.events.FileWriteEvent; FileWriteEvent;
+
+       import org.apache.flex.storage.providers.AirStorageProvider; 
AirStorageProvider;
+
+       import org.apache.flex.storage.providers.WebStorageProvider; 
WebStorageProvider;
+
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IPermanentStorage.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IPermanentStorage.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IPermanentStorage.as
new file mode 100644
index 0000000..d47866b
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IPermanentStorage.as
@@ -0,0 +1,63 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage
+{
+       import org.apache.flex.events.IEventDispatcher;
+       
+       /**
+        * The IPermanentStorage interface provides the template for creating
+        * an interface to a device's native file system.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public interface IPermanentStorage extends IEventDispatcher
+       {       
+               /**
+                * A convenience function to read an entire file as a single 
+                * string of text. The file is storaged in the application's
+                * data storage directory. 
+                * 
+                *  @param fileName The name of the file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               function readTextFromDataFile( fileName:String ) : void;
+               
+               /**
+                * A convenience function write a string into a file that 
resides in the
+                * application's data storage directory. If the file already 
exists it is 
+                * replaced with the string.
+                * 
+                *  @param fileName The name of file.
+                *  @param text The string to be stored.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               function writeTextToDataFile( fileName:String, text:String ) : 
void;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/PermanentStorage.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/PermanentStorage.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/PermanentStorage.as
new file mode 100644
index 0000000..d1e8887
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/PermanentStorage.as
@@ -0,0 +1,97 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage
+{
+       import org.apache.flex.events.EventDispatcher;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.core.ValuesManager;
+
+       import org.apache.flex.storage.providers.AirStorageProvider;
+       import org.apache.flex.storage.providers.IPermanentStorageProvider;
+
+       /**
+        * The PermanentStorage class provides the interface to the native
+        * file system. This classes uses the FlexJS ValuesManager to provide
+        * the actual implementation using the iStorage style.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+        */
+       public class PermanentStorage extends EventDispatcher implements 
IPermanentStorage
+       {
+               /**
+                * Constructor.
+            *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function PermanentStorage()
+               {
+                       super();
+                       _storageProvider = 
ValuesManager.valuesImpl.newInstance(this, "iStorageProvider") as 
IPermanentStorageProvider;
+                       _storageProvider.target = this;
+               }
+
+               /**
+                * @private
+                */
+               private var _storageProvider:IPermanentStorageProvider;
+
+               /**
+                * A convenience function to read an entire file as a single 
+                * string of text. The file is storaged in the application's
+                * data storage directory. Dispatches a FileRead event once
+                * the data is available.
+                * 
+                *  @param fileName The name of the file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function readTextFromDataFile( fileName:String ) : void
+               {
+                       _storageProvider.readTextFromDataFile( fileName );
+               }
+               
+               /**
+                * A convenience function write a string into a file that 
resides in the
+                * application's data storage directory. If the file already 
exists it is 
+                * replaced with the string. Dispatches a FileWrite event once 
the file
+                * has been written.
+                * 
+                *  @param fileName The name of file.
+                *  @param text The string to be stored.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function writeTextToDataFile( fileName:String, 
text:String ) : void
+               {
+                       _storageProvider.writeTextToDataFile( fileName, text );
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileReadEvent.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileReadEvent.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileReadEvent.as
new file mode 100644
index 0000000..528c36b
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileReadEvent.as
@@ -0,0 +1,70 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage.events
+{
+       import org.apache.flex.events.Event;
+       
+       /**
+        * The FileReadEvent class is used to signal varies events in the life 
and
+        * use of permanent files. 
+        * 
+        * COMPLETE - The file has been completely read.
+        * ERROR    - An error occurred reading or opening the file.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class FileReadEvent extends Event
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function FileReadEvent(type:String)
+               {
+                       super(type);
+               }
+               
+               /**
+                * The data read from the file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public var data:String;
+               
+               /**
+                * If not null, the error that occurred opening or reading the 
file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public var errorMessage:String;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileWriteEvent.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileWriteEvent.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileWriteEvent.as
new file mode 100644
index 0000000..fea4542
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/events/FileWriteEvent.as
@@ -0,0 +1,60 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage.events
+{
+       import org.apache.flex.events.Event;
+       
+       /**
+        * The FileWriteEvent class is used to signal varies events in the life 
and
+        * use of permanent files. 
+        * 
+        * COMPLETE - The file has been successfully written.
+        * ERROR    - An error occurred writing or opening the file.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class FileWriteEvent extends Event
+       {
+               /**
+                * Constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function FileWriteEvent(type:String)
+               {
+                       super(type);
+               }
+               
+               /**
+                * If not null, the error that occurred opening or writing the 
file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public var errorMessage:String;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/file/LocalFile.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/file/LocalFile.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/file/LocalFile.as
new file mode 100644
index 0000000..47b8333
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/file/LocalFile.as
@@ -0,0 +1,84 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage.file
+{
+COMPILE::AS3 {
+       import flash.filesystem.File;
+}
+COMPILE::JS {
+}
+
+/**
+ * The File class provides access to a specific file on the device.
+ */
+COMPILE::AS3
+public class LocalFile
+{
+       public static const documentsDirectory:String = "documentsDirectory";
+       public static const dataDirectory:String = "dataDirectory";
+
+       public function LocalFile(handle:Object=null)
+       {
+               _handle = handle as flash.filesystem.File;
+       }
+
+       private var _handle::flash.filesystem.File;
+
+       public function get handle():flash.filesystem.File {
+               return _handle;
+       }
+
+       static public function resolvePath(directory:String, 
filename:String):LocalFile {
+               var root:File;
+               if (directory == LocalFile.documentsDirectory) {
+                       root = File.documentsDirectory;
+               }
+               else if (directory == LocalFile.dataDirectory) {
+                       root = File.applicationStorageDirectory;
+               }
+               var result:LocalFile = new 
LocalFile(root.resolvePath(filename));
+               return result;
+       }
+}
+
+COMPILE::JS
+public class LocalFile
+{
+       public static const documentsDirectory:String = 
cordova.file.documentsDirectory;
+       public static const dataDirectory:String = cordova.file.dataDirectory;
+
+       private var _handle:cordova.File;
+
+       public function get handle():cordova.File {
+               return _handle;
+       }
+
+       static public function resolvePath(directory:String, 
filename:String):LocalFile {
+               var pathToFile = directory + filename;
+               var result:File = new File();
+               window.resolveLocalFileSystemURL(pathToFile, 
function(fileEntry) {
+                       fileEntry.file(function (file) {
+                               this.result._handle = file;
+                       })
+               });
+               return result;
+       }
+}
+
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/AirStorageProvider.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/AirStorageProvider.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/AirStorageProvider.as
new file mode 100644
index 0000000..185b6a3
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/AirStorageProvider.as
@@ -0,0 +1,165 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage.providers
+{
+       import org.apache.flex.events.EventDispatcher;
+       import org.apache.flex.events.IEventDispatcher;
+       
+       COMPILE::AS3 {
+               import flash.filesystem.File;
+               import flash.filesystem.FileMode;
+               import flash.filesystem.FileStream;
+               import flash.utils.ByteArray;
+               import flash.errors.IOError;
+       }
+
+       import org.apache.flex.storage.events.FileReadEvent;
+       import org.apache.flex.storage.events.FileWriteEvent;
+
+       /**
+        * The AirStorageProvider class implements the IPermanentStorageProvider
+        * interface for saving files to a mobile device using the Adobe(tm) 
AIR platform. 
+        * 
+        * @flexjsignorecoercion FileEntry
+        * @flexjsignorecoercion FileWriter
+        * @flexjsignorecoercion window
+        * @flexjsignorecoercion Blob
+        */
+       public class AirStorageProvider extends EventDispatcher implements 
IPermanentStorageProvider
+       {
+               /**
+                * Constructor.
+                * 
+                * @param target The target dispatcher for events as files are 
read and written.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function AirStorageProvider(target:IEventDispatcher=null)
+               {
+                       super();
+                       _target = target;
+               }
+
+               /**
+                * The target dispatcher for events as files are read and 
written.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function get target():IEventDispatcher
+               {
+                       return _target;
+               }
+               public function set target(value:IEventDispatcher):void
+               {
+                       _target = value;
+               }
+
+               /**
+                * @private
+                */
+               private var _target:IEventDispatcher;
+               
+               /**
+                * A convenience function to read an entire file as a single 
+                * string of text. The file is storaged in the application's
+                * data storage directory. Dispatches a FileRead event once
+                * the data is available.
+                * 
+                *  @param fileName The name of the file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function readTextFromDataFile( fileName:String ) : void
+               {
+                       COMPILE::AS3 {
+                               var file:File = 
File.applicationStorageDirectory.resolvePath(fileName);
+                               
+                               if (!file.exists) {
+                                       var errEvent:FileReadEvent = new 
FileReadEvent("ERROR");
+                                       errEvent.errorMessage = "File does not 
exist.";
+                                       _target.dispatchEvent(errEvent);
+                                       return;
+                               }
+                               
+                               var stream:FileStream = new FileStream();
+                               
+                               stream.open(file, FileMode.READ);
+                               var bytes:ByteArray = new ByteArray();
+                               stream.readBytes(bytes);
+                               stream.close();
+                               
+                               var text:String = new String(bytes);
+                               
+                               var newEvent:FileReadEvent = new 
FileReadEvent("COMPLETE");
+                               newEvent.data = text;
+                               _target.dispatchEvent(newEvent);
+                       }
+               }
+               
+               /**
+                * A convenience function write a string into a file that 
resides in the
+                * application's data storage directory. If the file already 
exists it is 
+                * replaced with the string. Dispatches a FileWrite event once 
the file
+                * has been written.
+                * 
+                *  @param fileName The name of file.
+                *  @param text The string to be stored.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function writeTextToDataFile( fileName:String, 
text:String ) : void
+               {
+                       COMPILE::AS3 {
+                               var file:File = 
File.applicationStorageDirectory.resolvePath(fileName);
+                               var stream:FileStream = new FileStream();
+                               
+                               try {
+                                       stream.open(file, FileMode.WRITE);
+                                       stream.writeUTFBytes(text);
+                                       stream.close();
+                               } catch(ioerror:IOError) {
+                                       var ioEvent:FileWriteEvent = new 
FileWriteEvent("ERROR");
+                                       ioEvent.errorMessage = "I/O Error";
+                                       _target.dispatchEvent(ioEvent);
+                                       return;
+                               } catch(secerror:SecurityError) {
+                                       var secEvent:FileWriteEvent = new 
FileWriteEvent("ERROR");
+                                       secEvent.errorMessage = "Security 
Error";
+                                       _target.dispatchEvent(secEvent);
+                                       return;
+                               }
+                               
+                               var newEvent:FileWriteEvent = new 
FileWriteEvent("COMPLETE");
+                               _target.dispatchEvent(newEvent);
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/IPermanentStorageProvider.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/IPermanentStorageProvider.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/IPermanentStorageProvider.as
new file mode 100644
index 0000000..023b1a7
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/IPermanentStorageProvider.as
@@ -0,0 +1,74 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage.providers
+{
+       import org.apache.flex.events.IEventDispatcher;
+
+       /**
+        * This interface provides the template for creating classes the work
+        * with the permanent storages API of the native system.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+        */
+       public interface IPermanentStorageProvider
+       {
+               /**
+                * The target dispatcher for events.
+            *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               function get target():IEventDispatcher;
+               function set target(value:IEventDispatcher):void;
+
+               /**
+                * A convenience function to read an entire file as a single 
+                * string of text. The file is storaged in the application's
+                * data storage directory.
+                * 
+                *  @param fileName The name of the file.
+            *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               function readTextFromDataFile( fileName:String ) : void;
+               
+               /**
+                * A convenience function write a string into a file that 
resides in the
+                * application's data storage directory. If the file already 
exists it is 
+                * replaced with the string.
+                * 
+                *  @param fileName The name of file.
+                *  @param text The string to be stored.
+            *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               function writeTextToDataFile( fileName:String, text:String ) : 
void;
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/WebStorageProvider.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/WebStorageProvider.as
 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/WebStorageProvider.as
new file mode 100644
index 0000000..557b591
--- /dev/null
+++ 
b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/WebStorageProvider.as
@@ -0,0 +1,169 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.storage.providers
+{
+       import org.apache.flex.events.EventDispatcher;
+       import org.apache.flex.events.IEventDispatcher;
+
+       import org.apache.flex.storage.events.FileReadEvent;
+    import org.apache.flex.storage.events.FileWriteEvent;
+
+       /**
+        * The WebStorageProvider class implements the IPermanentStorageProvider
+        * interface for saving files to a mobile device. 
+        * 
+        * @flexjsignorecoercion FileEntry
+        * @flexjsignorecoercion FileWriter
+        * @flexjsignorecoercion window
+     * @flexjsignorecoercion Blob
+        */
+       public class WebStorageProvider extends EventDispatcher implements 
IPermanentStorageProvider
+       {
+               /**
+                * Constructor.
+                * 
+                * @param target The target dispatcher for events as files are 
read and written.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function WebStorageProvider(target:IEventDispatcher=null)
+               {
+                       super();
+                       _target = target;
+               }
+
+               /**
+                * @private
+                */
+               private var _target:IEventDispatcher;
+
+               /**
+                * The target dispatcher for events as files are read and 
written.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function get target():IEventDispatcher
+               {
+                       return _target;
+               }
+               public function set target(value:IEventDispatcher):void
+               {
+                       _target = value;
+               }
+               
+               /**
+                * A convenience function to read an entire file as a single 
+                * string of text. The file is storaged in the application's
+                * data storage directory. Dispatches a FileRead event once
+                * the data is available.
+                * 
+                *  @param fileName The name of the file.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function readTextFromDataFile( fileName:String ) : void
+               {
+                       COMPILE::JS {
+                               var fullPath:String = 
String(cordova["file"]["dataDirectory"]) + fileName;
+                               
+                               window.resolveLocalFileSystemURL(fullPath, 
function (fileEntry):void {
+                                       fileEntry.file(function (file):void {
+                                               var reader:FileReader = new 
FileReader();
+                                               reader.onloadend = function 
(e):void {
+                                                       var 
newEvent:FileReadEvent = new FileReadEvent("COMPLETE");
+                                                       newEvent.data = 
this.result;
+                                                       
_target.dispatchEvent(newEvent);
+                                               };
+                                               reader.readAsText(file);
+                                       }, function (e):void {
+                                               var errEvent:FileReadEvent = 
new FileReadEvent("ERROR");
+                                               errEvent.errorMessage = "Cannot 
open file for reading";
+                                               _target.dispatchEvent(errEvent);
+                                       });
+                               }, function (e):void {
+                                       var errEvent:FileReadEvent = new 
FileReadEvent("ERROR");
+                                       errEvent.errorMessage = "File does not 
exist";
+                                       _target.dispatchEvent(errEvent);
+                               });
+                       }
+               }
+               
+               /**
+                * A convenience function write a string into a file that 
resides in the
+                * application's data storage directory. If the file already 
exists it is 
+                * replaced with the string. Dispatches a FileWrite event once 
the file
+                * has been written.
+                * 
+                *  @param fileName The name of file.
+                *  @param text The string to be stored.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function writeTextToDataFile( fileName:String, 
text:String ) : void
+               {
+                       COMPILE::JS {
+                               var fullPath:String = 
String(cordova["file"]["dataDirectory"]) + fileName;
+               
+                               
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function 
(directoryEntry):void {
+                                       directoryEntry.getFile(fileName, { 
'create': true }, function (fileEntry):void {
+                                               fileEntry.createWriter(function 
(fileWriter):void {
+                                                       fileWriter.onwriteend = 
function (e):void {
+                                                               var 
newEvent:FileWriteEvent = new FileWriteEvent("COMPLETE");
+                                                               
_target.dispatchEvent(newEvent);
+                                                       };
+                                                       
+                                                       fileWriter.onerror = 
function (e):void {
+                                                               var 
newEvent:FileWriteEvent = new FileWriteEvent("ERROR");
+                                                               
newEvent.errorMessage = "Failed to write the file.";
+                                                               
_target.dispatchEvent(newEvent);
+                                                       };
+                                                       
+                                                       var blob:Blob = new 
Blob([text], { type: 'text/plain' });
+                                                       fileWriter.write(blob);
+                                               }, function(e):void {
+                                                       var 
errEvent:FileWriteEvent = new FileWriteEvent("ERROR");
+                                                       errEvent.errorMessage = 
"Cannot open file for writing.";
+                                                       
_target.dispatchEvent(errEvent);
+                                               });
+                                       }, function(e):void {
+                                               var errEvent:FileWriteEvent = 
new FileWriteEvent("ERROR");
+                                               errEvent.errorMessage = "Cannot 
create file.";
+                                               _target.dispatchEvent(errEvent);
+                                       });
+                               }, function(e):void {
+                                       var errEvent:FileWriteEvent = new 
FileWriteEvent("ERROR");
+                                       errEvent.errorMessage = "Cannot create 
file.";
+                                       _target.dispatchEvent(errEvent);
+                               });
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Storage/src/main/resources/basic-manifest.xml
index b502203..b82c859 100644
--- a/frameworks/projects/Storage/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Storage/src/main/resources/basic-manifest.xml
@@ -21,4 +21,5 @@
 
 <componentPackage>
        <component id="LocalStorage" 
class="org.apache.flex.storage.LocalStorage"/>
+       <component id="PermanentStorage" 
class="org.apache.flex.storage.PermanentStorage"/>
 </componentPackage>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/1bc555d9/frameworks/projects/Storage/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/resources/defaults.css 
b/frameworks/projects/Storage/src/main/resources/defaults.css
index 9d82e6f..dd88207 100644
--- a/frameworks/projects/Storage/src/main/resources/defaults.css
+++ b/frameworks/projects/Storage/src/main/resources/defaults.css
@@ -23,4 +23,20 @@
 LocalStorage
 {
     IStorageProvider: 
ClassReference("org.apache.flex.storage.providers.LocalStorageProvider");
+}
+
+PermanentStorage
+{
+       IStorageProvider: 
ClassReference("org.apache.flex.storage.providers.WebStorageProvider");
+}
+
+@media -flex-flash
+{
+/**
+ * StorageProvider for AIR platform
+ */
+PermanentStorage
+{
+       IStorageProvider: 
ClassReference("org.apache.flex.storage.providers.AirStorageProvider");
+}      
 }
\ No newline at end of file

Reply via email to