1
/* Copyright 2011 Yorba Foundation
3
* This software is licensed under the GNU Lesser General Public License
4
* (version 2.1 or later). See the COPYING file in this distribution.
10
* The core handler that is responsible for handling the different plugins
11
* and dispatching requests to the relevant driver.
13
public class AlienDatabaseHandler {
14
private static AlienDatabaseHandler instance;
15
private Gee.Map<AlienDatabaseDriverID?, AlienDatabaseDriver> driver_map;
18
* Initialisation method that creates a singleton instance.
20
public static void init() {
21
// Check for null in case init() is called more than once.
23
instance = new AlienDatabaseHandler();
27
* Termination method that clears the singleton instance.
29
public static void terminate() {
33
public static AlienDatabaseHandler get_instance() {
37
private AlienDatabaseHandler() {
38
driver_map = new Gee.HashMap<AlienDatabaseDriverID?, AlienDatabaseDriver>(
39
AlienDatabaseDriverID.hash, AlienDatabaseDriverID.equal, AlienDatabaseDriverID.equal
43
public void register_driver(AlienDatabaseDriver driver) {
44
driver_map.set(driver.get_id(), driver);
47
public void unregister_driver(AlienDatabaseDriver driver) {
48
driver_map.unset(driver.get_id());
51
public Gee.Collection<AlienDatabaseDriver> get_drivers() {
52
return driver_map.values;
55
public AlienDatabaseDriver get_driver(AlienDatabaseDriverID driver_id) {
56
AlienDatabaseDriver driver = driver_map.get(driver_id);
58
warning("Could not find driver for id: %s", driver_id.id);
62
public Gee.Collection<DiscoveredAlienDatabase> get_discovered_databases() {
63
Gee.ArrayList<DiscoveredAlienDatabase> discovered_databases =
64
new Gee.ArrayList<DiscoveredAlienDatabase>();
65
foreach (AlienDatabaseDriver driver in driver_map.values) {
66
discovered_databases.add_all(driver.get_discovered_databases());
68
return discovered_databases;
71
public void add_menu_entries(Gtk.UIManager ui, string placeholder) {
72
foreach (AlienDatabaseDriver driver in get_drivers()) {
73
ui.add_ui(ui.new_merge_id(), placeholder,
74
driver.get_menu_name(),
75
driver.get_action_entry().name,
76
Gtk.UIManagerItemType.MENUITEM, false);