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
}