libosmscout  1.1.1
DBInstance.h
Go to the documentation of this file.
1  #ifndef OSMSCOUT_CLIENT_QT_DBINSTANCE_H
2 #define OSMSCOUT_CLIENT_QT_DBINSTANCE_H
3 
4 /*
5  OSMScout - a Qt backend for libosmscout and libosmscout-map
6  Copyright (C) 2017 Lukáš Karas
7 
8  This library is free software; you can redistribute it and/or
9  modify it under the terms of the GNU Lesser General Public
10  License as published by the Free Software Foundation; either
11  version 2.1 of the License, or (at your option) any later version.
12 
13  This library is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  */
22 
23 #include <osmscout/Database.h>
26 #include <osmscout/MapService.h>
27 #include <osmscout/MapPainterQt.h>
28 
29 #include <osmscout/util/Breaker.h>
30 
32 
33 #include <QObject>
34 #include <QMutex>
35 #include <QDebug>
36 #include <QMap>
37 #include <QThread>
38 #include <QElapsedTimer>
39 #include <QMutexLocker>
40 
41 namespace osmscout {
42 
47 {
48 private:
49  mutable QMutex mutex;
50  bool aborted;
51 
52 public:
53  QBreaker();
54 
55  void Break() override;
56  bool IsAborted() const override;
57  void Reset() override;
58 };
59 
64 {
65  enum StyleErrorType {
66  Symbol, Error, Warning, Exception
67  };
68 
69 public:
70  StyleError(StyleErrorType type, int line, int column, const QString &text) :
71  type(type), line(line), column(column), text(text){}
72  explicit StyleError(QString msg);
73 
74  StyleErrorType GetType() const { return type; }
75  QString GetTypeName() const;
76  int GetLine() const{ return line; }
77  int GetColumn() const{ return column; }
78  const QString &GetText() const { return text; }
79  QString GetDescription() const {return GetTypeName()+": "+GetText();}
80 
81 private:
82  StyleErrorType type;
83  int line;
84  int column;
85  QString text;
86 };
87 
88 
96 class OSMSCOUT_CLIENT_QT_API DBInstance : public QObject
97 {
98  Q_OBJECT
99 
100 public:
101  const QString path;
102 
103 private:
104  mutable QMutex mutex;
105  QMap<QThread*,osmscout::MapPainterQt*> painterHolder;
106  QElapsedTimer lastUsage;
107 
108  osmscout::GeoBox dbBox;
109  osmscout::DatabaseRef database;
110 
111  osmscout::LocationServiceRef locationService;
112  osmscout::LocationDescriptionServiceRef locationDescriptionService;
113  osmscout::MapServiceRef mapService;
114 
115  osmscout::StyleConfigRef styleConfig;
116 
117 public slots:
118  void onThreadFinished();
119 
120 public:
121  DBInstance(const QString &path,
122  const osmscout::DatabaseRef& database,
123  const osmscout::LocationServiceRef& locationService,
124  const osmscout::LocationDescriptionServiceRef& locationDescriptionService,
125  const osmscout::MapServiceRef& mapService,
126  const osmscout::StyleConfigRef& styleConfig):
127  path(path),
128  database(database),
129  locationService(locationService),
130  locationDescriptionService(locationDescriptionService),
131  mapService(mapService),
132  styleConfig(styleConfig)
133  {
134  if (!database->GetBoundingBox(dbBox)){
135  osmscout::log.Error() << "Failed to get database GeoBox: " << path.toStdString();
136  }
137  lastUsage.start();
138  };
139 
140  ~DBInstance() override
141  {
142  close();
143  };
144 
145  osmscout::GeoBox GetDBGeoBox() const
146  {
147  return dbBox;
148  }
149 
154  bool IsOpen() const
155  {
156  return database->IsOpen();
157  }
158 
160  {
161  QMutexLocker locker(&mutex);
162  lastUsage.restart();
163  return database;
164  }
165 
167  {
168  QMutexLocker locker(&mutex);
169  lastUsage.restart();
170  return mapService;
171  }
172 
174  {
175  QMutexLocker locker(&mutex);
176  lastUsage.restart();
177  return locationDescriptionService;
178  }
179 
181  {
182  QMutexLocker locker(&mutex);
183  lastUsage.restart();
184  return locationService;
185  }
186 
188  {
189  return styleConfig;
190  }
191 
195  qint64 LastUsageMs() const
196  {
197  QMutexLocker locker(&mutex);
198  return lastUsage.elapsed();
199  }
200 
201  bool LoadStyle(QString stylesheetFilename,
202  std::unordered_map<std::string,bool> stylesheetFlags,
203  QList<StyleError> &errors);
204 
212  osmscout::MapPainterQt* GetPainter();
213 
214  void close();
215 };
216 
217 using DBInstanceRef = std::shared_ptr<DBInstance>;
218 
219 }
220 
221 #endif /* OSMSCOUT_CLIENT_QT_DBINSTANCE_H */
StyleErrorType GetType() const
Definition: DBInstance.h:74
OSMSCOUT_API Log log
osmscout::DatabaseRef GetDatabase()
Definition: DBInstance.h:159
#define OSMSCOUT_CLIENT_QT_API
Definition: ClientQtImportExport.h:45
const QString & GetText() const
Definition: DBInstance.h:78
osmscout::LocationDescriptionServiceRef GetLocationDescriptionService()
Definition: DBInstance.h:173
bool IsOpen() const
Definition: DBInstance.h:154
QString GetDescription() const
Definition: DBInstance.h:79
~DBInstance() override
Definition: DBInstance.h:140
Log & Error(bool state)
Definition: Logger.h:469
DBInstance(const QString &path, const osmscout::DatabaseRef &database, const osmscout::LocationServiceRef &locationService, const osmscout::LocationDescriptionServiceRef &locationDescriptionService, const osmscout::MapServiceRef &mapService, const osmscout::StyleConfigRef &styleConfig)
Definition: DBInstance.h:121
std::shared_ptr< MapService > MapServiceRef
Definition: MapService.h:399
const QString path
Definition: DBInstance.h:101
std::shared_ptr< Database > DatabaseRef
Reference counted reference to an Database instance.
Definition: Database.h:555
osmscout::GeoBox GetDBGeoBox() const
Definition: DBInstance.h:145
Definition: Area.h:38
Definition: Styles.h:1135
Definition: DBInstance.h:63
osmscout::LocationServiceRef GetLocationService()
Definition: DBInstance.h:180
std::shared_ptr< StyleConfig > StyleConfigRef
Definition: StyleConfig.h:849
osmscout::MapServiceRef GetMapService()
Definition: DBInstance.h:166
Definition: Breaker.h:37
std::shared_ptr< LocationDescriptionService > LocationDescriptionServiceRef
Definition: LocationDescriptionService.h:440
Definition: MapPainterQt.h:46
osmscout::StyleConfigRef GetStyleConfig() const
Definition: DBInstance.h:187
StyleError(StyleErrorType type, int line, int column, const QString &text)
Definition: DBInstance.h:70
Definition: DBInstance.h:96
qint64 LastUsageMs() const
Definition: DBInstance.h:195
std::shared_ptr< LocationService > LocationServiceRef
Definition: LocationService.h:317
int GetColumn() const
Definition: DBInstance.h:77
int GetLine() const
Definition: DBInstance.h:76
std::shared_ptr< DBInstance > DBInstanceRef
Definition: DBInstance.h:217
Definition: DBInstance.h:46