00001
00002
#if !defined(__INC_DRIVER_H)
00003 #define __INC_DRIVER_H
00004
00005
#include <vector>
00006
#include <map>
00007
#include <string>
00008
00009
#include <sigc++/sigc++.h>
00010
00011
#include <yehia/plugin.h>
00012
00013
#include "gql++/connection.h"
00014
00015
namespace GQL
00016 {
00017
00018 class DriverPropertyInfo
00019 {
00020
public:
00021 DriverPropertyInfo(
const std::string& nam,
00022
const std::string& descr = std::string(),
00023
const std::string& val = std::string(),
00024
bool req =
false,
00025
const std::vector<std::string>& cs = std::vector<std::string>())
00026 : choices_(cs), description_(descr), name_(nam),
00027 required_(req), value_(val) { }
00028
00029 const std::vector<std::string>&
choices()
const {
return(choices_); }
00030 const std::string&
description()
const {
return(description_); }
00031 const std::string&
name()
const {
return(description_); }
00032 bool required()
const {
return(required_); }
00033 const std::string&
value()
const {
return(value_); }
00034
private:
00035 std::vector<std::string> choices_;
00036 std::string description_;
00037 std::string name_;
00038
bool required_;
00039 std::string value_;
00040 };
00041
00042 class Driver :
public Yehia::Plugin
00043 {
00044
public:
00045 Driver(
Yehia::PluginManager& mgr,
const std::string&
id,
00046
const std::string& name)
00047 : Yehia::Plugin(mgr), id_(id), name_(name) {
00048 }
00049
virtual ~Driver();
00050
00051 const std::string&
get_id()
const {
return id_; }
00052 const std::string&
get_name()
const {
return name_; }
00053 int get_major_version()
const {
return major_; }
00054 int get_minor_version()
const {
return minor_; }
00055
virtual std::vector<DriverPropertyInfo> get_property_info(
00056
const std::string& url,
00057
const std::map<std::string, std::string>& props)
const = 0;
00058
00059
virtual bool accept_url(
const std::string& str)
const = 0;
00060
virtual Connection *connect(
00061
const std::string& url,
00062
const std::map<std::string, std::string>& prop) = 0;
00063
00064
00065 virtual std::string
name()
const {
return id_; }
00066 virtual std::string
description()
const {
return name_; }
00067
protected:
00068 void set_version(
int maj,
int min) {
00069 minor_ = min;
00070 major_ = maj;
00071 }
00072
private:
00073
int minor_, major_;
00074 std::string id_, name_;
00075 };
00076
00077
00078 }
00079
00080
#endif