Transactor.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/ws/ogc/wms/dataaccess/Transactor.h
22 
23  \brief Implementation of the transactor for the WS OGC WMS
24 
25  \author Emerson Moraes
26 */
27 
28 #ifndef __TERRALIB_WS_OGC_WMS_DATAACCESS_TRANSACTOR_H
29 #define __TERRALIB_WS_OGC_WMS_DATAACCESS_TRANSACTOR_H
30 
31 // STL
32 #include <map>
33 #include <memory>
34 #include <string>
35 
36 // TerraLib
37 #include "../../../../dataaccess/datasource/DataSourceTransactor.h"
38 #include "../client/WMSClient.h"
39 #include "Config.h"
40 #include "../client/DataTypes.h"
41 
42 namespace te
43 {
44  namespace ws
45  {
46  namespace ogc
47  {
48  namespace wms
49  {
50  namespace da
51  {
52 
53  class DataSource;
54 
55  /*!
56  \class Transactor
57 
58  \brief Implementation of the transactor for the WMS driver.
59  */
61  {
62  public:
63 
64  Transactor(const std::shared_ptr<te::ws::ogc::WMSClient> wms);
65 
67 
69 
70  void begin();
71 
72  void commit();
73 
74  void rollBack();
75 
76  bool isInTransaction() const;
77 
78  std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
80  bool connected = false,
81  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
82 
83  std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
84  const std::string& propertyName,
85  const te::gm::Envelope* e,
88  bool connected = false,
89  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
90 
91  std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
92  const std::string& propertyName,
93  const te::gm::Geometry* g,
96  bool connected = false,
97  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
98 
99  std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
100  const te::da::ObjectIdSet* oids,
102  bool connected = false,
103  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
104 
105  std::unique_ptr<te::da::DataSet> query(const te::da::Select& q,
107  bool connected = false,
108  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
109 
110  std::unique_ptr<te::da::DataSet> query(const std::string& query,
112  bool connected = false,
113  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
114 
115  void execute(const te::da::Query& command);
116 
117  void execute(const std::string& command);
118 
119  std::unique_ptr<te::da::PreparedQuery> getPrepared(const std::string& qName = std::string(""));
120 
121  std::unique_ptr<te::da::BatchExecutor> getBatchExecutor();
122 
123  void cancel();
124 
125  boost::int64_t getLastGeneratedId();
126 
127  std::string escape(const std::string& value);
128 
129  bool isDataSetNameValid(const std::string& datasetName);
130 
131  bool isPropertyNameValid(const std::string& propertyName);
132 
133  std::vector<std::string> getDataSetNames();
134 
135  std::size_t getNumberOfDataSets();
136 
137  std::unique_ptr<te::da::DataSetType> getDataSetType(const std::string& name);
138 
139  boost::ptr_vector<te::dt::Property> getProperties(const std::string& datasetName);
140 
141  std::unique_ptr<te::dt::Property> getProperty(const std::string& datasetName, const std::string& name);
142 
143  std::unique_ptr<te::dt::Property> getProperty(const std::string& datasetName, std::size_t propertyPos);
144 
145  std::vector<std::string> getPropertyNames(const std::string& datasetName);
146 
147  std::size_t getNumberOfProperties(const std::string& datasetName);
148 
149  bool propertyExists(const std::string& datasetName, const std::string& name);
150 
151  void addProperty(const std::string& datasetName , te::dt::Property* p);
152 
153  void dropProperty(const std::string& datasetName, const std::string& name);
154 
155  void renameProperty(const std::string& datasetName , const std::string& propertyName, const std::string& newPropertyName);
156 
157  std::unique_ptr<te::da::PrimaryKey> getPrimaryKey(const std::string& datasetName);
158 
159  bool primaryKeyExists(const std::string& datasetName, const std::string& name);
160 
161  void addPrimaryKey(const std::string& datasetName, te::da::PrimaryKey* pk);
162 
163  void dropPrimaryKey(const std::string& datasetName);
164 
165  std::unique_ptr<te::da::ForeignKey> getForeignKey(const std::string& datasetName, const std::string& name);
166 
167  std::vector<std::string> getForeignKeyNames(const std::string& datasetName);
168 
169  bool foreignKeyExists(const std::string& datasetName , const std::string& name);
170 
171  void addForeignKey(const std::string& datasetName, te::da::ForeignKey* fk);
172 
173  void dropForeignKey(const std::string& datasetName , const std::string& fkName);
174 
175  std::unique_ptr<te::da::UniqueKey> getUniqueKey(const std::string& datasetName, const std::string& name);
176 
177  std::vector<std::string> getUniqueKeyNames(const std::string& datasetName);
178 
179  bool uniqueKeyExists(const std::string& datasetName, const std::string& name);
180 
181  void addUniqueKey(const std::string& datasetName, te::da::UniqueKey* uk);
182 
183  void dropUniqueKey(const std::string& datasetName, const std::string& name);
184 
185  std::unique_ptr<te::da::CheckConstraint> getCheckConstraint(const std::string& datasetName, const std::string& name);
186 
187  std::vector<std::string> getCheckConstraintNames(const std::string& datasetName);
188 
189  bool checkConstraintExists(const std::string& datasetName, const std::string& name);
190 
191  void addCheckConstraint(const std::string& datasetName, te::da::CheckConstraint* cc);
192 
193  void dropCheckConstraint(const std::string& datasetName, const std::string& name);
194 
195  std::unique_ptr<te::da::Index> getIndex(const std::string& datasetName, const std::string& name);
196 
197  std::vector<std::string> getIndexNames(const std::string& datasetName);
198 
199  bool indexExists(const std::string& datasetName, const std::string& name);
200 
201  void addIndex(const std::string& datasetName, te::da::Index* idx, const std::map<std::string, std::string>& options);
202 
203  void dropIndex(const std::string& datasetName, const std::string& idxName);
204 
205  std::unique_ptr<te::da::Sequence> getSequence(const std::string& name);
206 
207  std::vector<std::string> getSequenceNames();
208 
209  bool sequenceExists(const std::string& name);
210 
211  void addSequence(te::da::Sequence* sequence);
212 
213  void dropSequence(const std::string& name);
214 
215  std::unique_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
216  const std::string& propertyName);
217 
218  std::unique_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
219  std::size_t propertyPos);
220 
221  std::size_t getNumberOfItems(const std::string& datasetName);
222 
223  bool hasDataSets();
224 
225  bool dataSetExists(const std::string& name);
226 
228  const std::map<std::string, std::string>& options);
229 
230  void cloneDataSet(const std::string& name,
231  const std::string& cloneName,
232  const std::map<std::string, std::string>& options);
233 
234  void dropDataSet(const std::string& name);
235 
236  void renameDataSet(const std::string& name,
237  const std::string& newName);
238 
239  void add(const std::string& datasetName,
240  te::da::DataSet* d,
241  const std::map<std::string, std::string>& options,
242  std::size_t limit = 0,
243  bool enableProgress = true);
244 
245  void remove(const std::string& datasetName, const te::da::ObjectIdSet* oids = 0);
246 
247  void update(const std::string& datasetName,
248  te::da::DataSet* dataset,
249  const std::vector<std::size_t>& properties,
250  const te::da::ObjectIdSet* oids,
251  const std::map<std::string, std::string>& options,
252  std::size_t limit = 0);
253 
254  void optimize(const std::map<std::string, std::string>& opInfo);
255 
256  std::vector<std::string> getLayerNames();
257 
258  te::ws::ogc::wms::Layer getLayerByName(const std::string& layerName);
259 
260  protected:
261 
262  void createLayerMap(const te::ws::ogc::wms::Layer& rootLayer);
263 
264  private:
265 
266  std::shared_ptr<te::ws::ogc::WMSClient> m_wms;
267 
268  std::map<std::string, te::ws::ogc::wms::Layer> m_layerMap;
269  };
270 
271  } // end namespace da
272  } // end namespace wms
273  } // end namespace ogc
274  } // end namespace ws
275 } // end namespace te
276 
277 #endif // __TERRALIB_WS_OGC_WMS_DATAACCESS_TRANSACTOR_H
A class that describes a check constraint.
A class that models the description of a dataset.
Definition: DataSetType.h:73
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:114
A DataSourceTransactor can be viewed as a connection to the data source for reading/writing things in...
An abstract class for data providers like a DBMS, Web Services or a regular file.
Definition: DataSource.h:120
It models a foreign key constraint for a DataSetType.
Definition: ForeignKey.h:49
It describes an index associated to a DataSetType.
Definition: Index.h:53
This class represents a set of unique ids created in the same context. i.e. from the same data set.
Definition: ObjectIdSet.h:56
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:49
A Query is independent from the data source language/dialect.
Definition: Query.h:47
A Select models a query to be used when retrieving data from a DataSource.
Definition: Select.h:67
It describes a sequence (a number generator).
Definition: Sequence.h:57
It describes a unique key (uk) constraint.
Definition: UniqueKey.h:50
It models a property definition.
Definition: Property.h:60
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:52
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:78
Implementation of the transactor for the WMS driver.
Definition: Transactor.h:61
std::vector< std::string > getCheckConstraintNames(const std::string &datasetName)
It gets the check constraint names of the given dataset.
boost::int64_t getLastGeneratedId()
It returns the last id generated by an insertion command.
void createLayerMap(const te::ws::ogc::wms::Layer &rootLayer)
std::vector< std::string > getPropertyNames(const std::string &datasetName)
It gets the property names of the given dataset.
void commit()
It commits the transaction.
std::unique_ptr< te::dt::Property > getProperty(const std::string &datasetName, std::size_t propertyPos)
It retrieves the property lying in the given position from the dataset.
std::unique_ptr< te::da::DataSetType > getDataSetType(const std::string &name)
It gets information about the given dataset.
std::unique_ptr< te::da::Index > getIndex(const std::string &datasetName, const std::string &name)
It gets the index with the given name from the dataset.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name. A dataset can be connected or disconnected....
std::map< std::string, te::ws::ogc::wms::Layer > m_layerMap
Definition: Transactor.h:268
std::unique_ptr< te::da::DataSet > query(const te::da::Select &q, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It executes a query that may return some data using a generic query. A dataset can be connected or di...
void dropSequence(const std::string &name)
It removes the sequence from the data source.
bool checkConstraintExists(const std::string &datasetName, const std::string &name)
It checks if a check-constraint with the given name exists in the data source.
Transactor(const std::shared_ptr< te::ws::ogc::WMSClient > wms)
std::vector< std::string > getForeignKeyNames(const std::string &datasetName)
It gets the foreign key names of the given dataset.
void dropForeignKey(const std::string &datasetName, const std::string &fkName)
It removes the foreign key constraint from the dataset schema.
void addIndex(const std::string &datasetName, te::da::Index *idx, const std::map< std::string, std::string > &options)
It adds an index to the dataset.
std::unique_ptr< te::da::PreparedQuery > getPrepared(const std::string &qName=std::string(""))
It creates a prepared query object that may be used for query commands (select, insert,...
bool dataSetExists(const std::string &name)
It checks if a dataset with the given name exists in the data source.
std::unique_ptr< te::da::ForeignKey > getForeignKey(const std::string &datasetName, const std::string &name)
It retrieves the foreign key from the given dataset.
void dropUniqueKey(const std::string &datasetName, const std::string &name)
It removes the unique key constraint from the dataset.
std::unique_ptr< te::da::PrimaryKey > getPrimaryKey(const std::string &datasetName)
It retrieves the primary key of the dataset.
bool isPropertyNameValid(const std::string &propertyName)
It checks if the given property name is valid.
void addUniqueKey(const std::string &datasetName, te::da::UniqueKey *uk)
It adds a unique key constraint to the dataset.
std::unique_ptr< te::da::BatchExecutor > getBatchExecutor()
It creates a batch command executor.
void dropIndex(const std::string &datasetName, const std::string &idxName)
It removes the index from the dataset schema.
void addPrimaryKey(const std::string &datasetName, te::da::PrimaryKey *pk)
It adds a primary key constraint to the dataset schema.
void cloneDataSet(const std::string &name, const std::string &cloneName, const std::map< std::string, std::string > &options)
It clones the dataset in the data source.
void add(const std::string &datasetName, te::da::DataSet *d, const std::map< std::string, std::string > &options, std::size_t limit=0, bool enableProgress=true)
It adds data items to the dataset in the data source.
std::unique_ptr< te::da::Sequence > getSequence(const std::string &name)
It gets the sequence with the given name in the data source.
std::unique_ptr< te::gm::Envelope > getExtent(const std::string &datasetName, std::size_t propertyPos)
It retrieves the bounding rectangle for the spatial property lying in the given position in the datas...
bool hasDataSets()
It checks if the data source has any dataset.
void addForeignKey(const std::string &datasetName, te::da::ForeignKey *fk)
It adds a foreign key constraint to a dataset.
void execute(const std::string &command)
It executes the specifed command in the data source native language.
void addSequence(te::da::Sequence *sequence)
It creates a new sequence in the data source.
bool uniqueKeyExists(const std::string &datasetName, const std::string &name)
It checks if a unique key with the given name exists in the dataset.
void renameProperty(const std::string &datasetName, const std::string &propertyName, const std::string &newPropertyName)
It renames a property of the given dataset.
void remove(const std::string &datasetName, const te::da::ObjectIdSet *oids=0)
It removes all the informed items from the dataset.
bool indexExists(const std::string &datasetName, const std::string &name)
It checks if an index with the given name exists in the dataset.
std::unique_ptr< te::gm::Envelope > getExtent(const std::string &datasetName, const std::string &propertyName)
It retrieves the bounding rectangle of the spatial property for the given dataset.
te::ws::ogc::wms::Layer getLayerByName(const std::string &layerName)
std::size_t getNumberOfItems(const std::string &datasetName)
It retrieves the number of items of the given dataset.
std::vector< std::string > getLayerNames()
std::unique_ptr< te::da::UniqueKey > getUniqueKey(const std::string &datasetName, const std::string &name)
It gets the unique key in the dataset with the given name.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, const std::string &propertyName, const te::gm::Geometry *g, te::gm::SpatialRelation r, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name using a spatial filter over the given geometric prop...
bool isDataSetNameValid(const std::string &datasetName)
It returns true if the given string is a valid dataset name.
void createDataSet(te::da::DataSetType *dt, const std::map< std::string, std::string > &options)
It creates the dataset schema definition in the target data source.
std::vector< std::string > getUniqueKeyNames(const std::string &datasetName)
It gets the unique key names of the given dataset.
bool sequenceExists(const std::string &name)
It checks if a sequence with the given name exists in the data source.
bool isInTransaction() const
It returns true if a transaction is in progress, otherwise, it returns false.
std::vector< std::string > getSequenceNames()
It gets the sequence names available in the data source.
void rollBack()
It aborts the transaction. Any changes will be rolled-back.
void optimize(const std::map< std::string, std::string > &opInfo)
For some data access drivers, this method will perform some operations to optimize the data storage.
std::vector< std::string > getIndexNames(const std::string &datasetName)
It gets the index names of the given dataset.
std::shared_ptr< te::ws::ogc::WMSClient > m_wms
Definition: Transactor.h:266
void dropPrimaryKey(const std::string &datasetName)
It removes the primary key constraint from the dataset schema.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, const te::da::ObjectIdSet *oids, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
void dropDataSet(const std::string &name)
It removes the dataset schema from the data source.
std::string escape(const std::string &value)
It escapes a string for using in commands and queries.
bool propertyExists(const std::string &datasetName, const std::string &name)
It checks if a property with the given name exists in the dataset.
bool primaryKeyExists(const std::string &datasetName, const std::string &name)
It checks if a primary key exists in the dataset.
std::vector< std::string > getDataSetNames()
It It gets the dataset names available in the data source.
boost::ptr_vector< te::dt::Property > getProperties(const std::string &datasetName)
It retrieves the properties of the dataset.
void dropCheckConstraint(const std::string &datasetName, const std::string &name)
It removes the check constraint from the dataset.
std::size_t getNumberOfProperties(const std::string &datasetName)
It gets the number of properties of the given dataset.
std::unique_ptr< te::dt::Property > getProperty(const std::string &datasetName, const std::string &name)
It retrieves the property with the given name from the dataset.
void addProperty(const std::string &datasetName, te::dt::Property *p)
It adds a new property to the dataset schema.
te::da::DataSource * getDataSource() const
It returns the parent data source of the transactor.
void update(const std::string &datasetName, te::da::DataSet *dataset, const std::vector< std::size_t > &properties, const te::da::ObjectIdSet *oids, const std::map< std::string, std::string > &options, std::size_t limit=0)
It updates the contents of a dataset for the set of data items.
void cancel()
It requests that the data source stop the processing of the current command.
std::size_t getNumberOfDataSets()
It retrieves the number of data sets available in the data source.
void execute(const te::da::Query &command)
It executes the specified command using a generic query representation.
bool foreignKeyExists(const std::string &datasetName, const std::string &name)
It checks if a foreign key with the given name exists in the data source.
void dropProperty(const std::string &datasetName, const std::string &name)
It removes a property from the given dataset.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, const std::string &propertyName, const te::gm::Envelope *e, te::gm::SpatialRelation r, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name using a spatial filter over the specified property....
std::unique_ptr< te::da::CheckConstraint > getCheckConstraint(const std::string &datasetName, const std::string &name)
It gets the check constraint of the dataset with the given name.
void addCheckConstraint(const std::string &datasetName, te::da::CheckConstraint *cc)
It adds a check constraint to the dataset.
std::unique_ptr< te::da::DataSet > query(const std::string &query, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It executes a query that may return some data using the data source native language....
void renameDataSet(const std::string &name, const std::string &newName)
It renames a dataset.
void begin()
It starts a new transaction.
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:54
@ FORWARDONLY
Definition: Enums.h:55
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:41
@ RAccess
Definition: Enums.h:43
SpatialRelation
Spatial relations between geometric objects.
Definition: Enums.h:128
TerraLib.
The Layer WMS 1.3.0 struct.
Definition: DataTypes.h:213
#define TEOGCWMSDATAACCESSEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:71
Proxy configuration file for TerraView (see terraview_config.h).