bes  Updated for version 3.20.13
ArrayAggregationBase.h
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 <memory> // std
33 
34 #include <libdap/Array.h> // libdap
35 
36 #include "AggMemberDataset.h" // agg_util
37 #include "AggregationUtil.h" // agg_util
38 
39 namespace libdap {
40  class ConstraintEvaluator;
41  class DDS;
42  class Marshaller;
43 }
44 
45 namespace agg_util
46 {
51  class ArrayAggregationBase : public libdap::Array
52  {
53  public:
69  const libdap::Array& granuleProto, // prototype for granule
70  AMDList memberDatasets, // granule descs to use for the agg
71  std::unique_ptr<ArrayGetterInterface> arrayGetter // way to get the data array
72  );
73 
75 
76  ~ArrayAggregationBase() override;
77 
78  ArrayAggregationBase& operator=(const ArrayAggregationBase& rhs);
79 
82 
98  bool read() override;
99 
103  const AMDList& getDatasetList() const;
104 
105  protected:
106 
107 
109  void printConstraints(const Array& fromArray);
110 
115  libdap::Array& getGranuleTemplateArray();
116 
122 
123  protected: // Subclass Interface
124 
127 
134 
135  private:
136 
138  void duplicate(const ArrayAggregationBase& rhs);
139 
141  void cleanup() noexcept;
142 
145 
150  std::unique_ptr<libdap::Array> _pSubArrayProto;
151 
154  std::unique_ptr<ArrayGetterInterface> _pArrayGetter;
155 
161  AMDList _datasetDescs;
162 
163  };
164 
165 }
166 
167 #endif /* __AGG_UTIL__ARRAY_AGGREGATION_BASE_H__ */
const AMDList & getDatasetList() const
virtual void transferOutputConstraintsIntoGranuleTemplateHook()
virtual void readConstrainedGranuleArraysAndAggregateDataHook()
void printConstraints(const Array &fromArray)
ArrayAggregationBase * ptr_duplicate() override
const ArrayGetterInterface & getArrayGetterInterface() const
ArrayAggregationBase(const libdap::Array &granuleProto, AMDList memberDatasets, std::unique_ptr< ArrayGetterInterface > arrayGetter)
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...