Even more enhanced seeking.

Even more enhanced seeking.

Also made verbose tag logging optional and off by default.

--- HLSPlugin/src/org/osmf/net/httpstreaming/HLSHTTPNetStream.as
+++ HLSPlugin/src/org/osmf/net/httpstreaming/HLSHTTPNetStream.as
@@ -114,6 +114,8 @@
 		public static var writeToMasterBuffer:Boolean = false;
 		public static var _masterBuffer:ByteArray = new ByteArray();

+		public static var logEveryPacket:Boolean = false;
+
 		private var neverPlayed:Boolean = true;
 		private var neverBuffered:Boolean = true; // Set after first buffering event.
 		private var bufferBias:Number = 0.0; // Used to forcibly add more time to the buffer based on other logic.
@@ -1970,7 +1972,8 @@

 			CONFIG::LOGGING
 			{
-				logger.debug("Saw tag @ " + realTimestamp + " timestamp=" + tag.timestamp + " currentTime=" + currentTime + " _seekTime=" + _seekTime + " _enhancedSeekTarget="+ _enhancedSeekTarget + " dataSize=" + tag.dataSize);
+				if(logEveryPacket)
+					logger.debug("Saw tag @ " + realTimestamp + " timestamp=" + tag.timestamp + " currentTime=" + currentTime + " _seekTime=" + _seekTime + " _enhancedSeekTarget="+ _enhancedSeekTarget + " dataSize=" + tag.dataSize);
 			}

 			if (_playForDuration >= 0)
