DataSetAdapter.h
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/dataaccess/dataset/DataSetAdapter.h
22 
23  \brief An adapter for DataSet.
24 */
25 
26 #ifndef __TERRALIB_DATAACCESS_INTERNAL_DATASETADAPTER_H
27 #define __TERRALIB_DATAACCESS_INTERNAL_DATASETADAPTER_H
28 
29 // TerraLib
30 #include "../../common/Holder.h"
31 #include "../Config.h"
32 #include "AttributeConverters.h"
33 #include "DataSet.h"
34 
35 // STL
36 #include <vector>
37 
38 namespace te
39 {
40  namespace da
41  {
42 // Forward declarations
43  class DataSourceCapabilities;
44 
45  /*!
46  \class DataSetAdapter
47 
48  \brief An adapter for DataSet.
49 
50  \sa DataSet
51  */
53  {
54  public:
55 
56  /** @name Constructor/Destructor
57  * Initilizer methods.
58  */
59  //@{
60 
61  /*!
62  \brief Constructor.
63 
64  \param dataset A pointer to the DataSet that will be handled by adapter.
65  \param isOwner If true the DataSetAdapter will have the ownership of the given data set pointer.
66 
67  \note Here no automatic property adaptation will be made. i.e. The adapater is invalid.
68  \note The method "adapt" can be used to do manual adaptations.
69  */
70  DataSetAdapter(DataSet* dataset, bool isOwner = false);
71 
72  /*! \brief Destructor. */
73  ~DataSetAdapter();
74 
75  //@}
76 
77  te::common::TraverseType getTraverseType() const;
78 
79  te::common::AccessPolicy getAccessPolicy() const;
80 
81  std::auto_ptr<te::gm::Envelope> getExtent(std::size_t i);
82 
83  std::size_t getNumProperties() const;
84 
85  int getPropertyDataType(std::size_t pos) const;
86 
87  std::string getPropertyName(std::size_t pos) const;
88 
89  std::string getDatasetNameOfProperty(std::size_t pos) const;
90 
91  bool isEmpty() const;
92 
93  bool isConnected() const;
94 
95  std::size_t size() const;
96 
97  bool moveNext();
98 
99  bool movePrevious();
100 
101  bool moveBeforeFirst();
102 
103  bool moveFirst();
104 
105  bool moveLast();
106 
107  bool move(std::size_t i);
108 
109  bool isAtBegin() const;
110 
111  bool isBeforeBegin() const;
112 
113  bool isAtEnd() const;
114 
115  bool isAfterEnd() const;
116 
117  char getChar(std::size_t i) const;
118 
119  unsigned char getUChar(std::size_t i) const;
120 
121  boost::int16_t getInt16(std::size_t i) const;
122 
123  boost::int32_t getInt32(std::size_t i) const;
124 
125  boost::int64_t getInt64(std::size_t i) const;
126 
127  bool getBool(std::size_t i) const;
128 
129  float getFloat(std::size_t i) const;
130 
131  double getDouble(std::size_t i) const;
132 
133  std::string getNumeric(std::size_t i) const;
134 
135  std::string getString(std::size_t i) const;
136 
137  std::auto_ptr<te::dt::ByteArray> getByteArray(std::size_t i) const;
138 
139  std::auto_ptr<te::gm::Geometry> getGeometry(std::size_t i) const;
140 
141  std::auto_ptr<te::rst::Raster> getRaster(std::size_t i) const;
142 
143  std::auto_ptr<te::dt::DateTime> getDateTime(std::size_t i) const;
144 
145  std::auto_ptr<te::dt::Array> getArray(std::size_t i) const;
146 
147  bool isNull(std::size_t i) const;
148 
149  /** @name DataSet Adapter Extended Methods
150  * Methods that exists only in the DataSet Adapter implementation.
151  */
152  //@{
153 
154  /*!
155  \brief This method returns the pointer to the DataSet that is handled by adapter.
156 
157  \return The pointer to the DataSet that is handled by adapter.
158 
159  \note The caller will NOT take the ownership of the returned pointer.
160  */
161  te::da::DataSet* getAdaptee() const;
162 
163  void add(const std::string& newPropertyName,
164  int newPropertyType,
165  const std::vector<std::size_t>& adaptedPropertyPos,
166  AttributeConverter conv);
167  //@}
168 
169  private:
170 
171  /** @name DataSet Adapter Internal Methods
172  * DataSet Adapter Internal Methods implementation.
173  */
174  //@{
175 
176  te::dt::AbstractData* getAdaptedValue(std::size_t i) const;
177 
178  //@}
179 
180  private:
181 
182  std::vector<int> m_datatypes; //!< The datatype for each property.
183  std::vector<std::string> m_pnames; //!< The name for each property.
184  te::common::Holder<DataSet> m_ds; //!< A pointer to the DataSet that will be handled by adapter
185  std::vector<std::vector<std::size_t> > m_propertyIndexes; //!< A vector that stores the adapted property indexes.
186  std::vector<AttributeConverter> m_converters; //!< A vector that stores the attribute converters functions.
187  };
188 
189  } // end namespace da
190 } // end namespace te
191 
192 #endif // __TERRALIB_DATAACCESS_INTERNAL_DATASETADAPTER_H
An auxiliary data structure for helping to control the garbage collection of C++ objects.
Definition: Holder.h:43
te::common::Holder< DataSet > m_ds
A pointer to the DataSet that will be handled by adapter.
std::vector< std::vector< std::size_t > > m_propertyIndexes
A vector that stores the adapted property indexes.
std::vector< AttributeConverter > m_converters
A vector that stores the attribute converters functions.
std::vector< int > m_datatypes
The datatype for each property.
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:40
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:53
URI C++ Library.
boost::function3< te::dt::AbstractData *, DataSet *, const std::vector< std::size_t > &, int > AttributeConverter
The type of attribute converter functions.
A base class for values that can be retrieved from the data access module.
Definition: AbstractData.h:57
Definition of attribute converter and a set of them.
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:112
std::vector< std::string > m_pnames
The name for each property.
#define TEDATAACCESSEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:97
A dataset is the unit of information manipulated by the data access module of TerraLib.
An adapter for DataSet.