package flare.vis.operator { import flare.animate.Transitioner; import flare.util.Arrays; import flare.vis.data.Data; /** * A SortOperator sorts a data group. This can be used to sort * elements prior to running a subsequent operation such as layout. * @see flare.util.Sort */ public class SortOperator extends Operator { /** The data group to sort. */ public var group:String; /** The sorting criteria. Sort criteria are expressed as an * array of property names to sort on. These properties are accessed * by sorting functions using the Property class. * The default is to sort in ascending order. If the field name * includes a "-" (negative sign) prefix, that variable will instead * be sorted in descending order. */ public function get criteria():Array { return Arrays.copy(_crit); } public function set criteria(crit:*):void { if (crit is String) { _crit = [crit]; } else if (crit is Array) { _crit = Arrays.copy(crit as Array); } else { throw new ArgumentError("Invalid Sort specification type. " + "Input must be either a String or Array"); } } private var _crit:Array; /** * Creates a new SortOperator. * @param criteria the sorting criteria. Sort criteria are expressed as * an array of property names to sort on. These properties are * accessed by sorting functions using the Property * class. The default is to sort in ascending order. If the field name * includes a "-" (negative sign) prefix, that variable will instead * be sorted in descending order. * @param group the data group to sort */ public function SortOperator(criteria:Array, group:String=Data.NODES) { this.group = group; this.criteria = criteria; } /** @inheritDoc */ public override function operate(t:Transitioner=null):void { visualization.data.group(group).sortBy(_crit); } } // end of class SortOperator }