Hierarchical Datasources

Early in the design there was a "datastore" singleton which served as the manager for the collection of data sources and isolated the rest of the application from the details of data sources. However, the notion of a composite datasource is generally useful, so it makes sense to add a subclass of data source which is a composite of other datasources. Thus the datastore class can be replaced by an instance of a composite data source class. Using a composite datasource, the set of datasources in use by an application can be divided arbitrarily into a hierarchy. For a display application, flight datasources might be grouped into a single project datasource, or datasources might be grouped into similar scientific scenarios, however makes the most sense for the user. The hierarchy provides a convenient namespace for browsing and managing the datasources: flight "rf03" for BAMEX might have the full name "bamex/rf03". From this qualification follows a natural way to distinguish variables with similar names from different datasources: "bamex/rf03/tdry" versus "soundings/kbco/tdry".

So DataSource needs an interface to allow the application to browse the DataSource hierarchy. The GUI uses that interface to generate a tree view of the DataSources which the user can browse. When a user chooses a DataSource, a second window updates with the list of variables available from that source. This is analagous to the current scheme for netcdf files, except now a source may be a SQL database instead of a netcdf file.

To simplify the exchanging of lists of DataSets in the datastore API, there is a distinct DataSetList type rather than just using vector<DataSet>.

Requirements