All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DataSetAdapter.h
Go to the documentation of this file.
1 /* Copyright (C) 2008-2013 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  /*!
90  \brief It returns the underlying dataset name of the property at position pos.
91 
92  \param pos The property position of interest.
93 
94  \return The underlying dataset name of the property at position pos.
95 
96  \note This method will always return an empty string for the adapter.
97  */
98  std::string getDatasetNameOfProperty(std::size_t pos) const;
99 
100  bool isEmpty() const;
101 
102  bool isConnected() const;
103 
104  std::size_t size() const;
105 
106  bool moveNext();
107 
108  bool movePrevious();
109 
110  bool moveBeforeFirst();
111 
112  bool moveFirst();
113 
114  bool moveLast();
115 
116  bool move(std::size_t i);
117 
118  bool isAtBegin() const;
119 
120  bool isBeforeBegin() const;
121 
122  bool isAtEnd() const;
123 
124  bool isAfterEnd() const;
125 
126  char getChar(std::size_t i) const;
127 
128  unsigned char getUChar(std::size_t i) const;
129 
130  boost::int16_t getInt16(std::size_t i) const;
131 
132  boost::int32_t getInt32(std::size_t i) const;
133 
134  boost::int64_t getInt64(std::size_t i) const;
135 
136  bool getBool(std::size_t i) const;
137 
138  float getFloat(std::size_t i) const;
139 
140  double getDouble(std::size_t i) const;
141 
142  std::string getNumeric(std::size_t i) const;
143 
144  std::string getString(std::size_t i) const;
145 
146  std::auto_ptr<te::dt::ByteArray> getByteArray(std::size_t i) const;
147 
148  std::auto_ptr<te::gm::Geometry> getGeometry(std::size_t i) const;
149 
150  std::auto_ptr<te::rst::Raster> getRaster(std::size_t i) const;
151 
152  std::auto_ptr<te::dt::DateTime> getDateTime(std::size_t i) const;
153 
154  std::auto_ptr<te::dt::Array> getArray(std::size_t i) const;
155 
156  bool isNull(std::size_t i) const;
157 
158  /*!
159  \brief It sets the Spatial Reference System ID associated to the DataSet.
160 
161  \param srid The Spatial Reference System ID to be associated to the DataSet.
162  */
163  void setSRID(int srid);
164 
165  /** @name DataSet Adapter Extended Methods
166  * Methods that exists only in the DataSet Adapter implementation.
167  */
168  //@{
169 
170  /*!
171  \brief This method returns the pointer to the DataSet that is handled by adapter.
172 
173  \return The pointer to the DataSet that is handled by adapter.
174 
175  \note The caller will NOT take the ownership of the returned pointer.
176  */
177  te::da::DataSet* getAdaptee() const;
178 
179  void add(const std::string& newPropertyName,
180  int newPropertyType,
181  const std::vector<std::size_t>& adaptedPropertyPos,
182  AttributeConverter conv);
183  //@}
184 
185  private:
186 
187  /** @name DataSet Adapter Internal Methods
188  * DataSet Adapter Internal Methods implementation.
189  */
190  //@{
191 
192  te::dt::AbstractData* getAdaptedValue(std::size_t i) const;
193 
194  //@}
195 
196  private:
197 
198  std::vector<int> m_datatypes; //!< The datatype for each property.
199  std::vector<std::string> m_pnames; //!< The name for each property.
200  te::common::Holder<DataSet> m_ds; //!< A pointer to the DataSet that will be handled by adapter
201  std::vector<std::vector<std::size_t> > m_propertyIndexes; //!< A vector that stores the adapted property indexes.
202  std::vector<AttributeConverter> m_converters; //!< A vector that stores the attribute converters functions.
203  int m_srid; //!< The identifier of the layer spatial reference system.
204  };
205 
206  } // end namespace da
207 } // end namespace te
208 
209 #endif // __TERRALIB_DATAACCESS_INTERNAL_DATASETADAPTER_H
std::vector< AttributeConverter > m_converters
A vector that stores the attribute converters functions.
int m_srid
The identifier of the layer spatial reference system.
std::vector< std::vector< std::size_t > > m_propertyIndexes
A vector that stores the adapted property indexes.
boost::function3< te::dt::AbstractData *, DataSet *, const std::vector< std::size_t > &, int > AttributeConverter
The type of attribute converter functions.
An auxiliary data structure for helping to control the garbage collection of C++ objects.
Definition: Holder.h:43
std::vector< std::string > m_pnames
The name for each property.
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:40
#define TEDATAACCESSEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:135
Definition of attribute converter and a set of them.
std::vector< int > m_datatypes
The datatype for each property.
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:53
A base class for values that can be retrieved from the data access module.
Definition: AbstractData.h:57
double getDouble(const std::string &value, std::vector< std::string > &sVector)
Definition: Utils.cpp:54
te::common::Holder< DataSet > m_ds
A pointer to the DataSet that will be handled by adapter.
A dataset is the unit of information manipulated by the data access module of TerraLib.
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:111
An adapter for DataSet.