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