Index: lams_flash/src/common/flex/com/visualempathy/display/controls/datetime/DateTimePicker.mxml =================================================================== diff -u --- lams_flash/src/common/flex/com/visualempathy/display/controls/datetime/DateTimePicker.mxml (revision 0) +++ lams_flash/src/common/flex/com/visualempathy/display/controls/datetime/DateTimePicker.mxml (revision 275c1e79dec8acc5121f05540f7453fa216ada61) @@ -0,0 +1,89 @@ + + + + + [Event(name="change", type="flash.events.Event")] + + + + = 12) + { + this.ampm.selectedValue = 2; + } + else + { + this.ampm.selectedValue = 1; + } + + if(value.getHours() < 13 ) + this.hours.value = value.getHours() + else + this.hours.value = value.getHours() - 12 + + if(value.getHours() == 0) + this.hours.value = 12; + + this.minutes.value = value.getMinutes() + this.validateNow(); + } + + override public function validateProperties():void + { + super.validateProperties(); + + } + + public function handleChange():void + { + + var militaryHours:int = hours.value; + if(ampm.selectedValue == 2 && hours.value != 12) + militaryHours = hours.value+12; + else if(ampm.selectedValue == 1 && hours.value == 12) + militaryHours = 0; + var selDate:Date = this.date.selectedDate; + var date:Date = new Date( + selDate.getFullYear(), + selDate.getMonth(), + selDate.getDate(), + militaryHours, + minutes.value) + this.selectedDate = date; + + this.invalidateProperties(); + this.validateNow(); + this.dispatchEvent(new Event("change")); + + } + ]]> + + + + + + + + + + + Index: lams_flash/src/common/flex/org/lamsfoundation/lams/common/util/WDDXParser.as =================================================================== diff -u --- lams_flash/src/common/flex/org/lamsfoundation/lams/common/util/WDDXParser.as (revision 0) +++ lams_flash/src/common/flex/org/lamsfoundation/lams/common/util/WDDXParser.as (revision 275c1e79dec8acc5121f05540f7453fa216ada61) @@ -0,0 +1,38 @@ +package org.lamsfoundation.lams.common.util +{ + + import flash.xml.XMLNode; + + import pl.cfml.coldfusion.as3.utils.WDDX; + + public class WDDXParser + { + + public function WDDXParser() + { + } + + public function parseObject(node:XMLNode):Object { + var xml:XML = new XML(node); + if(node == null) + return null; + + var data:Object = WDDX.fromWDDX(xml.toXMLString()); + + + return data.messageValue; + } + + public function createWDDX(data:Object):XML { + if(data == null) + return null; + + var xml:String = WDDX.toWDDX(data); + var returnXML:XML = new XML(unescape(xml)); + + trace('xml: ' + returnXML); + return returnXML; + } + + } +} \ No newline at end of file Index: lams_flash/src/common/flex/org/lamsfoundation/lams/common/util/WDDXUtil.as =================================================================== diff -u --- lams_flash/src/common/flex/org/lamsfoundation/lams/common/util/WDDXUtil.as (revision 0) +++ lams_flash/src/common/flex/org/lamsfoundation/lams/common/util/WDDXUtil.as (revision 275c1e79dec8acc5121f05540f7453fa216ada61) @@ -0,0 +1,72 @@ +package org.lamsfoundation.lams.common.util +{ + public class WDDXUtil + { + //nulls + public static var STRING_NULL_VALUE:String = "string_null_value"; + public static var NUMERIC_NULL_VALUE:Number = -111111; + public static var DATE_NULL_VALUE:Date = new Date(0); + public static var BOOLEAN_NULL_VALUE:String = "boolean_null_value"; + + public function WDDXUtil() + { + } + + /** + * If the value passed in is any null type value or LAMS NULL VALUE then blank string is returned + * Used to prevent "undefined" or "string_null_value" appearing in the UI + * @usage var myStr = WDDXUtils.cleanNull(WDDXOBJ) + * @param obj + * @return clean string or null value. + */ + public static function cleanNull(obj:Object):Object { + + if(obj is String && obj == STRING_NULL_VALUE){ + return ""; + } else if(obj is Number && obj == NUMERIC_NULL_VALUE){ + obj = null; + } else if(obj is Boolean && obj == BOOLEAN_NULL_VALUE) { + obj = null; + } + + return obj; + + } + + /** + * Checks to see if the value passed in is any of the null values defined in Config. + * @usage + * @param v + * @return boolean true if null + */ + public static function isWDDXNull(v:Object):Boolean{ + if(v==STRING_NULL_VALUE){ + return true; + } + if(v==NUMERIC_NULL_VALUE){ + return true; + } + if(v==STRING_NULL_VALUE){ + return true; + } + if(v==DATE_NULL_VALUE){ + return true; + } + if(v==BOOLEAN_NULL_VALUE){ + return true; + } + return false; + } + + public static function toWDDXNull(obj:Object):Object { + if(obj is String && (obj == "" || obj == null)) + return STRING_NULL_VALUE; + else if(obj is Number || obj is int || obj is uint) + if(obj == 0 || obj == null) + return NUMERIC_NULL_VALUE; + + return obj; + } + + } +} \ No newline at end of file Index: lams_flash/src/common/flex/pl/cfml/coldfusion/as3/utils/ArrayUtils.as =================================================================== diff -u --- lams_flash/src/common/flex/pl/cfml/coldfusion/as3/utils/ArrayUtils.as (revision 0) +++ lams_flash/src/common/flex/pl/cfml/coldfusion/as3/utils/ArrayUtils.as (revision 275c1e79dec8acc5121f05540f7453fa216ada61) @@ -0,0 +1,114 @@ +/* +THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT +ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF +NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package pl.cfml.coldfusion.as3.utils +{ + import mx.utils.ArrayUtil; + import mx.collections.ArrayCollection; + + /** + * Class provides utility metods for Array and ArrayCollection. + */ + public class ArrayUtils + { + + /** + * Check for element existence in Array. + * + * @param array The array which will be checked. + * @param value Object to be found. + * @return Boolean; true if element was found, false if not. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function inArray(array:Array, value:Object):Boolean + { + if (ArrayUtil.getItemIndex(value, array) == -1) + return false; + return true; + } + + /** + * Check for element existence in ArrayCollection by key name of ArrayCollection items. + * + * @param array The ArrayCollection which will be checked. + * @param key Key to be checked. + * @param value Object to be found. + * @return Boolean; true if element was found, false if not. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function inArrayCollection(array:ArrayCollection, key:String, value:String):Boolean + { + for (var i:int=0; i -1) + indexes.push(i); + } + else + { + if ((this._columns[column] as Array)[i].toString().toLowerCase().indexf(value.toLowerCase()) > -1) + indexes.push(i); + } + break; + case 1: + if (likeCaseSensitive) + { + if ((this._columns[column] as Array)[i].toString().substr(0,value.length) == value) + indexes.push(i); + } + else + { + if ((this._columns[column] as Array)[i].toString().toLowerCase().substr(0,value.length) == value.toLowerCase()) + indexes.push(i); + } + break; + case 2: + if (likeCaseSensitive) + { + if ((this._columns[column] as Array)[i].toString().substr( (this._columns[column] as Array)[i].toString().length-value.length ,value.length) == value) + indexes.push(i); + } + else + { + if ((this._columns[column] as Array)[i].toString().substr( (this._columns[column] as Array)[i].toString().length-value.length ,value.length).toLowerCase() == value.toLowerCase()) + indexes.push(i); + } + break; + } + } + } + this.doDeleteRows( indexes ); + } + + /** + * Gets Recordset field value. + * + * @param column Recordset column. + * @param index Row number. If 0 row number is obtained by currentRow else index is used. + * @return Field value. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getValue(column:String, index:Number=0):String + { + if (this._rowsNum == 0) + throw new Error("Recordset doesn't contain any row. Use addRow()."); + if (index < 0) + throw new Error("Minimum row number for Recordset is 1."); + return (this._columns[column] as Array)[((index==0) ? this._currentRow-1 : index)]; + } + + /** + * Sets Recordset field value. + * + * @param column Recordset column. + * @param index Row number. + * @return Field value. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function setValue(column:String, value:String, row:Number=1):void + { + this.testColumn(column); + if (row < 1) + throw new Error("Minimum row number for Recordset is 1."); + if (row > this._rowsNum) + throw new Error("Row "+row+" doesn't exist. Use addRow()."); + this._columns[column][(row-1)] = value; + } + + /** + * Returns string representation of Recordset. + * + * @return String representation of Recordset. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function toString():String + { + var ret:String = "Recordset:\n"; + for (var s:String in this._columns) + { + ret += " " + s + ":\n"; + for(var i:Number=0; ithis.recordCount) + return -1; + this._currentRow++; + return this._currentRow; + } + + /** + * Iterator-type method - returns prev available currentRow. + * + * @return Prev currentRow or -1 if beggining of Recordset reached. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function prev():Number + { + if ((this._currentRow-1)<0) + return -1; + this._currentRow--; + return this._currentRow; + } + + /** + * Parses ColdFusion WDDX query representation to Recordset. + * + * @param data WDDX representation of ColdFusion query as XML. + * @return New Recordset. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * @see pl.cfml.coldfusion.as3.utils.WDDX#fromWDDX() + */ + public static function fromWDDXXML(data:XML):Recordset + { + var r:Recordset = new Recordset(data.@fieldNames.toString()); + r.addRow( parseInt(data.@rowCount.toString()) ); + var _cl:Array = r.columnList.split(","); + for (var i:Number=0; i<_cl.length; i++) + { + var values:XMLList = data.field.(@name.toString() == _cl[i]).children(); + var counter:Number = 1; + for each (var val:XML in values) + { + if (val.name().toString() == "null") + r.setValue(_cl[i], "", counter); + else + r.setValue(_cl[i], val.text().toString(), counter); + counter++; + } + } + return r; + } + + /** + * @private + * Checks for column existence. + * + * @param cName Name of the column. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + private function testColumn(cName:String):void + { + if (this._columns[cName] == null) + throw new Error("Column "+cName+" doesn't exists in Recordset."); + } + + /** + * @private + * Delete rows. + * + * @param indexes Array of row numbers to be removed. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + private function doDeleteRows( indexes:Array ):void + { + var _tmpCols:Object = {}; + for (var s:String in this._columns) + { + _tmpCols[s] = []; + for (var i:Number=0; i0) + result.push(_s); + break; + } + } + for (var j:int=0; j + *
  • String to string
  • + *
  • Number to number
  • + *
  • Boolean to boolean
  • + *
  • Date to date
  • + *
  • Array to array
  • + *
  • ArrayCollection to array of structs
  • + *
  • Recordset to query
  • + *
  • Object to struct
  • + * + * + * @param data AS3 object. + * @return WDDX representation of the object. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * @see pl.cfml.coldfusion.as3.utils.Recordset + */ + public static function toWDDX(data:Object):String + { + var o:String = "
    "; + o += _toWDDX(data); + o += ""; + return o; + } + + private static function _toWDDX(data:Object):String + { + var o:String = ""; + if ( data is String ) + o = _toString(data); + else if ( data is Number || data is uint || data is int) + o = _toNumber(data); + else if ( data is Boolean ) + o = _toBoolean(data); + else if ( data is Date ) + o = _toDate(data); + else if ( data is Array ) + o = _toArray(data); + else if ( data is ArrayCollection ) + o = _toArrayCollection(data); + else if ( data is Recordset ) + o = _toRecordset(data); + else if ( data is Object ) + o = _toStruct(data); + return o; + } + + private static function _toString(data:Object):String + { + return ""+data.toString()+""; + } + private static function _toNumber(data:Object):String + { + return ""+data.toString()+""; + } + private static function _toBoolean(data:Object):String + { + return ""; + } + private static function _toDate(data:Object):String + { + return ""+data.toString()+""; + } + private static function _toArray(data:Object):String + { + var o:Array = data as Array; + var s:String = ""; + for (var i:Number=0; i"; + for (var i:Number=0; i"; + var _cl:Array = o.columnList.split(","); + var i:Number = -1; + for (var j:Number=0; j<_cl.length; j++) + { + s += ""; + while ((i=o.next())>-1) + { + s += ((o.getValue(_cl[j]) == "") ? "" : WDDX._toString(o.getValue(_cl[j])) ); + } + s += ""; + o.reset(); + } + s += ""; + return s; + } + private static function _toStruct(data:Object):String + { + var s:String = ""; + for (var i:String in data) + { + s += ""; + s += _toWDDX( data[i] ); + s += ""; + } + s += ""; + return s; + } + + /** + * Decompiles WDDX to AS3 objects. + * Type are mapped against these rules: + * + *
      + *
    • string, number to String
    • + *
    • boolean to Boolean
    • + *
    • array to Array
    • + *
    • struct to Object
    • + *
    • query to Recordset
    • + *
    + * + * @param data WDDX representation as XML. + * @return AS3 WDDX representation. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * @see pl.cfml.coldfusion.as3.utils.Recordset + */ + public static function fromWDDX(wddx:String):Object + { + var x:XML = new XML(wddx); + return WDDX._fromWDDX(x.data.children()[0]); + } + + private static function _fromWDDX(data:XML):Object + { + var o:Object = {}; + switch (data.name().toString().toLowerCase()) + { + case "string": + o = _fromString(data); + break; + case "boolean": + o = _fromBoolean(data); + break; + case "array": + o = _fromArray(data); + break; + case "struct": + o = _fromStruct(data); + break; + case "dateTime": + o = _fromString(data); + break; + case "recordset": + o = Recordset.fromWDDXXML(data); + break; + default: + o = _fromString(data); + break; + } + return o; + } + + private static function _fromString(data:XML):String + { + return data.text(); + } + private static function _fromBoolean(data:XML):Boolean + { + return data.@value; + } + private static function _fromArray(data:XML):ArrayCollection + { + var o:ArrayCollection = new ArrayCollection(); + for (var i:int=0; i