~drizzle-trunk/drizzle/development

520.3.2 by mark
add parser and scheduling plugin files
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
1999.6.1 by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
520.3.2 by mark
add parser and scheduling plugin files
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
19
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
20
#include <config.h>
2302.1.2 by Olaf van der Spek
Refactor Scheduler
21
#include <drizzled/plugin/scheduler.h>
2154.2.20 by Brian Aker
Merge in bits for header cleanup.
22
#include <drizzled/errmsg_print.h>
23
#include <drizzled/gettext.h>
1130.1.1 by Monty Taylor
Merged in plugin-slot-reorg patches.
24
2302.1.1 by Olaf van der Spek
Refactor
25
namespace drizzled {
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
26
2302.1.1 by Olaf van der Spek
Refactor
27
typedef std::vector<plugin::Scheduler*> schedulers_t;
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
28
2302.1.2 by Olaf van der Spek
Refactor Scheduler
29
static schedulers_t g_schedulers;
2302.1.1 by Olaf van der Spek
Refactor
30
static plugin::Scheduler* g_scheduler= NULL;
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
31
32
bool plugin::Scheduler::addPlugin(plugin::Scheduler *sched)
33
{
2302.1.2 by Olaf van der Spek
Refactor Scheduler
34
  BOOST_FOREACH(schedulers_t::reference it, g_schedulers)
994.2.2 by Monty Taylor
Store a Registry of SchedulerFactories and set one of them at startup for better error messages earlier.
35
  {
2302.1.2 by Olaf van der Spek
Refactor Scheduler
36
    if (it->getName() != sched->getName())
37
      continue;
38
    errmsg_printf(error::ERROR, _("Attempted to register a scheduler %s, but a scheduler has already been registered with that name.\n"), sched->getName().c_str());
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
39
    return true;
40
  }
1192.2.2 by Monty Taylor
Added type name strings to all of the plugin types.
41
  sched->deactivate();
2302.1.1 by Olaf van der Spek
Refactor
42
  g_schedulers.push_back(sched);
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
43
  return false;
44
}
45
46
void plugin::Scheduler::removePlugin(plugin::Scheduler *sched)
47
{
2302.1.2 by Olaf van der Spek
Refactor Scheduler
48
  g_schedulers.erase(std::find(g_schedulers.begin(), g_schedulers.end(), sched));
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
49
}
50
1966.2.9 by Brian Aker
Remove the use of "using std" from the plugin interface .cc files.
51
bool plugin::Scheduler::setPlugin(const std::string& name)
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
52
{
2302.1.2 by Olaf van der Spek
Refactor Scheduler
53
  BOOST_FOREACH(schedulers_t::reference it, g_schedulers)
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
54
  {
2302.1.2 by Olaf van der Spek
Refactor Scheduler
55
    if (it->getName() != name)
56
      continue;
2302.1.1 by Olaf van der Spek
Refactor
57
    if (g_scheduler)
58
      g_scheduler->deactivate();
2302.1.2 by Olaf van der Spek
Refactor Scheduler
59
    g_scheduler= it;
2302.1.1 by Olaf van der Spek
Refactor
60
    g_scheduler->activate();
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
61
    return false;
62
  }
2302.1.2 by Olaf van der Spek
Refactor Scheduler
63
  errmsg_printf(error::WARN, _("Attempted to configure %s as the scheduler, which did not exist.\n"), name.c_str());
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
64
  return true;
65
}
66
67
plugin::Scheduler *plugin::Scheduler::getScheduler()
68
{
2302.1.1 by Olaf van der Spek
Refactor
69
  return g_scheduler;
1152.1.5 by Brian Aker
Remove Factory/make scheduler work like everything else.
70
}
1130.3.10 by Monty Taylor
Cleaned up service namespacing.
71
72
} /* namespace drizzled */