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/04/06 17:06:17 UTC

[19/50] [abbrv] git commit: [flex-asjs] [refs/heads/master] - 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 specific

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/master
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