OPeNDAP Hyrax Back End Server (BES)  Updated for version 3.8.3
ArrayAggregationBase.h
Go to the documentation of this file.
1 // This file is part of the "NcML Module" project, a BES module designed
3 // to allow NcML files to be used to be used as a wrapper to add
4 // AIS to existing datasets of any format.
5 //
6 // Copyright (c) 2010 OPeNDAP, Inc.
7 // Author: Michael Johnson <m.johnson@opendap.org>
8 //
9 // For more information, please also see the main website: http://opendap.org/
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // Please see the files COPYING and COPYRIGHT for more information on the GLPL.
26 //
27 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
29 #ifndef __AGG_UTIL__ARRAY_AGGREGATION_BASE_H__
30 #define __AGG_UTIL__ARRAY_AGGREGATION_BASE_H__
31 
32 #include "AggMemberDataset.h" // agg_util
33 #include "AggregationUtil.h" // agg_util
34 #include <Array.h> // libdap
35 #include <memory> // std
36 
37 namespace agg_util
38 {
43  class ArrayAggregationBase : public libdap::Array
44  {
45  public:
61  const libdap::Array& granuleProto, // prototype for granule
62  const AMDList& memberDatasets, // granule descs to use for the agg
63  std::auto_ptr<ArrayGetterInterface>& arrayGetter // way to get the data array
64  );
65 
67 
68  virtual ~ArrayAggregationBase();
69 
71 
74 
83  virtual bool read();
84 
88  const AMDList& getDatasetList() const;
89 
90  protected:
91 
92 
94  void printConstraints(const Array& fromArray);
95 
100  libdap::Array& getGranuleTemplateArray();
101 
107 
108  protected: // Subclass Interface
109 
112 
119 
120  private:
121 
123  void duplicate(const ArrayAggregationBase& rhs);
124 
126  void cleanup() throw();
127 
130 
135  std::auto_ptr<libdap::Array> _pSubArrayProto;
136 
139  std::auto_ptr<ArrayGetterInterface> _pArrayGetter;
140 
146  AMDList _datasetDescs;
147 
148  };
149 
150 }
151 
152 #endif /* __AGG_UTIL__ARRAY_AGGREGATION_BASE_H__ */
virtual bool read()
Base implementation that works for both joinNew and joinExisting.
ArrayAggregationBase & operator=(const ArrayAggregationBase &rhs)
libdap::Array & getGranuleTemplateArray()
Accessor for subclasses Note this is protected, so not const! Subclasses may mutate the return hence ...
virtual ArrayAggregationBase * ptr_duplicate()
virtual constructor i.e.
void printConstraints(const Array &fromArray)
Print out the constraints on fromArray to the debug channel.
ArrayAggregationBase(const libdap::Array &granuleProto, const AMDList &memberDatasets, std::auto_ptr< ArrayGetterInterface > &arrayGetter)
Construct the base class using the given parameters.
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...
Helper class hierarchy for acquiring variable of a certain type from a DDS.
Base class for subclasses of libdap::Array which perform aggregation on a list of AggMemberDatasets w...
const ArrayGetterInterface & getArrayGetterInterface() const
Accessor for subclasses Note this is protected, so not const! Subclasses may mutate the return hence ...
std::vector< RCPtr< AggMemberDataset > > AMDList
const AMDList & getDatasetList() const
Get the list of AggMemberDataset's that comprise this aggregation.
virtual void readConstrainedGranuleArraysAndAggregateDataHook()
The meat of the subclass impl of read().
virtual void transferOutputConstraintsIntoGranuleTemplateHook()
subclass hook from read() to setup constraints on inner dims correctly