You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/03/24 20:59:35 UTC
[14/37] git commit: [flex-asjs] [refs/heads/spark] - Updated Storage
project by separating the implementation into a CSS-accessible class from the
developer-facing class. The initial JavaScript implementation follows the W3C
web storage specification; th
Updated Storage project by separating the implementation into a CSS-accessible class from the developer-facing class. The initial JavaScript implementation follows the W3C web storage specification; the Flash side uses SharedObject.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/75ee02d2
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/75ee02d2
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/75ee02d2
Branch: refs/heads/spark
Commit: 75ee02d2817d5a5c6bf8e976bfd8a305bb5b09e5
Parents: 392faf5
Author: Peter Ent <pe...@apache.org>
Authored: Thu Feb 25 17:24:22 2016 -0500
Committer: Peter Ent <pe...@apache.org>
Committed: Thu Feb 25 17:24:22 2016 -0500
----------------------------------------------------------------------
.../Storage/src/main/flex/StorageClasses.as | 5 +-
.../flex/org/apache/flex/storage/IWebStorage.as | 100 +++++++++
.../org/apache/flex/storage/LocalStorage.as | 120 +++-------
.../storage/providers/LocalStorageProvider.as | 220 +++++++++++++++++++
.../src/main/resources/basic-manifest.xml | 2 +-
.../src/main/resources/compile-asjs-config.xml | 4 +
.../src/main/resources/compile-config.xml | 5 +
.../Storage/src/main/resources/defaults.css | 26 +++
8 files changed, 388 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/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 1f6b80a..db34477 100644
--- a/frameworks/projects/Storage/src/main/flex/StorageClasses.as
+++ b/frameworks/projects/Storage/src/main/flex/StorageClasses.as
@@ -16,7 +16,7 @@
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
-package
+package
{
/**
@@ -26,8 +26,9 @@ package
* from the classes specified in manifest.xml.
*/
internal class StorageClasses
-{
+{
import org.apache.flex.storage.LocalStorage; LocalStorage;
+ import org.apache.flex.storage.providers.LocalStorageProvider; LocalStorageProvider;
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IWebStorage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IWebStorage.as b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IWebStorage.as
new file mode 100644
index 0000000..3bc044d
--- /dev/null
+++ b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/IWebStorage.as
@@ -0,0 +1,100 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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
+{
+/**
+ * The IWebStorage interface provides a template for classes to use that wish
+ * to allow storage of small amounts of data into a web browser or perhaps on a
+ * mobile device.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ */
+public interface IWebStorage
+{
+ /**
+ * Returns true if the platform provides local storage.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ function storageAvailable() : Boolean;
+
+ /**
+ * Stores a value with a key.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ function setItem(key:String, value:String) : Boolean;
+
+ /**
+ * Returns the value of a key, if present. If the key is not
+ * present in the storage area, null or undefined may be returned.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ function getItem(key:String) : String;
+
+ /**
+ * Removes the key=value pair from storage.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ function removeItem(key:String) : Boolean;
+
+ /**
+ * Returns true if there is a value associated with the key.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ function hasItem(key:String) : Boolean;
+
+ /**
+ * Clears the storage area of all key=value pairs.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ function clear() : void;
+}
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/LocalStorage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/LocalStorage.as b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/LocalStorage.as
index 9edd82c..1a6018e 100644
--- a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/LocalStorage.as
+++ b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/LocalStorage.as
@@ -18,20 +18,25 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.storage
{
-COMPILE::AS3 {
- import flash.net.SharedObject;
-}
+ import org.apache.flex.storage.providers.LocalStorageProvider;
+ import org.apache.flex.core.ValuesManager;
/**
* The LocalStorage class allows apps to store small amounts of data
* locally, in the browser's permitted storage area. This data will persist
* between browser invocations. The data is stored in key=value pairs.
*
+ * This class uses the ValuesManager to determine a storage provider - an implementation
+ * class the actually does the storing and retrieving. To change the provider implementation,
+ * set a ClassReference for the LocalStorage CSS style. The default is the
+ * org.apache.flex.storage.providers.LocalStorageProvider class.
+ *
+ * @see org.apache.flex.storage.IWebStorage
+ * @see org.apache.flex.storage.provides.LocalStorageProvider
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion FlexJS 0.0
- * @flexjsignoreimport window
*/
public class LocalStorage
{
@@ -47,17 +52,13 @@ public class LocalStorage
*/
public function LocalStorage()
{
- COMPILE::AS3 {
- try {
- sharedObject = SharedObject.getLocal("flexjs","/",false);
- } catch(e) {
- sharedObject = null;
- }
- }
+ storageProvider = ValuesManager.valuesImpl.newInstance(this, "iStorageProvider") as IWebStorage;
}
- COMPILE::AS3
- private var sharedObject:SharedObject;
+ /**
+ * The implementation of the storage system.
+ */
+ private var storageProvider:IWebStorage;
/**
* Returns true if the platform provides local storage.
@@ -70,26 +71,11 @@ public class LocalStorage
*/
public function storageAvailable():Boolean
{
- var result:Boolean = false;
-
- COMPILE::AS3 {
- result = (sharedObject != null);
- }
-
- COMPILE::JS {
- try {
- result = 'localStorage' in window && window['localStorage'] !== null;
- } catch(e) {
- result = false;
- }
- }
-
- return result;
+ return storageProvider.storageAvailable();
}
/**
- * Stores a value with a key. The value may be converted to a String, depending
- * on the platform.
+ * Stores a value with a key.
*
* @langversion 3.0
* @playerversion Flash 10.2
@@ -97,20 +83,12 @@ public class LocalStorage
* @productversion FlexJS 0.0
* @flexjsignoreimport window
*/
- public function setItem(key:String, value:String) : Boolean
+ public function setItem(key:String, value:Object) : Boolean
{
- if (!storageAvailable()) return false;
-
- COMPILE::AS3 {
- sharedObject.data[key] = value;
- sharedObject.flush();
- }
-
- COMPILE::JS {
- window.localStorage.setItem(key, value);
- }
-
- return true;
+ // turn the value into a string in some fashion, if possible, return
+ // the knowlege of what type value really is for getItem().
+ var valueAsString:String = value.toString();
+ return storageProvider.setItem(key, valueAsString);
}
/**
@@ -124,21 +102,12 @@ public class LocalStorage
* @productversion FlexJS 0.0
* @flexjsignoreimport window
*/
- public function getItem(key:String) : String
+ public function getItem(key:String) : Object
{
- if (!storageAvailable()) return null;
-
- var result:String = null;
-
- COMPILE::AS3 {
- result = sharedObject.data[key] as String;
- }
-
- COMPILE::JS {
- result = window.localStorage.getItem(key);
- }
-
- return result;
+ var value:Object = storageProvider.getItem(key);
+ // perhaps figure out what value is exactly and return that
+ // object.
+ return value;
}
/**
@@ -154,18 +123,7 @@ public class LocalStorage
*/
public function removeItem(key:String) : Boolean
{
- if (!storageAvailable()) return null;
-
- COMPILE::AS3 {
- delete sharedObject.data[key];
- sharedObject.flush();
- }
-
- COMPILE::JS {
- window.localStorage.removeItem(key);
- }
-
- return true;
+ return storageProvider.removeItem(key);
}
/**
@@ -179,19 +137,7 @@ public class LocalStorage
*/
public function hasItem(key:String) : Boolean
{
- if (!storageAvailable()) return false;
-
- var result:Boolean = false;
-
- COMPILE::AS3 {
- result = sharedObject.data.hasOwnProperty(key);
- }
-
- COMPILE::JS {
- result = (window.localStorage[key] !== null);
- }
-
- return result;
+ return storageProvider.hasItem(key);
}
/**
@@ -205,15 +151,7 @@ public class LocalStorage
*/
public function clear() : void
{
- if (!storageAvailable()) return;
-
- COMPILE::AS3 {
- sharedObject.clear();
- }
-
- COMPILE::JS {
- window.localStorage.clear();
- }
+ storageProvider.clear();
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/LocalStorageProvider.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/LocalStorageProvider.as b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/LocalStorageProvider.as
new file mode 100644
index 0000000..5370923
--- /dev/null
+++ b/frameworks/projects/Storage/src/main/flex/org/apache/flex/storage/providers/LocalStorageProvider.as
@@ -0,0 +1,220 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.storage.IWebStorage;
+
+COMPILE::AS3 {
+ import flash.net.SharedObject;
+}
+
+/**
+ * The LocalStorageProvider class allows apps to store small amounts of data
+ * locally, in the browser's permitted storage area. This data will persist
+ * between browser invocations. The data is stored in key=value pairs and the
+ * value must be a string.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+public class LocalStorageProvider implements IWebStorage
+{
+
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function LocalStorageProvider()
+ {
+ COMPILE::AS3 {
+ try {
+ sharedObject = SharedObject.getLocal("flexjs","/",false);
+ } catch(e) {
+ sharedObject = null;
+ }
+ }
+ }
+
+ COMPILE::AS3
+ private var sharedObject:SharedObject;
+
+ /**
+ * Returns true if the platform provides local storage.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function storageAvailable():Boolean
+ {
+ var result:Boolean = false;
+
+ COMPILE::AS3 {
+ result = (sharedObject != null);
+ }
+
+ COMPILE::JS {
+ try {
+ result = 'localStorage' in window && window['localStorage'] !== null;
+ } catch(e) {
+ result = false;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Stores a value with a key.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function setItem(key:String, value:String) : Boolean
+ {
+ if (!storageAvailable()) return false;
+
+ COMPILE::AS3 {
+ sharedObject.data[key] = value;
+ sharedObject.flush();
+ }
+
+ COMPILE::JS {
+ window.localStorage.setItem(key, value);
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the value associated with the key, or undefined if there is
+ * no value stored. Note that a String version of the value is stored.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function getItem(key:String) : String
+ {
+ if (!storageAvailable()) return null;
+
+ var result:String = null;
+
+ COMPILE::AS3 {
+ result = sharedObject.data[key] as String;
+ }
+
+ COMPILE::JS {
+ result = window.localStorage.getItem(key);
+ }
+
+ return result;
+ }
+
+ /**
+ * Removed the value and, possibly, the key from local storage. On some
+ * platforms, retriving the value after removing it will be an error, on
+ * others it may return undefined or null.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function removeItem(key:String) : Boolean
+ {
+ if (!storageAvailable()) return null;
+
+ COMPILE::AS3 {
+ delete sharedObject.data[key];
+ sharedObject.flush();
+ }
+
+ COMPILE::JS {
+ window.localStorage.removeItem(key);
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns true if there is a value stored for the key.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function hasItem(key:String) : Boolean
+ {
+ if (!storageAvailable()) return false;
+
+ var result:Boolean = false;
+
+ COMPILE::AS3 {
+ result = sharedObject.data.hasOwnProperty(key);
+ }
+
+ COMPILE::JS {
+ result = (window.localStorage[key] !== null);
+ }
+
+ return result;
+ }
+
+ /**
+ * Clears all values from local storage.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion FlexJS 0.0
+ * @flexjsignoreimport window
+ */
+ public function clear() : void
+ {
+ if (!storageAvailable()) return;
+
+ COMPILE::AS3 {
+ sharedObject.clear();
+ }
+
+ COMPILE::JS {
+ window.localStorage.clear();
+ }
+ }
+}
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/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 cd0f5b4..b502203 100644
--- a/frameworks/projects/Storage/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Storage/src/main/resources/basic-manifest.xml
@@ -20,5 +20,5 @@
<componentPackage>
-
+ <component id="LocalStorage" class="org.apache.flex.storage.LocalStorage"/>
</componentPackage>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/frameworks/projects/Storage/src/main/resources/compile-asjs-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/resources/compile-asjs-config.xml b/frameworks/projects/Storage/src/main/resources/compile-asjs-config.xml
index 0d410aa..6b3c6d5 100644
--- a/frameworks/projects/Storage/src/main/resources/compile-asjs-config.xml
+++ b/frameworks/projects/Storage/src/main/resources/compile-asjs-config.xml
@@ -42,6 +42,10 @@
<locale/>
<library-path>
+ <!-- asjscompc won't 'link' these classes in, but will list their requires
+ if these swcs are on the external-library-path then their requires
+ will not be listed -->
+ <path-element>../../../../../externs/Core.swc</path-element>
</library-path>
<namespaces>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/frameworks/projects/Storage/src/main/resources/compile-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Storage/src/main/resources/compile-config.xml b/frameworks/projects/Storage/src/main/resources/compile-config.xml
index bdd4048..8ca6f9c 100644
--- a/frameworks/projects/Storage/src/main/resources/compile-config.xml
+++ b/frameworks/projects/Storage/src/main/resources/compile-config.xml
@@ -23,6 +23,7 @@
<external-library-path>
<path-element>${env.AIR_HOME}/frameworks/libs/air/airglobal.swc</path-element>
+ <path-element>../../../../../libs/Core.swc</path-element>
</external-library-path>
<mxml>
@@ -59,6 +60,10 @@
</compiler>
<include-file>
+ <name>defaults.css</name>
+ <path>defaults.css</path>
+ </include-file>
+ <include-file>
<name>js/out/*</name>
<path>../../../target/generated-sources/flexjs/*</path>
</include-file>
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/75ee02d2/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
new file mode 100644
index 0000000..9d82e6f
--- /dev/null
+++ b/frameworks/projects/Storage/src/main/resources/defaults.css
@@ -0,0 +1,26 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+@namespace "library://ns.apache.org/flexjs/basic";
+@namespace svg "library://ns.apache.org/flexjs/svg";
+
+LocalStorage
+{
+ IStorageProvider: ClassReference("org.apache.flex.storage.providers.LocalStorageProvider");
+}
\ No newline at end of file