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