Line data Source code
1 : /********************************************************************\
2 : * qofbackend-prov.hpp -- Manage creation of a QofBackend subclass. *
3 : * *
4 : * Copyright 2016 John Ralls <jralls@ceridwen.us> *
5 : * *
6 : * This program is free software; you can redistribute it and/or *
7 : * modify it under the terms of the GNU General Public License as *
8 : * published by the Free Software Foundation; either version 2 of *
9 : * the License, or (at your option) any later version. *
10 : * *
11 : * This program is distributed in the hope that it will be useful, *
12 : * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 : * GNU General Public License for more details. *
15 : * *
16 : * You should have received a copy of the GNU General Public License*
17 : * along with this program; if not, contact: *
18 : * *
19 : * Free Software Foundation Voice: +1-617-542-5942 *
20 : * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
21 : * Boston, MA 02110-1301, USA gnu@gnu.org *
22 : * *
23 : \********************************************************************/
24 :
25 : #ifndef __GNC_BACKEND_PROV_HPP__
26 : #define __GNC_BACKEND_PROV_HPP__
27 :
28 : #include <memory>
29 :
30 : struct QofBackendProvider
31 : {
32 48 : QofBackendProvider(const char* name, const char* type) :
33 48 : provider_name {name}, access_method {type} {}
34 : QofBackendProvider(QofBackendProvider&) = delete;
35 : QofBackendProvider(QofBackendProvider&&) = delete;
36 4 : virtual ~QofBackendProvider() {}
37 :
38 : /** Return a new, fully initialized backend.
39 : *
40 : * If the backend supports configuration, all configuration options
41 : * should be initialised to usable values here.
42 : * */
43 : virtual QofBackend * create_backend(void) = 0;
44 :
45 : /** \brief Distinguish two providers with same access method.
46 :
47 : More than 1 backend can be registered under the same access_method,
48 : so each one is passed the path to the data (e.g. a file) and
49 : should return TRUE only:
50 : -# if the backend recognises the type as one that it can load and write or
51 : -# if the path contains no data but can be used (e.g. a new session).
52 :
53 : \note If the backend can cope with more than one type, the backend
54 : should not try to store or cache the sub-type for this data.
55 : It is sufficient only to return TRUE if any ONE of the supported
56 : types match the incoming data. The backend should not assume that
57 : returning TRUE will mean that the data will naturally follow.
58 : */
59 : /*@ null @*/
60 : virtual bool type_check(const char*) = 0;
61 : /** Some arbitrary name given for this particular backend provider */
62 : const char * provider_name;
63 :
64 : /** The access method that this provider provides, for example,
65 : * file:// http:// postgres:// or sqlite://, but without the :// at the end
66 : */
67 : const char * access_method;
68 : };
69 :
70 : using QofBackendProvider_ptr = std::unique_ptr<QofBackendProvider>;
71 :
72 : /** Let the system know about a new provider of backends. This function
73 : * is typically called by the provider library at library load time.
74 : * This function allows the backend library to tell the QOF infrastructure
75 : * that it can handle URL's of a certain type. Note that a single
76 : * backend library may register more than one provider, if it is
77 : * capable of handling more than one URL access method.
78 : */
79 : void qof_backend_register_provider (QofBackendProvider_ptr&&);
80 :
81 : void qof_backend_unregister_all_providers ();
82 :
83 : #endif // __GNC_BACKEND_PROV_HPP__
|