@@ -1996,8 +1999,7 @@
 			if (!isNaN(_enhancedSeekTarget))
 			{
 				// Note if we have encountered an I-frame.
-				if(isTagIFrame(tag as FLVTagVideo))
-					_enhancedSeekSawIFrame = true;
+				var sawIFrame:Boolean = isTagIFrame(tag as FLVTagVideo);

 				if (currentTime < _enhancedSeekTarget || (_enhancedSeekTags != null && _enhancedSeekSawIFrame == false))
 				{
@@ -2011,6 +2013,9 @@
 						_enhancedSeekTags = new Vector.<FLVTag>();
 						_enhancedSeekSawIFrame = false;
 					}
+
+					if(sawIFrame)
+						_enhancedSeekSawIFrame = true;

 					if (tag is FLVTagVideo)
 					{
@@ -2330,7 +2335,8 @@
 			{
 				CONFIG::LOGGING
 				{
-					logger.debug("Saw super.bufferLength " + super.bufferLength + " < " + bufferFeedMin);
+					if(logEveryPacket)
+						logger.debug("Saw super.bufferLength " + super.bufferLength + " < " + bufferFeedMin);
 				}
 				return;
 			}
@@ -2402,19 +2408,22 @@
 				// Do writing.
 				CONFIG::LOGGING
 				{
-					logger.debug("Writing tag " + buffer.length + " bytes @ " + lastWrittenTime + "sec type=" + tag.tagType + (isTagAVCC(tag as FLVTagVideo) ? " avcc" : "") + (isTagIFrame(tag as FLVTagVideo) ? " iframe" : ""));
-
-					if(tag is FLVTagScriptDataObject)
-					{
-						try
+					if(logEveryPacket)
+					{
+						logger.debug("Writing tag " + buffer.length + " bytes @ " + lastWrittenTime + "sec type=" + tag.tagType + (isTagAVCC(tag as FLVTagVideo) ? " avcc" : "") + (isTagIFrame(tag as FLVTagVideo) ? " iframe" : ""));
+
+						if(tag is FLVTagScriptDataObject)
 						{
-							var obj:Array = (tag as FLVTagScriptDataObject).objects;
-							for(var j:int=0; j<obj.length; j++)
-								logger.debug("SCRIPT: " + JSON.stringify(obj[j]));
-						}
-						catch(e:*)
-						{
-							logger.debug("FAILED TO PARSE SCRIPT");
+							try
+							{
+								var obj:Array = (tag as FLVTagScriptDataObject).objects;
+								for(var j:int=0; j<obj.length; j++)
+									logger.debug("SCRIPT: " + JSON.stringify(obj[j]));
+							}
+							catch(e:*)
+							{
+								logger.debug("FAILED TO PARSE SCRIPT");
+							}
 						}
 					}
 				}


Disable more debug log.

Disable more debug log.

--- HLSPlugin/src/org/osmf/net/httpstreaming/HLSHTTPNetStream.as
+++ HLSPlugin/src/org/osmf/net/httpstreaming/HLSHTTPNetStream.as
@@ -1550,7 +1550,7 @@
 							// and then pass through the rest of the segment
 							bytes = new ByteArray();
 							_flvParser.flush(bytes);
-							trace("Flushing " + bytes.length);
+							//trace("Flushing " + bytes.length);
 							_flvParser = null;
 						}
 					}
@@ -1742,7 +1742,7 @@
 							bytes = new ByteArray();
 							tag.write(bytes);
 							_flvParserProcessed += bytes.length;
-							trace("[1] APPEND BYTES tag.timestamp=" + tag.timestamp + " length=" + bytes.length);
+							//trace("[1] APPEND BYTES tag.timestamp=" + tag.timestamp + " length=" + bytes.length);
 							attemptAppendBytes(bytes);

 							if (_playForDuration >= 0)
@@ -1763,7 +1763,7 @@
 					// finally, pass this one on to appendBytes...
 					var bytes:ByteArray = new ByteArray();
 					tag.write(bytes);
-					trace("[2] APPEND BYTES tag.timestamp=" + tag.timestamp + " length=" + bytes.length);
+					//trace("[2] APPEND BYTES tag.timestamp=" + tag.timestamp + " length=" + bytes.length);
 					attemptAppendBytes(bytes);
 					_flvParserProcessed += bytes.length;


Changed CSVColumn.validate() to use "String(x)" instead of "x as String"

--- WeaveData/src/weave/data/AttributeColumns/CSVColumn.as
+++ WeaveData/src/weave/data/AttributeColumns/CSVColumn.as
@@ -129,13 +129,13 @@
 			var table:Array = data.getSessionState() as Array || [];
 			for (var i:int = 0; i < table.length; i++)
 			{
-				var row:Array = table[i] as Array;
-				if (row.length == 0)
+				var row:Array = table[i] as Array;
+				if (row == null || row.length == 0)
 					continue; // skip blank lines

 				// get the key from the first column and the value from the second.
-				key = WeaveAPI.QKeyManager.getQKey(keyType.value, row[0] as String);
-				value = (row.length > 1 ? row[1] : '') as String;
+				key = WeaveAPI.QKeyManager.getQKey(keyType.value, String(row[0]));
+				value = String(row.length > 1 ? row[1] : '');

 				// save the results of parsing the CSV row
 				_keyToIndexMap[key] = _keys.length;


Transferred from the Adobe Open Source Subversion Repository

Revision: 18223
Author:   jasonsj@adobe.com
Date:     2010-10-19T18:54:19.289491Z

Log Message:
-----------
Fix ActionBar style declarations. Organize imports.

QE notes: Fixes mobile mustella compile errors
Doc notes:
Bugs:
Reviewer: chiedozi
Tests run: checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/MobileItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ButtonBase.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1263958 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mobilecomponents/src/spark/components/LabelItemRenderer.as
+++ frameworks/projects/mobilecomponents/src/spark/components/LabelItemRenderer.as
@@ -11,36 +11,20 @@

 package spark.components
 {
-import flash.display.DisplayObject;
 import flash.events.MouseEvent;
-import flash.geom.Point;
-import flash.text.TextField;
-import flash.text.TextFieldType;
-import flash.text.TextFormat;
-import flash.text.TextFormatAlign;
 import flash.text.TextLineMetrics;

 import mx.controls.listClasses.*;
 import mx.core.IDataRenderer;
 import mx.core.IFlexDisplayObject;
-import mx.core.IFlexModuleFactory;
 import mx.core.ILayoutElement;
-import mx.core.IVisualElement;
 import mx.core.InteractionMode;
 import mx.core.UIComponent;
 import mx.core.UITextField;
 import mx.core.mx_internal;
 import mx.events.FlexEvent;
-import mx.utils.StringUtil;
-
-import spark.components.Group;
-import spark.components.IItemRenderer;
-import spark.components.Image;
-import spark.components.Label;
+
 import spark.components.supportClasses.StyleableTextField;
-import spark.components.supportClasses.TextBase;
-import spark.core.ContentCache;
-import spark.primitives.BitmapImage;

 use namespace mx_internal;


Adding documentation to HLSManifestENcryptionKey

--- HLSPlugin/src/com/kaltura/hls/manifest/HLSManifestEncryptionKey.as
+++ HLSPlugin/src/com/kaltura/hls/manifest/HLSManifestEncryptionKey.as
@@ -13,6 +13,14 @@
 	import flash.utils.Dictionary;
 	import flash.utils.getTimer;

+	/**
+	 * HLSManifestEncryptionKey is used to parse AES decryption key data from a m3u8
+	 * manifest, load the specified key file into memory, and use the key data to decrypt
+	 * audio and video streams. It supports AES-128 encryption with #PKCS7 padding, as well
+	 * as explicitly set Initialization Vectors. If an Initialization Vector is not provided,
+	 * the segment id of the stream to be decrypted will be used.
+	 */
+
 	public class HLSManifestEncryptionKey extends EventDispatcher
 	{
 		private static const LOADER_CACHE:Dictionary = new Dictionary();
@@ -58,7 +66,9 @@
 				{
 					case "URI" :
 						result.url = value;
-						//result.url = "http://localhost:5000/video.key";
+						// Uncomment the line below to use a local key for debugging instead,
+						// requires file to exist
+						// result.url = "http://localhost:5000/video.key";
 						break;

 					case "IV" :
@@ -75,6 +85,14 @@
 		{
 			for ( var key:String in LOADER_CACHE ) delete LOADER_CACHE[ key ];
 		}
+
+		/**
+		 * Decrypts a video or audio stream using AES-128. If an Initialization Vector was not provided
+		 * during key creation, the passed in segment id of the video will be converted to
+		 * a 32 Byte ByteArray and used as the IV.
+		 *
+		 * Note: Segment IDs passed in cannot exceed 2^32
+		 */

 		public function decrypt( data:ByteArray, segmentId:uint = 0 ):void
 		{


implements flash.geom.Rectangle

implements flash.geom.Rectangle

--- src/flash/geom/Rectangle.as
+++ src/flash/geom/Rectangle.as
@@ -1,44 +1,178 @@
-package flash.geom {
-  import Object;
+package flash.geom
+{
   import flash.geom.Point;
-  import flash.geom.Point;
-  import Math;
-  public class Rectangle {
-    public function Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0) {}
+
+  public class Rectangle
+  {
     public var x:Number;
     public var y:Number;
     public var width:Number;
     public var height:Number;
-    public function get left():Number { notImplemented("left"); }
-    public function set left(value:Number):void { notImplemented("left"); }
-    public function get right():Number { notImplemented("right"); }
-    public function set right(value:Number):void { notImplemented("right"); }
-    public function get top():Number { notImplemented("top"); }
-    public function set top(value:Number):void { notImplemented("top"); }
-    public function get bottom():Number { notImplemented("bottom"); }
-    public function set bottom(value:Number):void { notImplemented("bottom"); }
-    public function get topLeft():Point { notImplemented("topLeft"); }
-    public function set topLeft(value:Point):void { notImplemented("topLeft"); }
-    public function get bottomRight():Point { notImplemented("bottomRight"); }
-    public function set bottomRight(value:Point):void { notImplemented("bottomRight"); }
-    public function get size():Point { notImplemented("size"); }
-    public function set size(value:Point):void { notImplemented("size"); }
-    public function clone():Rectangle { notImplemented("clone"); }
-    public function isEmpty():Boolean { notImplemented("isEmpty"); }
-    public function setEmpty():void { notImplemented("setEmpty"); }
-    public function inflate(dx:Number, dy:Number):void { notImplemented("inflate"); }
-    public function inflatePoint(point:Point):void { notImplemented("inflatePoint"); }
-    public function offset(dx:Number, dy:Number):void { notImplemented("offset"); }
-    public function offsetPoint(point:Point):void { notImplemented("offsetPoint"); }
-    public function contains(x:Number, y:Number):Boolean { notImplemented("contains"); }
-    public function containsPoint(point:Point):Boolean { notImplemented("containsPoint"); }
-    public function containsRect(rect:Rectangle):Boolean { notImplemented("containsRect"); }
-    public function intersection(toIntersect:Rectangle):Rectangle { notImplemented("intersection"); }
-    public function intersects(toIntersect:Rectangle):Boolean { notImplemented("intersects"); }
-    public function union(toUnion:Rectangle):Rectangle { notImplemented("union"); }
-    public function equals(toCompare:Rectangle):Boolean { notImplemented("equals"); }
-    public function toString():String { notImplemented("toString"); }
-    public function copyFrom(sourceRect:Rectangle):void { notImplemented("copyFrom"); }
-    public function setTo(xa:Number, ya:Number, widtha:Number, heighta:Number):void { notImplemented("setTo"); }
+
+    public function Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0) {
+      this.x = x;
+      this.y = y;
+      this.width = width;
+      this.height = height;
+    }
+
+    public function get left():Number {
+      return x;
+    }
+    public function set left(value:Number):void {
+      width += x - value
+      x = value;
+    }
+
+    public function get right():Number {
+      return x + width;
+    }
+    public function set right(value:Number):void {
+      width = value - x;
+    }
+
+    public function get top():Number {
+      return y;
+    }
+    public function set top(value:Number):void {
+      height += y - value;
+      y = value;
+    }
+
+    public function get bottom():Number {
+      return y + height;
+    }
+    public function set bottom(value:Number):void {
+      height = value - y;
+    }
+
+    public function get topLeft():Point {
+      return new Point(left, top);
+    }
+    public function set topLeft(value:Point):void {
+      top = value.y;
+      left = value.x;
+    }
+
+    public function get bottomRight():Point {
+      return new Point(right, bottom);
+    }
+    public function set bottomRight(value:Point):void {
+      bottom = value.y;
+      right = value.x;
+    }
+
+    public function get size():Point {
+      return new Point(width, height);
+    }
+    public function set size(value:Point):void {
+      width = value.x;
+      height = value.y;
+    }
+
+    public function clone():Rectangle {
+      return new Rectangle(x, y, width, height);
+    }
+
+    public function isEmpty():Boolean {
+      return width <= 0 || height <= 0;
+    }
+
+    public function setEmpty():void {
+      x = 0;
+      y = 0;
+      width = 0;
+      height = 0;
+    }
+
+    public function inflate(dx:Number, dy:Number):void {
+      x -= dx;
+      y -= dy;
+      width += (dx * 2);
+      height += (dy * 2);
+    }
+
+    public function inflatePoint(point:Point):void {
+      inflate(point.x, point.y);
+    }
+
+    public function offset(dx:Number, dy:Number):void {
+      x += dx;
+      y += dy;
+    }
+
+    public function offsetPoint(point:Point):void {
+      offset(point.x, point.y);
+    }
+
+    public function contains(x:Number, y:Number):Boolean {
+      return this.x <= x && x <= this.right && this.y <= y && y <= this.bottom;
+    }
+
+    public function containsPoint(point:Point):Boolean {
+      return contains(point.x, point.y);
+    }
+
+    public function containsRect(rect:Rectangle):Boolean {
+      return containsPoint(rect.topLeft) && containsPoint(rect.bottomRight);
+    }
+
+    public function intersection(toIntersect:Rectangle):Rectangle {
+      var l:Number = Math.max(x, toIntersect.x);
+      var r:Number = Math.min(right, toIntersect.right);
+      if (l <= r) {
+        var t:Number = Math.max(y, toIntersect.y);
+        var b:Number = Math.min(bottom, toIntersect.bottom);
+        if (t <= b) {
+          return new Rectangle(l, t, r - l, b - t);
+        }
+      }
+      return new Rectangle();
+    }
+
+    public function intersects(toIntersect:Rectangle):Boolean {
+      return Math.max(x, toIntersect.x) <= Math.min(right, toIntersect.right)
+          && Math.max(y, toIntersect.y) <= Math.min(bottom, toIntersect.bottom);
+    }
+
+    public function union(toUnion:Rectangle):Rectangle {
+      if (toUnion.width == 0 || toUnion.height == 0) {
+        return clone();
+      }
+      if (width == 0 || height == 0) {
+        return toUnion.clone();
+      }
+      var l:Number = Math.min(x, toUnion.x);
+      var t:Number = Math.min(y, toUnion.y);
+      return new Rectangle(l,
+                           t,
+                           Math.max(right, toUnion.right) - l,
+                           Math.max(bottom, toUnion.bottom) - t);
+    }
+
+    public function equals(toCompare:Rectangle):Boolean {
+      return x == toCompare.x
+          && y == toCompare.y
+          && width == toCompare.width
+          && height == toCompare.height;
+    }
+
+    public function copyFrom(sourceRect:Rectangle):void {
+      x = sourceRect.x;
+      y = sourceRect.y;
+      width = sourceRect.width;
+      height = sourceRect.height;
+    }
+
+    public function setTo(xa:Number, ya:Number, widtha:Number, heighta:Number):void {
+      x = xa;
+      y = ya;
+      width = widtha;
+      height = heighta;
+    }
+
+    public function toString():String {
+      return "(x=" + x + ", y=" + y + ", w=" + width + ", h=" + height + ")";
+    }
   }
 }


fix VertexStream.disposeLocalData() to make the stream static when local data is actually disposed

--- src/aerys/minko/render/geometry/stream/VertexStream.as
+++ src/aerys/minko/render/geometry/stream/VertexStream.as
@@ -408,10 +408,13 @@
 		{
 			if (_locked)
 				throw new Error('Stream data can not be disposed since it\'s locked for update.');
-			if (waitForUpload)
+			if (waitForUpload && _length != resource.numVertices)
 				_localDispose = true;
 			else
+			{
 				_data = null;
+				_usage = StreamUsage.STATIC;
+			}
 		}

 		public function dispose() : void


Added optional textureResource parameter to TextureLoader, in order to load a texture to an existing TextureResource

--- src/aerys/minko/type/loader/TextureLoader.as
+++ src/aerys/minko/type/loader/TextureLoader.as
@@ -1,8 +1,5 @@
 package aerys.minko.type.loader
 {
-	import aerys.minko.render.resource.texture.TextureResource;
-	import aerys.minko.type.Signal;
-
 	import flash.display.Bitmap;
 	import flash.display.BitmapData;
 	import flash.display.DisplayObject;
@@ -16,6 +13,9 @@
 	import flash.net.URLRequest;
 	import flash.utils.ByteArray;
 	import flash.utils.getQualifiedClassName;
+
+	import aerys.minko.render.resource.texture.TextureResource;
+	import aerys.minko.type.Signal;

 	public class TextureLoader implements ILoader
 	{
@@ -54,16 +54,16 @@
 			return _textureResource;
 		}

-		public function TextureLoader(enableMipmapping : Boolean = true)
+		public function TextureLoader(enableMipmapping : Boolean = true, textureResource : TextureResource = null)
 		{
 			_mipMapping	= enableMipmapping;

-			initialize();
-		}
-
-		private function initialize() : void
-		{
-			_textureResource 	= new TextureResource();
+			initialize(textureResource);
+		}
+
+		private function initialize(textureResource : TextureResource) : void
+		{
+			_textureResource 	= textureResource ? textureResource : new TextureResource();
 			_textureResource.setContentFromBitmapData(TextureResource.EMPTY_BITMAPDATA, _mipMapping);

 			_isComplete 		= false;


asdoc

asdoc

--- src/com/kemsky/curry.as
+++ src/com/kemsky/curry.as
@@ -1,6 +1,7 @@
 package com.kemsky
 {
     /**
+     * @private
      * Creates partially applied function
      * @param func source
      * @param args arguments to apply to func


don't know how this escaped my last commit...

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4586 542714f4-19e9-0310-aa3c-eee0fc999fb1

--- src/as/com/threerings/util/MediaContainer.as
+++ src/as/com/threerings/util/MediaContainer.as
@@ -317,6 +317,14 @@
         return 1;
     }

+    /**
+     * Called by MediaWrapper as notification that its size has changed.
+     */
+    public function containerDimensionsUpdated (newWidth :Number, newHeight :Number) :void
+    {
+        // do nothing in base MediaContainer
+    }
+
     override public function toString () :String
     {
         return "MediaContainer[url=" + _url + "]";


Fix typo that prevented parsing PictureMarkerSymbols.

--- src/com/esri/viewer/utils/LayerObjectUtil.as
+++ src/com/esri/viewer/utils/LayerObjectUtil.as
@@ -202,7 +202,7 @@
         {
             markerSymbol = symbolParser.parseSimpleMarkerSymbol(obj.simplemarkersymbol[0]);
         }
-        else if (obj.simplemarkersymbol[0])
+        else if (obj.picturemarkersymbol[0])
         {
             markerSymbol = symbolParser.parsePictureMarkerSymbol(obj.picturemarkersymbol[0]);
         }


Transferred from the Adobe Open Source Subversion Repository

Revision: 17212
Author:   clucier@adobe.com
Date:     2010-08-06T15:42:54.680152Z

Log Message:
-----------
Quick fix to prevent referencing array out of bounds.
QE notes: None
Doc notes: None
Bugs: SDK-27140
Reviewer: Carol
Tests run: Checkin
Is noteworthy for integration: No

Modified Paths:
--------------
/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/effects/Effect.as

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1260181 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/effects/Effect.as
+++ frameworks/projects/framework/src/mx/effects/Effect.as
@@ -1281,7 +1281,7 @@
      */
     public function stop():void
     {
-        var n:int = _instances.length;
+        var n:int = _instances.length - 1;
         for (var i:int = n; i >= 0; i--)
         {
             var instance:IEffectInstance = IEffectInstance(_instances[i]);


Transferred from the Adobe Open Source Subversion Repository

Revision: 16791
Author:   cframpto@adobe.com
Date:     2010-07-02T15:01:45.623336Z

Log Message:
-----------
The following changes apply to Spark DataGrid only.   Code reviews have been deferred until the implementation is closer to completion.

SDK-26855.  When the dataProvider changes the selection should be cleared and if requireSelection and at least 1 row and 1 column, either row 0 or cell 0,0 selected.  The dataProvider setter should not rely on either gridDimensions or gridSelection being set yet since it depends on the order they are all initialized when the skin is loaded.

Add FIXME to GridLayout - when scrolling may need to update the hover indices and the hover indicator if the pointer is over the grid when it is scrolled.

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Grid.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/GridSelection.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/GridLayout.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1278936 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/Grid.as
+++ frameworks/projects/spark/src/spark/components/Grid.as
@@ -769,6 +769,7 @@
         //----------------------------------

         private var _dataProvider:IList = null;
+        private var dataProviderChanged:Boolean;

         [Bindable("dataProviderChanged")]

@@ -806,13 +807,10 @@
             if (newDataProvider)
                 newDataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, dataProvider_collectionChangeHandler, false, 0, true);

+            dataProviderChanged = true;
+            invalidateProperties();
             invalidateSize();
             invalidateDisplayList();
-
-            //TBD: clear selection
-            gridDimensions.clear();
-            if (_dataProvider)
-                gridDimensions.rowCount = _dataProvider.length;

             dispatchChangeEvent("dataProviderChanged");
         }
@@ -2308,6 +2306,33 @@
             {
                 dispatchCaretChangeEvent();
                 caretChanged = false;
+            }
+
+            // If the dp changes, reset the selection and the grid dimensions.
+            // This has to be done here rather than in the dp setter because the
+            // gridSelection and gridDimensions might not be set yet, depending
+            // on the order they are initialized when the grid skin part is
+            // added to the data grid.
+            if (dataProviderChanged)
+            {
+                // Remove the current selection and, if requireSelection, make
+                // sure the selection is reset to row 0 or cell 0,0.
+                if (gridSelection)
+                {
+                    var savedRequireSelection:Boolean = gridSelection.requireSelection;
+                    gridSelection.requireSelection = false;
+                    gridSelection.removeAll();
+                    gridSelection.requireSelection = savedRequireSelection;
+                }
+
+                if (gridDimensions)
+                {
+                    gridDimensions.clear();
+                    if (_dataProvider)
+                        gridDimensions.rowCount = _dataProvider.length;
+                }
+
+                dataProviderChanged = false;
             }
         }


Transferred from the Adobe Open Source Subversion Repository

Revision: 8838
Author:   dsubrama@adobe.com
Date:     2009-07-27T21:36:59.470829Z

Log Message:
-----------
Escape out of Path's data setter early if there's no processing to do (value passed in is empty string or null).

Bug: http://bugs.adobe.com/jira/browse/SDK-19515
QA: Yes, regress
Doc: No
Reviewer: Evtim

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/Path.as

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1285748 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/primitives/Path.as
+++ frameworks/projects/spark/src/spark/primitives/Path.as
@@ -208,7 +208,7 @@

         //If there's no processing that needs to
         //occur, exit early.
-        if (value == "")
+        if (!value)
         {
             _data = value;
             return;


Transferred from the Adobe Open Source Subversion Repository

Revision: 4314
Author:   gruehle@adobe.com
Date:     2008-12-15T22:40:02.103600Z

Log Message:
-----------
Initial checkin of style support in the Spark skins. See the "Styling Gumbo Components" spec for details.

QE Notes: Bitmap compares will be different for many skins. Joan will update the bitmaps.
Doc Notes: See spec for details.
Bugs: -
Reviewer: Corey

Modified Paths:
--------------
<path kind="dir" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/assets</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxDefaultItemRenderer.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxFocusSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/ItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxScrollBarDownButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxVSliderSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxVSliderThumbSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxVScrollBarSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxListSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/mxml-2009-manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxHSliderTrackSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxScrollBarUpButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxSpinnerIncrButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxHScrollBarThumbSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxVSliderTrackSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxTextInputSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxNumericStepperSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/SparkSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxSpinnerDecrButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/FxComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxVScrollBarThumbSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxScrollBarRightButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxTextAreaSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxToggleButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxSpinnerSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxHScrollBarTrackSkin.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/styles/metadata/SparkColorStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxCheckBoxSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxScrollBarLeftButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxRadioButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxHSliderSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxHSliderThumbSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxHScrollBarSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxVScrollBarTrackSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/GroupBase.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1286072 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/skins/SparkSkin.as
+++ frameworks/projects/spark/src/spark/skins/SparkSkin.as
@@ -0,0 +1,142 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2008 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.skins.spark
+{
+import mx.components.Skin;
+import flash.geom.ColorTransform;
+import flash.display.DisplayObject;
+import mx.graphics.StrokedElement;
+import mx.graphics.SolidColor;
+import flash.events.Event;
+
+/**
+ *  Base class for spark skins.
+ */
+public class SparkSkin extends Skin
+{
+    static private const DEFAULT_COLOR_VALUE:uint = 0xCC;
+    static private const DEFAULT_COLOR:uint = 0xCCCCCC;
+    static private const DEFAULT_SYMBOL_COLOR:uint = 0x000000;
+
+    static private var colorTransform:ColorTransform = new ColorTransform();
+
+    public var colorized:Boolean = false;
+
+    /*
+     * Constructor
+     */
+    public function SparkSkin()
+    {
+        super();
+    }
+
+    /*
+     * names of items that should not be colorized by the "baseColor" style.
+     */
+    public function get colorizeExclusions():Array
+    {
+        return null;
+    }
+
+    /*
+     * names of items that should have their "color" property defined by the "symbolColor" style.
+     */
+    public function get symbolItems():Array
+    {
+        return null;
+    }
+
+    /*
+     * names of items that should have their "color" property defined by the "contentColor" style.
+     */
+    public function get contentItems():Array
+    {
+        return null;
+    }
+
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        // Do all colorizing here, before calling super.updateDisplayList(). This ensures that
+        // graphic elements are drawn correctly the first time, and don't trigger a redraw for
+        // any new colors.
+
+        var i:int;
+
+        // symbol color
+        var symbols:Array = symbolItems;
+
+        if (symbols && symbols.length > 0)
+        {
+            var symbolColor:uint = getStyle("symbolColor");
+
+            for (i = 0; i < symbols.length; i++)
+            {
+                if (this[symbols[i]])
+                    this[symbols[i]].color = symbolColor;
+            }
+        }
+
+        // content color
+        var content:Array = contentItems;
+
+        if (content && content.length > 0)
+        {
+            var contentColor:uint = getStyle("contentColor");
+
+            for (i = 0; i < content.length; i++)
+            {
+                if (this[content[i]])
+                    this[content[i]].color = contentColor;
+            }
+        }
+
+        // base color
+        var baseColor:uint = getStyle("baseColor");
+
+        if (baseColor != DEFAULT_COLOR  || colorized)
+        {
+            colorTransform.redOffset = ((baseColor & (0xFF << 16)) >> 16) - DEFAULT_COLOR_VALUE;
+            colorTransform.greenOffset = ((baseColor & (0xFF << 8)) >> 8) - DEFAULT_COLOR_VALUE;
+            colorTransform.blueOffset = (baseColor & 0xFF) - DEFAULT_COLOR_VALUE;
+            colorTransform.alphaMultiplier = alpha;
+
+            transform.colorTransform = colorTransform;
+
+            // Apply inverse colorizing to exclusions
+            var exclusions:Array = colorizeExclusions;
+
+            if (exclusions && exclusions.length > 0)
+            {
+                colorTransform.redOffset = -colorTransform.redOffset;
+                colorTransform.greenOffset = -colorTransform.greenOffset;
+                colorTransform.blueOffset = -colorTransform.blueOffset;
+
+                for (i = 0; i < exclusions.length; i++)
+                {
+                    var exclusionObject:Object = this[exclusions[i]];
+
+                    if (exclusionObject)
+                    {
+                        colorTransform.alphaMultiplier = exclusionObject.alpha;
+                        exclusionObject.transform.colorTransform = colorTransform;
+                    }
+                }
+            }
+
+            colorized = true;
+        }
+
+        // Finally, call super.updateDisplayList() after setting up the colors.
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+    }
+}
+}


small ui bug fixed

small ui bug fixed

--- flexEditor/src/org/arisgames/editor/view/NoteTagsEditorView.as
+++ flexEditor/src/org/arisgames/editor/view/NoteTagsEditorView.as
@@ -80,11 +80,13 @@
 			trace("Edit Ending");
 			if(startedEditing)
 				AppServices.getInstance().addNoteTag(GameModel.getInstance().game.gameId, gtNoteTags.getItemAt(evt.rowIndex) as NoteTag, new Responder(handleAddNoteTagSave, handleFault));
-
-			if(gtdg == (evt.currentTarget as DataGrid))
-				(gtNoteTags.getItemAt(evt.rowIndex) as NoteTag).tag = persistTag;
-			else
-				(ptNoteTags.getItemAt(evt.rowIndex) as NoteTag).tag = persistTag;
+			else
+			{
+				if(gtdg == (evt.currentTarget as DataGrid))
+					(gtNoteTags.getItemAt(evt.rowIndex) as NoteTag).tag = persistTag;
+				else
+					(ptNoteTags.getItemAt(evt.rowIndex) as NoteTag).tag = persistTag;
+			}
 			startedEditing = false;
 		}


Transferred from the Adobe Open Source Subversion Repository

Revision: 23247
Author:   cframpto@adobe.com
Date:     2011-12-20T19:21:13.134833Z

Log Message:
-----------
Remove ADOBE SYSTEMS license and replace with Apache license in headers - frameworks.  A 2nd pass will be needed to get the files not handled up by the scripts.

Modified Paths:
--------------
4959 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1290587 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/advancedgrids/src/mx/olap/OLAPAttribute.as
+++ frameworks/projects/advancedgrids/src/mx/olap/OLAPAttribute.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2009 Adobe Systems Incorporated
-//  All Rights Reserved.
+//  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
 //
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//      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.
 //
 ////////////////////////////////////////////////////////////////////////////////


Transferred from the Adobe Open Source Subversion Repository

Revision: 5101
Author:   gauravj@adobe.com
Date:     2009-02-27T05:22:45.887116Z

Log Message:
-----------
Update action script files with asdoc version tags.

QE Notes: None.
Doc Notes: Please review and update as necessary.
tests: checkintests

Modified Paths:
--------------
663 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1259659 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/core/MXMLObjectAdapter.as
+++ frameworks/projects/framework/src/mx/core/MXMLObjectAdapter.as
@@ -18,6 +18,11 @@
  *  the interface without defining all of the methods.
  *  All implementations are the equivalent of no-ops.
  *  If the method is supposed to return something, it is null, 0, or false.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 public class MXMLObjectAdapter implements IMXMLObject
 {
@@ -31,6 +36,11 @@

 	/**
 	 *  Constructor.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
 	 */
     public function MXMLObjectAdapter()
     {
@@ -45,6 +55,11 @@

     /**
      *  @inheritDoc
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function initialized(document:Object, id:String):void
 	{


Transferred from the Adobe Open Source Subversion Repository

Revision: 9449
Author:   clucier@adobe.com
Date:     2009-08-21T14:40:22.978768Z

Log Message:
-----------
Fix for RTE when clicking on stage before preloader is complete.

QE notes: None
Doc notes: None
Bugs: SDK-22682
Reviewer: Alex
Tests run: Checkin
Is noteworthy for integration: No

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1261834 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/managers/SystemManager.as
+++ frameworks/projects/framework/src/mx/managers/SystemManager.as
@@ -3282,7 +3282,7 @@
      */
     private function stageEventHandler(event:Event):void
     {
-        if (event.target is Stage)
+        if (event.target is Stage && mouseCatcher)
             // dispatch them from mouseCatcher so capture phase listeners on
             // systemManager will work
             mouseCatcher.dispatchEvent(event);


Transferred from the Adobe Open Source Subversion Repository

Revision: 8
Author:   open-source-svn-admin@adobe.com
Date:     2007-12-15T01:49:31.087529Z

Log Message:
-----------
The beginning of the open-source Flex SDK.

Populated the flex/sdk/trunk directory with an open-source subset of files from //depot/flex/sdk/...@191097 in the Faramir Perforce server. This changelist is a bit past the 3.0rc0 build.

The Ant scripts will not successfully build yet. They need to be adapted to the open-source subset.

Modified Paths:
--------------
2532 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1274447 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/rpc/src/mx/rpc/soap/types/SOAPArrayType.as
+++ frameworks/projects/rpc/src/mx/rpc/soap/types/SOAPArrayType.as
@@ -0,0 +1,581 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2006-2007 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.rpc.soap.types
+{
+
+import mx.collections.IList;
+import mx.rpc.soap.SOAPConstants;
+import mx.rpc.soap.SOAPEncoder;
+import mx.rpc.soap.SOAPDecoder;
+import mx.rpc.wsdl.WSDLConstants;
+import mx.rpc.xml.ContentProxy;
+import mx.rpc.xml.SchemaConstants;
+import mx.rpc.xml.SchemaDatatypes;
+import mx.rpc.xml.SchemaManager;
+import mx.rpc.xml.SchemaMarshaller;
+import mx.rpc.xml.SchemaProcessor;
+import mx.rpc.xml.TypeIterator;
+import mx.rpc.xml.XMLEncoder;
+import mx.rpc.xml.XMLDecoder;
+import mx.utils.object_proxy;
+import mx.utils.StringUtil;
+import mx.utils.ObjectUtil;
+
+use namespace object_proxy;
+
+[ExcludeClass]
+
+/**
+ * Marshalls SOAP 1.1 encoded Arrays between XML and ActionScript.
+ * @private
+ */
+public class SOAPArrayType implements ICustomSOAPType
+{
+    public function SOAPArrayType()
+    {
+        super();
+        itemName = new QName("", "item");
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Methods
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Encode an ActionScript Array as a SOAP encoded Array in XML.
+     *
+     * TODO: Support soap array offset and item position attributes?
+     */
+    public function encode(encoder:SOAPEncoder, parent:XML, name:QName, value:*, restriction:XML = null):void
+    {
+        processor = encoder;
+        soapConstants = encoder.soapConstants;
+        schemaManager = encoder.schemaManager;
+        schemaConstants = schemaManager.schemaConstants;
+
+        // HACK: Handle the MXML artifact where by <mx:request> based syntax
+        // for SOAP parameters can lead to Arrays of properties being wrapped
+        // in an Object with a single property with the Array as its value.
+        value = unwrapMXMLArray(value);
+
+        // FIXME: Should we look in the restriction definition to see
+        // if a sequence was provided to define the element name? The
+        // SOAPArrayEncoder will just assume "item" for now...
+
+        if (restriction != null)
+        {
+            // Look for arrayType under <restriction base="soap-enc:Array">
+            var wsdlArrayType:String = determineWSDLArrayType(restriction, encoder.wsdlOperation.wsdlConstants);
+
+            // Parse the arrayType looking for XML Schema type, dimensions and size info
+            parseWSDLArrayType(wsdlArrayType);
+        }
+
+        schemaType = schemaManager.getQNameForPrefixedName(schemaTypeName, restriction);
+
+        // Ensure SOAP encoding namespace has been declared
+        // e.g. <myArray xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
+        parent.addNamespace(soapConstants.encodingNamespace);
+
+        // Add SOAP encoding arrayType attribute for parent node
+        // e.g. <myArray soapenc:arrayType="xsd:int[][3]">
+        encodeDimensionInformation(parent, dimensionString);
+        encodeArray(parent, dimensions, value);
+    }
+
+    /**
+     * Decodes a SOAP encoded array assuming the XML Schema type definiton
+     * uses a complexType restriction base to declare the array type, e.g.
+     *
+     * <pre>
+     * <xsd:complexType name="Example">
+     *   <xsd:complexContent mixed="false">
+     *     <xsd:restriction base="soapenc:Array">
+     *       <xsd:attribute wsdl:arrayType="tns:Example[]" ref="soapenc:arrayType"
+     *           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
+     *      </xsd:restriction>
+     *   </xsd:complexContent>
+     * </xsd:complexType>
+     * </pre>
+     */
+    public function decode(decoder:SOAPDecoder, parent:*, name:*, value:*, restriction:XML = null):void
+    {
+        processor = decoder;
+        soapConstants = decoder.soapConstants;
+        schemaManager = decoder.schemaManager;
+        schemaConstants = schemaManager.schemaConstants;
+
+        // Handle short-hand syntax for SOAP encoded arrayType
+        var valueXML:XML = value as XML;
+        if (valueXML != null)
+        {
+            var arrayTypeString:String = valueXML.@[soapConstants.soapencArrayTypeQName];
+            if (arrayTypeString != null && arrayTypeString != "")
+            {
+                parseWSDLArrayType(arrayTypeString);
+                schemaType = schemaManager.getQNameForPrefixedName(schemaTypeName, valueXML);
+            }
+        }
+
+        // Otherwise look for arrayType under <restriction base="soap-enc:Array">
+        if (schemaType == null && restriction != null)
+        {
+            var wsdlArrayType:String = determineWSDLArrayType(restriction, decoder.wsdlOperation.wsdlConstants);
+            parseWSDLArrayType(wsdlArrayType);
+            schemaType = schemaManager.getQNameForPrefixedName(schemaTypeName, restriction);
+        }
+
+        if (schemaType != null)
+        {
+            // Change the parent to an Array. Parent is originally created with
+            // createContent in the XMLDecoder, before decodeType is called. We
+            // need to make sure that the created parent can be used as an array.
+
+            if (parent is ContentProxy)
+            {
+                var proxy:ContentProxy = parent as ContentProxy;
+                proxy.object_proxy::isSimple = false;
+                // Only replace parent with iterable value if not already an IList
+                // or an Array.
+                if (!(proxy.object_proxy::content is IList) && !(proxy.object_proxy::content is Array))
+                    proxy.object_proxy::content = decoder.createIterableValue();
+            }
+
+            decodeArray(parent, dimensions, value, decoder.makeObjectsBindable);
+        }
+    }
+
+    /**
+     * Recursively called to encode a set of dimensions at a particular level
+     * (potentially many of a jagged/nested array) of an Array.
+     */
+    private function encodeArray(parent:XML, dimensions:Array, value:*):void
+    {
+        // Add XSI attribute for SOAP encoded Array
+        // e.g. <myArray xsi:type="soapenc:Array" />
+        var typeAttr:String = schemaConstants.getXSIToken(schemaConstants.typeAttrQName)
+        parent.@[typeAttr] = soapConstants.getSOAPEncodingToken(soapConstants.soapencArrayQName);
+
+        if (!TypeIterator.isIterable(value))
+            value = [value];
+
+        var iter:TypeIterator = new TypeIterator(value);
+        var d:uint = 0;
+
+        if (dimensions.length > 0)
+        {
+            // For a non-jagged Array we have a single entry that describes the
+            // length of each dimension (which can be unbounded), otherwise
+            // we have multiple entries, but the first is used to describe
+            // the number of jagged arrays at this level...
+            var entry:* = dimensions[0];
+            if (!(entry is Array))
+                entry = [entry];
+
+            for each (var dimensionSize:int in entry)
+            {
+                var itemValue:*;
+                var nestedDimension:Array;
+                var nestedDimensionString:String;
+                var nestedArray:XML;
+                d++;
+
+                if (dimensionSize < 0)
+                {
+                    // Unbounded dimension
+                    if (dimensions.length == 1)
+                    {
+                        while (iter.hasNext())
+                        {
+                            itemValue = iter.next();
+                            nestedArray = <{itemName.localName}/>;
+                            encodeArrayItem(nestedArray, itemValue);
+                            parent.appendChild(nestedArray);
+                        }
+                    }
+                    else if (dimensions.length > 1)
+                    {
+                        nestedDimensionString = "[]";
+
+                        // FIXME: We should detect before iterating whether
+                        // sufficient definitions exist for the number of
+                        // jagged arrays provided in the value...
+                        while (iter.hasNext())
+                        {
+                            itemValue = iter.next();
+                            nestedDimension = dimensions[d];
+                            nestedArray = <{itemName.localName}/>;
+                            encodeDimensionInformation(nestedArray, nestedDimensionString);
+                            encodeArray(nestedArray, nestedDimension, itemValue);
+                            parent.appendChild(nestedArray);
+                        }
+                    }
+                }
+                else
+                {
+                    // Bounded dimension
+                    for (var i:uint = 0; i < dimensionSize; i++)
+                    {
+                        itemValue = TypeIterator.getItemAt(iter.value, i);
+                        if (dimensions.length == 1)
+                        {
+                            nestedArray = <{itemName.localName}/>;
+                            encodeArrayItem(nestedArray, itemValue);
+                            parent.appendChild(nestedArray);
+                        }
+                        else if (dimensions.length > 1)
+                        {
+                            nestedDimensionString = "[" + dimensionSize + "]";
+
+                            // FIXME: We should detect invalid no. of nested
+                            // dimensions compared to value...
+                            nestedDimension = dimensions[d];
+                            nestedArray = <{itemName.localName}/>;
+                            encodeDimensionInformation(nestedArray, nestedDimensionString);
+                            encodeArray(nestedArray, nestedDimension, itemValue);
+                            parent.appendChild(nestedArray);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private function decodeArray(parent:*, dimensions:Array, value:*, makeObjectsBindable:Boolean):void
+    {
+        // If we have a single node, grab the XMLList of child elements as
+        // the actual Array members...
+        if (value is XML)
+        {
+            var dataXML:XML = value as XML;
+            value = dataXML.elements();
+        }
+
+        if (!TypeIterator.isIterable(value))
+            value = [value];
+
+        var iter:TypeIterator = new TypeIterator(value);
+        var d:uint = 0;
+
+        if (dimensions.length > 0)
+        {
+            // For a non-jagged Array we have a single entry that describes the
+            // length of each dimension (which can be unbounded), otherwise
+            // we have multiple entries, but the first is used to describe
+            // the number of jagged arrays at this level...
+            var entry:* = dimensions[0];
+            if (!(entry is Array))
+                entry = [entry];
+
+            for each (var dimensionSize:int in entry)
+            {
+                var itemValue:*;
+                var nestedDimension:Array;
+                var nestedArray:*;
+                d++;
+
+                if (dimensionSize < 0)
+                {
+                    // Unbounded dimension
+                    if (dimensions.length == 1)
+                    {
+                        while (iter.hasNext())
+                        {
+                            itemValue = iter.next();
+                            decodeArrayItem(parent, itemValue);
+                        }
+                    }
+                    else if (dimensions.length > 1)
+                    {
+                        // FIXME: We should detect before iterating whether
+                        // sufficient definitions exist for the number of
+                        // jagged arrays provided in the value...
+                        while (iter.hasNext())
+                        {
+                            itemValue = iter.next();
+                            nestedDimension = dimensions[d];
+                            nestedArray = SOAPDecoder(processor).createIterableValue(schemaType);
+                            decodeArray(nestedArray, nestedDimension, itemValue, makeObjectsBindable);
+                            TypeIterator.push(parent, nestedArray);
+                        }
+                    }
+                }
+                else
+                {
+                    // Bounded dimension
+                    for (var i:uint = 0; i < dimensionSize; i++)
+                    {
+                        itemValue = TypeIterator.getItemAt(iter.value, i);
+                        if (dimensions.length == 1)
+                        {
+                            decodeArrayItem(parent, itemValue);
+                        }
+                        else if (dimensions.length > 1)
+                        {
+                            // FIXME: We should detect invalid no. of nested
+                            // dimensions compared to value...
+                            nestedDimension = dimensions[d];
+                            nestedArray = SOAPDecoder(processor).createIterableValue(schemaType);
+                            decodeArray(nestedArray, nestedDimension, itemValue, makeObjectsBindable);
+                            TypeIterator.push(parent, nestedArray);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private function encodeArrayItem(item:XML, value:*):void
+    {
+        var encoder:SOAPEncoder = processor as SOAPEncoder;
+        encoder.encodeType(schemaType, item, itemName, value);
+    }
+
+    private function  decodeArrayItem(parent:*, value:*):void
+    {
+        var decoder:SOAPDecoder = processor as SOAPDecoder;
+        var item:* = decoder.createContent(schemaType);
+        decoder.decodeType(schemaType, item, itemName, value);
+        decoder.setValue(parent, itemName, item, schemaType);
+    }
+
+    private function encodeDimensionInformation(parent:XML, dimensionString:String):void
+    {
+        var uri:String = schemaType.uri;
+        var prefix:String = schemaManager.getOrCreatePrefix(uri);
+        var ns:Namespace = new Namespace(prefix, uri);
+        var arrayTypeString:String = prefix + ":" + schemaType.localName;
+        arrayTypeString = arrayTypeString + dimensionString;
+        parent.addNamespace(ns);
+        var arrayTypeAttr:String = soapConstants.getSOAPEncodingToken(soapConstants.soapencArrayTypeQName);
+        parent.@[arrayTypeAttr] = arrayTypeString;
+    }
+
+    private function getSingleElementFromNode(node:XML, ...types:Array):XML
+    {
+        var elements:XMLList = node.elements();
+        for each (var element:XML in elements)
+        {
+            if (types != null && types.length > 0)
+            {
+                for each (var type:QName in types)
+                {
+                    if (element.name() == type)
+                    {
+                        return element;
+                    }
+                }
+            }
+            else
+            {
+                return element;
+            }
+        }
+        return null;
+    }
+
+    private function determineWSDLArrayType(restriction:XML, wsdlConstants:WSDLConstants):String
+    {
+        var arrayTypeString:String = "";
+
+        // We expect a <attribute ref="soap-enc:ArrayType"> in the restriction
+        var attribute:XML = getSingleElementFromNode(restriction, schemaConstants.attributeQName);
+        if (attribute != null)
+        {
+            // The attribute must declare that it is using the SOAP encoded Array
+            // type using a ref="soapenc:Array" attribute...
+            var soapencArrayTypeRef:String = attribute.@ref;
+            var soapencArrayType:QName = schemaManager.getQNameForPrefixedName(soapencArrayTypeRef, attribute, true);
+            if (soapencArrayType == soapConstants.soapencArrayTypeQName)
+            {
+                // Next, we look for wsdl:arrayType attribute
+                arrayTypeString = attribute.attribute(wsdlConstants.wsdlArrayTypeQName).toString();
+            }
+        }
+
+        return arrayTypeString;
+    }
+
+
+    /**
+     * Parses the WSDL arrayType to determine the type of the members in a SOAP
+     * encoded array, the rank and dimensions of the Array, and potentially
+     * the size of the Array (if not unbounded).
+     *
+     * TODO: Support SOAP 1.2 syntax for Arrays.
+     *
+     * Examples:
+     * 1. An unbounded Array of strings:
+     * <xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="xsd:string[]" />
+     *
+     * 2. An Array with 5 members of type "Array of integers":
+     * <xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="xsd:int[][5]" />
+     *
+     * 3. An Array with 3 members of type "two-dimensional arrays of integers":
+     * <xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="xsd:int[,][3]" />
+     *
+     * @param wsdlArrayType The value of the wsdl:arrayType attribute that
+     * specifies the signature of the SOAP encoded array including the type and
+     * the dimensions and size information.
+     */
+    private function parseWSDLArrayType(wsdlArrayType:String):void
+    {
+        // Isolate the prefixed schemaType from the rank and length information
+        // QName *(rank) size
+        var typeName:String;
+        var startBracket:int = wsdlArrayType.indexOf("[");
+        var endBracket:int = -1;
+
+        if (startBracket > 0)
+        {
+            dimensionString = wsdlArrayType.substring(startBracket);
+            schemaTypeName = StringUtil.trim(wsdlArrayType.substring(0, startBracket));
+            endBracket = wsdlArrayType.indexOf("]", startBracket);
+        }
+
+        if (startBracket < 0 || endBracket < 0)
+        {
+            throw new Error("Invalid SOAP-encoded Array type '" + wsdlArrayType + "'.");
+        }
+
+        var rankOrSizeString:String = StringUtil.trim(wsdlArrayType.substring(startBracket));
+        var dimsArray:Array = rankOrSizeString.split("[");
+        var currentDimension:Array = dimensions;
+
+        // We process the rank from right to left as the size of the type is the
+        // right most set of brackets. Jagged arrays are treated as a nested
+        // set of dimensions.
+        for (var i:int = dimsArray.length - 1; i >= 0; i--)
+        {
+            var dimsString:String = dimsArray[i] as String;
+
+            // We should have at the very least a close bracket
+            if (dimsString.length > 0)
+            {
+                // A rank may define none [], one [x], or multiple dimensions [x,y]
+                if (currentDimension.length > 0)
+                {
+                    var newDimension:Array = [];
+                    currentDimension.push(newDimension);
+                    currentDimension = newDimension;
+                }
+                parseDimensions(wsdlArrayType, dimsString, currentDimension);
+            }
+        }
+    }
+
+    private function parseDimensions(wsdlArrayType:String, dimensionsString:String, currentDimension:Array):void
+    {
+        // Remove leading or trailing braces from [x,y,...] to reveal x,y,...
+        if (dimensionsString.charAt(0) == "[")
+            dimensionsString = dimensionsString.substring(1);
+
+        if (dimensionsString.charAt(dimensionsString.length - 1) == "]")
+            dimensionsString = dimensionsString.substring(0, dimensionsString.length - 1);
+
+        var dim:Number;
+        var dimensions:Array = dimensionsString.split(",");
+        if (dimensions.length > 0)
+        {
+            // Process each dimension from x,y,... as "x" or "y" etc...
+            for each (var dimString:String in dimensions)
+            {
+                if (dimString.length > 0)
+                {
+                    dim = parseInt(dimString);
+                    if (!isNaN(dim) && dim < int.MAX_VALUE)
+                    {
+                        currentDimension.push(int(dim));
+                    }
+                    else
+                    {
+                        throw new Error("Invalid dimension '" + dimString + "' for SOAP encoded Array type '" + wsdlArrayType +"'.");
+                    }
+                }
+                else
+                {
+                    // Unbounded dimension, record as -1
+                    currentDimension.push(-1);
+                }
+            }
+        }
+    }
+
+    /**
+     * Attempts to unwrap MXML Array properties that are wrapped in an Object
+     * with a single child element that is an Array itself.
+     *
+     * e.g. the following MXML:
+     *
+     * <mx:request>
+     *     <inputArray>
+     *         <item>A</item>
+     *         <item>B</item>
+     *     </inputArray>
+     * </mx:request>
+     *
+     * would return an Object for inputArray as {item:[A,B]} instead of
+     * simply the Array [A,B].
+     */
+    private function unwrapMXMLArray(value:*):*
+    {
+        var result:* = value;
+
+        if (!(value is Array))
+        {
+            try
+            {
+                var classInfo:Object = ObjectUtil.getClassInfo(value as Object);
+                var properties:Array = classInfo["properties"];
+                if (properties.length == 1)
+                {
+                    var property:String = properties[0];
+                    if (property != null && value.hasOwnProperty(property))
+                    {
+                        var childValue:* = value[property];
+                        if (childValue is Array)
+                        {
+                            result = childValue;
+                        }
+                    }
+                }
+            }
+            catch(e:Error)
+            {
+            }
+        }
+
+        return result;
+    }
+
+    private function get dimensions():Array
+    {
+        if (_dimensions == null)
+            _dimensions = [];
+
+        return _dimensions;
+    }
+
+    private var _dimensions:Array;
+    private var dimensionString:String;
+    private var itemName:QName;
+    private var processor:SchemaProcessor;
+    private var schemaConstants:SchemaConstants;
+    private var schemaManager:SchemaManager;
+    private var schemaTypeName:String;
+    private var schemaType:QName;
+    private var soapConstants:SOAPConstants;
+}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1248773 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/advancedgrids/src/mx/olap/OLAPMeasure.as
+++ frameworks/projects/advancedgrids/src/mx/olap/OLAPMeasure.as
@@ -0,0 +1,158 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.olap
+{
+
+import mx.olap.aggregators.SumAggregator;
+import mx.olap.aggregators.AverageAggregator;
+import mx.olap.aggregators.MaxAggregator;
+import mx.olap.aggregators.MinAggregator;
+import mx.olap.aggregators.CountAggregator;
+import mx.resources.ResourceManager;
+
+[ResourceBundle("olap")]
+
+/**
+ *  The OLAPMeasure class represents a member of the measure dimension of an OLAP cube.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class OLAPMeasure extends OLAPMember
+{
+    include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @param name The name of the OLAP element that includes the OLAP schema hierarchy of the element.
+     *  For example, "Time_Year", where "Year" is a level of the "Time" dimension in an OLAP schema.
+     *
+     *  @param displayName The name of the measure, as a String, which can be used for display.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function OLAPMeasure(name:String=null, displayName:String=null)
+    {
+        super(name, displayName);
+    }
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    // isMeasure
+    //----------------------------------
+
+    /**
+     * @private
+     */
+    override public function get isMeasure():Boolean
+    {
+        return true;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    // aggregator
+    //----------------------------------
+
+    /**
+     * @private
+     *
+     * By default we use the sum as aggregator.
+     */
+    private var _aggregator:Object = new SumAggregator;
+
+    /**
+     *  The aggregation to be performed for this measure.
+     *  You can use one of the following values for the property:
+     *  "SUM", "AVG", "MIN",
+     *  "MAX", or "COUNT".
+     *
+     *
You can also use a custom aggregator by implementing
+     *  the IOLAPCustomAggregator interface, then setting the aggregator property to
+     *  that custom aggregator, as the following example shows:

+     *
+     *
aggregator={new CustomAgg()}

+     *
+     *  @see mx.olap.IOLAPCustomAggregator
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function get aggregator():Object
+    {
+        return _aggregator;
+    }
+
+    /**
+     * @private
+     */
+    public function set aggregator(value:Object):void
+    {
+        _aggregator = value;
+        if (value is String)
+        {
+            switch(String(value).toLowerCase())
+            {
+                case "sum":
+                    _aggregator = new SumAggregator;
+                    break;
+                case "count":
+                    _aggregator = new CountAggregator;
+                    break;
+                case "avg":
+                    _aggregator = new AverageAggregator;
+                    break;
+                case "max":
+                    _aggregator = new MaxAggregator;
+                    break;
+                case "min":
+                    _aggregator = new MinAggregator;
+                    break;
+                default:
+                    {
+                        _aggregator = null;
+                        var message:String = ResourceManager.getInstance().getString(
+                                "olap", "invalidAggregator", [value]);
+                        throw Error(message);
+                    }
+                    break;
+            }
+        }
+    }
+}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 17703
Author:   dthakkar@adobe.com
Date:     2010-09-14T21:06:11.351066Z

Log Message:
-----------
Added errorText property for spark formatters and included some bug fixes.

QE notes: This changelist has some behavior changes for spark formatters and will cause some failures to existing spark formatter mustell test cases. Globalization QE team knows about this and will update test cases after this submission.
Doc notes:
Bugs: SDK-27420,SDK-27449,SDK-26939,SDK-27240,SDK-27340,SDK-27341,SDK-26937,SDK-27038,SDK-26969,SDK-26970,SDK-26971,SDK-27036,SDK-27491,SDK-27037,SDK-26968,SDK-27450
Reviewer: Gordon, Craig, Dipti
Tests run: Checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/globalization/supportClasses/CollatorBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/formatters/NumberFormatter.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/formatters/supportClasses/NumberBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/formatters/CurrencyFormatter.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/formatters/DateTimeFormatter.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/tests/basicTests/spark/scripts/NumberFormatterTestScript.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/tests/basicTests/spark/scripts/CurrencyFormatterTestScript.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/formatters/Formatter.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/tests/basicTests/spark/views/NumberFormatterTests.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/tests/basicTests/spark/scripts/DateTimeFormatterTestScript.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/tests/basicTests/spark/views/CurrencyFormatterTests.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/tests/basicTests/spark/views/DateTimeFormatterTests.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/globalization/supportClasses/GlobalizationBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/formatters/IFormatter.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/globalization/LastOperationStatus.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/datavisualization/src/mx/controls/advancedDataGridClasses/AdvancedDataGridColumn.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1260859 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/formatters/Formatter.as
+++ frameworks/projects/framework/src/mx/formatters/Formatter.as
@@ -13,6 +13,7 @@
 {

 import flash.events.Event;
+import mx.formatters.IFormatter;
 import mx.core.mx_internal;
 import mx.managers.ISystemManager;
 import mx.managers.SystemManager;
@@ -46,7 +47,7 @@
  *  @playerversion AIR 1.1
  *  @productversion Flex 3
  */
-public class Formatter
+public class Formatter implements IFormatter
 {
     include "../core/Version.as";


Transferred from the Adobe Open Source Subversion Repository

Revision: 1118
Author:   shodgson@adobe.com
Date:     2008-04-07T18:27:54.254536Z

Log Message:
-----------
Merge 1117 from branches/3.0.x to trunk.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/AbstractProducer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/ChannelSet.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1273426 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/rpc/src/mx/messaging/AbstractProducer.as
+++ frameworks/projects/rpc/src/mx/messaging/AbstractProducer.as
@@ -309,7 +309,7 @@
             return;

         super.acknowledge(ackMsg, msg);
-        if (msg is CommandMessage && CommandMessage(msg).operation == CommandMessage.CLIENT_PING_OPERATION)
+        if (msg is CommandMessage && CommandMessage(msg).operation == CommandMessage.TRIGGER_CONNECT_OPERATION)
             stopReconnectTimer();
     }

@@ -384,8 +384,9 @@
      *  When a connection is established the connected property will
      *  change to true and this property is bindable and generates
      *  PropertyChangeEvents.
-     *  The underlying CLIENT_PING_OPERATION CommandMessage that is sent will result
-     *  in an acknowledge or fault event depending upon its success.
+     *  The internal TRIGGER_CONNECT_OPERATION CommandMessage that is sent will result
+     *  in an acknowledge or fault event depending upon whether the underlying channel
+     *  establishes its connection.
      *
      *  @throws mx.messaging.errors.InvalidDestinationError  If no destination is set.
      *
@@ -500,7 +501,7 @@
         if (_disconnectBarrier && !ignoreDisconnectBarrier)
             return;

-        if (msg is CommandMessage && CommandMessage(msg).operation == CommandMessage.CLIENT_PING_OPERATION)
+        if (msg is CommandMessage && CommandMessage(msg).operation == CommandMessage.TRIGGER_CONNECT_OPERATION)
         {
             if (_reconnectTimer == null)
             {