- Added SETPOLICY and LISTPOLICIES commands to text-based interface

- Fixed a bug preventing registration of managers in PoliciesGatekeeper

git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@634 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
elvez 2006-06-15 20:07:03 +00:00
parent 9642918dd8
commit 30d070a420
11 changed files with 96 additions and 11 deletions

View File

@ -120,6 +120,12 @@ PythonPolicy::get_description() const
} }
Glib::ustring
PythonPolicy::get_name() const
{
return _name;
}
bool bool
PythonPolicy::is_pre_emptive() const throw(UserInterruptException) PythonPolicy::is_pre_emptive() const throw(UserInterruptException)
{ {

View File

@ -63,6 +63,8 @@ namespace sgpem
*/ */
Glib::ustring get_description() const; Glib::ustring get_description() const;
Glib::ustring get_name() const;
/** /**
\returns \c TRUE if the policy is preemptive. \returns \c TRUE if the policy is preemptive.
\returns \c FALSE if the policy is not preemptive. \returns \c FALSE if the policy is not preemptive.

View File

@ -20,6 +20,7 @@
#include "python_policy_manager.hh" #include "python_policy_manager.hh"
#include "global_preferences.hh" #include "global_preferences.hh"
#include "policies_gatekeeper.hh"
#include <Python.h> #include <Python.h>
#include <glibmm/ustring.h> #include <glibmm/ustring.h>
@ -82,12 +83,12 @@ PythonPolicyManager::get_instance()
} }
Policy& // Policy&
PythonPolicyManager::get_policy() // PythonPolicyManager::get_policy()
{ // {
// FIXME : assumes that _python_policy is always != NULL! // // FIXME : assumes that _python_policy is always != NULL!
return *_python_policy; // return *_python_policy;
} // }
void void
@ -158,7 +159,10 @@ PythonPolicyManager::collect_policies()
//FIXME remove me when get_policy is dropped //FIXME remove me when get_policy is dropped
if(policy_name == "fcfs") if(policy_name == "fcfs")
{
_python_policy = pypolicy; _python_policy = pypolicy;
PoliciesGatekeeper::get_instance().activate_policy(&History::get_instance(), pypolicy);
}
} }
} }
} }

View File

@ -48,8 +48,9 @@ namespace sgpem
* In the next milestones it will be possible to manage * In the next milestones it will be possible to manage
* more than one, and to retrieve the correct Policy by * more than one, and to retrieve the correct Policy by
* passing a unique ID. * passing a unique ID.
FIXME depreceated
*/ */
Policy& get_policy(); //Policy& get_policy();
/** \brief Initialize the Python interpreter. /** \brief Initialize the Python interpreter.
* *

View File

@ -44,6 +44,11 @@ public:
void test_init(const char* policy_name) { void test_init(const char* policy_name) {
init(); init();
_python_policy = new PythonPolicy(policy_name); _python_policy = new PythonPolicy(policy_name);
}
Policy& get_policy() {
return *_python_policy;
} }
}; };

View File

@ -57,7 +57,7 @@ PoliciesGatekeeper::register_manager(PolicyManager* manager)
ManagerIterator end = _registered.end(); ManagerIterator end = _registered.end();
if(find(_registered.begin(), end, manager) != end) if(find(_registered.begin(), end, manager) == end)
_registered.push_back(manager); _registered.push_back(manager);
} }

View File

@ -43,7 +43,7 @@ namespace sgpem
*/ */
class PoliciesGatekeeper class SG_DLLEXPORT PoliciesGatekeeper
{ {
public: public:
/** \brief Returns the unique instance of this class, conforming to the Singleton pattern. /** \brief Returns the unique instance of this class, conforming to the Singleton pattern.

View File

@ -85,6 +85,8 @@ namespace sgpem
*/ */
virtual Glib::ustring get_description() const = 0; virtual Glib::ustring get_description() const = 0;
virtual Glib::ustring get_name() const = 0;
/** /**
Tell if this policy is preemptible. Tell if this policy is preemptible.

View File

@ -55,7 +55,7 @@ namespace sgpem
\return A reference to the policy. \return A reference to the policy.
FIXME deprecated FIXME deprecated
*/ */
virtual Policy& get_policy() = 0; //virtual Policy& get_policy() = 0;
/** /**
Init (or reset if yet initialized) the manager. Init (or reset if yet initialized) the manager.

View File

@ -21,6 +21,7 @@
#include "policy.hh" #include "policy.hh"
#include "scheduler.hh" #include "scheduler.hh"
#include "policy_manager.hh" #include "policy_manager.hh"
#include "policies_gatekeeper.hh"
#include "user_interrupt_exception.hh" #include "user_interrupt_exception.hh"
#include <iostream> #include <iostream>
@ -76,7 +77,8 @@ Scheduler::set_policy(Policy* p)
Policy& Policy&
Scheduler::get_policy() Scheduler::get_policy()
{ {
return _policy_manager.get_policy(); //return _policy_manager.get_policy();
return *PoliciesGatekeeper::get_instance().get_current_policy(&History::get_instance());
} }

View File

@ -19,6 +19,9 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "backend/string_utils.hh" #include "backend/string_utils.hh"
#include "backend/policies_gatekeeper.hh"
#include "backend/policy_manager.hh"
#include "backend/history.hh"
#include "text_simulation.hh" #include "text_simulation.hh"
using namespace std; using namespace std;
@ -295,6 +298,66 @@ check:
} }
obj->_devices[quale]->write_buffer(obj->get_policy()->get_description()); obj->_devices[quale]->write_buffer(obj->get_policy()->get_description());
} }
else if(arguments[param] == "SETPOLICY")
{
if(show_help)
{
obj->_devices[quale]->write_buffer(_(
"\n-- SetPolicy COMMAND --\nSelects the current applied policy."
"Syntax: SetPolicy <name>"));
return;
}
//FIXME assuming only one policy manager is present, but who cares, this
//is only temporary code...
PolicyManager* manager = PoliciesGatekeeper::get_instance().get_registered()[0];
vector<Policy*> available = manager->get_avail_policies();
obj->_devices[quale]->write_buffer(arguments[1] + "\n");
for(vector<Policy*>::iterator it = available.begin(); it != available.end(); ++it)
{
if((*it)->get_name().casefold() == arguments[1].casefold())
{
obj->stop();
PoliciesGatekeeper::get_instance().activate_policy(&History::get_instance(), *it);
return;
}
}
obj->_devices[quale]->write_buffer(_(
"\nERROR: no policy found with that name."
"\nType HELP SETPOLICY for the description of the sintax"));
}
else if(arguments[param] == "LISTPOLICIES")
{
if(show_help)
{
obj->_devices[quale]->write_buffer(_(
"\n-- ListPolicies COMMAND --\nShows the name of available policies."));
return;
}
//FIXME assuming only one policy manager is present, but who cares, this
//is only temporary code...
PolicyManager* manager = PoliciesGatekeeper::get_instance().get_registered()[0];
vector<Policy*> available = manager->get_avail_policies();
for(vector<Policy*>::iterator it = available.begin(); it != available.end(); ++it)
{
// Glib::ustring str;
// int_to_string((int)*it, str);
// obj->_devices[quale]->write_buffer(str + "\n");
obj->_devices[quale]->write_buffer("\n" + (*it)->get_name());
}
}
else if (arguments[param] == "GETPOLICYATTRIBUTES") else if (arguments[param] == "GETPOLICYATTRIBUTES")
{ {
if (show_help) if (show_help)