package flare.data { import flare.util.Vectors; /** * A data schema represents a set of data variables and their associated * types. A schema maintains a collection of DataField * objects. * @see flare.data.DataField */ public class DataSchema { public var dataRoot:String = null; public var hasHeader:Boolean = false; private var _fields:Vector. = new Vector.(); private var _nameLookup:/*String->DataField*/Object = {}; private var _idLookup:/*String->DataField*/Object = {}; /** An objct vector containing the data fields in this schema. */ public function get fields():Vector. { return Vectors.copy(_fields); } /** The number of data fields in this schema. */ public function get numFields():int { return _fields.length; } /** * Creates a new DataSchema. * @param fields an ordered list of data fields to include in the * schema */ public function DataSchema(...fields) { for each (var f:DataField in fields) { addField(f); } } /** * Adds a field to this schema. * @param field the data field to add */ public function addField(field:DataField):void { _fields.push(field); _nameLookup[field.name] = field; _idLookup[field.id] = field; } /** * Retrieves a data field by name. * @param name the data field name * @return the corresponding data field, or null if no data field is * found matching the name */ public function getFieldByName(name:String):DataField { return _nameLookup[name]; } /** * Retrieves a data field by id. * @param name the data field id * @return the corresponding data field, or null if no data field is * found matching the id */ public function getFieldById(id:String):DataField { return _idLookup[id]; } /** * Retrieves a data field by its index in this schema. * @param idx the index of the data field in this schema * @return the corresponding data field */ public function getFieldAt(idx:int):DataField { return _fields[idx] as DataField; } } // end of class DataSchema }