- Cleanup GlobalPreferences badly cluttered interface, removing

deprecated methods and things that don't exist in the design
- Put the ``sgpemrc'' application configuration file into
the proper place (``$HOME/.sgpemv2''), creating the directory
if it doesn't exist, as per specs
- Disable test-global_preferences_serialization building since
it doesn't work with the new interface (todo: create a class inheriting 
from GlobalPreferences, and redefining get_config_filename() to return
a tmpname to a mkfifo() pipe connected to the stdout. If you don't understand 
a word of this, you're not a Real Unix Programmer(tm))
- Update other files to use the new interface


git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1178 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2006-09-15 21:31:31 +00:00
parent bd1b8f879b
commit 93feee1ee5
8 changed files with 79 additions and 124 deletions

View File

@ -455,13 +455,13 @@ if COND_TESTS
noinst_PROGRAMS = \ noinst_PROGRAMS = \
src/testsuite/test-cairo_widget \ src/testsuite/test-cairo_widget \
src/testsuite/test-global_preferences_serialization \
src/testsuite/test-history \ src/testsuite/test-history \
src/testsuite/test-holt_widget \ src/testsuite/test-holt_widget \
src/testsuite/test-key_file \ src/testsuite/test-key_file \
src/testsuite/test-simulation_widget src/testsuite/test-simulation_widget
# disable : # disable :
# src/testsuite/test-global_preferences_serialization
# src/testsuite/test-parse_command # src/testsuite/test-parse_command
# src/testsuite/test-stepforward # src/testsuite/test-stepforward
@ -488,14 +488,14 @@ src_testsuite_test_history_SOURCES = \
src/backend/static_thread.cc \ src/backend/static_thread.cc \
src/testsuite/test-history.cc src/testsuite/test-history.cc
src_testsuite_test_global_preferences_serialization_CPPFLAGS = \ #src_testsuite_test_global_preferences_serialization_CPPFLAGS = \
-I@top_srcdir@/src/backend \ # -I@top_srcdir@/src/backend \
$(GLIBMM_CFLAGS) # $(GLIBMM_CFLAGS)
src_testsuite_test_global_preferences_serialization_LDFLAGS = \ #src_testsuite_test_global_preferences_serialization_LDFLAGS = \
src/backend/libbackend.la \ # src/backend/libbackend.la \
$(GLIBMM_LIBS) # $(GLIBMM_LIBS)
src_testsuite_test_global_preferences_serialization_SOURCES = \ #src_testsuite_test_global_preferences_serialization_SOURCES = \
src/testsuite/test-global_preferences_serialization.cc # src/testsuite/test-global_preferences_serialization.cc
src_testsuite_test_key_file_CPPFLAGS = \ src_testsuite_test_key_file_CPPFLAGS = \
-I@top_srcdir@/src/backend \ -I@top_srcdir@/src/backend \
@ -592,11 +592,12 @@ src_testsuite_test_holt_widget_SOURCES = \
# while it's finishing the distcheck target # while it's finishing the distcheck target
CLEANFILES += \ CLEANFILES += \
src/testsuite/.libs/test-cairo_widget \ src/testsuite/.libs/test-cairo_widget \
src/testsuite/.libs/test-global_preferences_serialization \
src/testsuite/.libs/test-history \ src/testsuite/.libs/test-history \
src/testsuite/.libs/test-holt_widget \ src/testsuite/.libs/test-holt_widget \
src/testsuite/.libs/test-key_file \ src/testsuite/.libs/test-key_file \
src/testsuite/.libs/test-simulation_widget src/testsuite/.libs/test-simulation_widget
# disabled:
# src/testsuite/.libs/test-global_preferences_serialization
endif #~ if COND_TESTS endif #~ if COND_TESTS

View File

@ -72,8 +72,8 @@ PythonCPUPolicyManager::PythonCPUPolicyManager()
GlobalPreferences& prefs = GlobalPreferences::get_instance(); GlobalPreferences& prefs = GlobalPreferences::get_instance();
Glib::ustring importdirs = "import sys\n" Glib::ustring importdirs = "import sys\n"
"sys.path[:0] = [ "; "sys.path[:0] = [ ";
for_each(prefs.policies_dir_begin(), for_each(prefs.get_policy_dirs().begin(),
prefs.policies_dir_end(), prefs.get_policy_dirs().end(),
pol_dirs_concat(importdirs)); pol_dirs_concat(importdirs));
importdirs += " '" SHAREDIR "' ]\n"; importdirs += " '" SHAREDIR "' ]\n";
@ -101,8 +101,8 @@ void
PythonCPUPolicyManager::collect_policies() PythonCPUPolicyManager::collect_policies()
{ {
GlobalPreferences& prefs = GlobalPreferences::get_instance(); GlobalPreferences& prefs = GlobalPreferences::get_instance();
GlobalPreferences::dir_iterator dir_it = prefs.policies_dir_begin(); GlobalPreferences::DirVectorIt dir_it = prefs.get_policy_dirs().begin();
GlobalPreferences::dir_iterator dir_end = prefs.policies_dir_end(); GlobalPreferences::DirVectorIt dir_end = prefs.get_policy_dirs().end();
for (; dir_it != dir_end; ++dir_it) for (; dir_it != dir_end; ++dir_it)
{ {

View File

@ -65,8 +65,11 @@ main(int argc, char** argv)
exit(-1); exit(-1);
} }
else else
{
// Add argv[1] as the directory to search for uninstalled policies // Add argv[1] as the directory to search for uninstalled policies
sgpem::GlobalPreferences::get_instance().add_policies_dir(argv[1]); GlobalPreferences::DirVector& pol_dirs = GlobalPreferences::get_instance().get_policy_dirs();
pol_dirs.insert(pol_dirs.begin(), argv[1]);
}
// Self-register itself to PoliciesGatekeeper, however we don't care about it // Self-register itself to PoliciesGatekeeper, however we don't care about it
PythonCPUPolicyManager polman; PythonCPUPolicyManager polman;

View File

@ -20,12 +20,13 @@
#include "config.h" #include "config.h"
#include <glib/gstdio.h>
#include <glibmm/miscutils.h>
#include <sgpemv2/global_preferences.hh> #include <sgpemv2/global_preferences.hh>
#include <sgpemv2/key_file.hh> #include <sgpemv2/key_file.hh>
#include <sgpemv2/string_utils.hh> #include <sgpemv2/string_utils.hh>
#include <sstream>
// Do not include in header file: // Do not include in header file:
#include <sgpemv2/templates/singleton.tcc> #include <sgpemv2/templates/singleton.tcc>
@ -39,61 +40,35 @@ GlobalPreferences::GlobalPreferences()
{} {}
GlobalPreferences::dir_iterator const Glib::ustring&
GlobalPreferences::policies_dir_begin() const GlobalPreferences::get_preferences_dir() const throw(Glib::FileError)
{ {
return _pol_dirs.begin(); using namespace Glib;
static const ustring dir = get_home_dir() + G_DIR_SEPARATOR_S + ".sgpemv2";
if(!file_test(dir, FILE_TEST_EXISTS & FILE_TEST_IS_DIR))
{
const int err = g_mkdir(dir.c_str(), 0755);
if(err != 0)
throw FileError(FileError::FAILED, g_strerror(err));
}
return dir;
} }
GlobalPreferences::dir_iterator const Glib::ustring&
GlobalPreferences::policies_dir_end() const GlobalPreferences::get_config_filename() const throw(Glib::FileError)
{ {
return _pol_dirs.end(); static const Glib::ustring filename = get_preferences_dir() + G_DIR_SEPARATOR_S + Glib::ustring("sgpemrc");
return filename;
} }
GlobalPreferences::DirVector&
GlobalPreferences::dir_iterator
GlobalPreferences::modules_dir_begin() const
{
return _mod_dirs.begin();
}
GlobalPreferences::dir_iterator
GlobalPreferences::modules_dir_end() const
{
return _mod_dirs.end();
}
const
Glib::ustring
GlobalPreferences::get_config_filename()
{
return Glib::ustring("sgpem.cfg");
}
void
GlobalPreferences::add_modules_dir(const Glib::ustring& moddir)
{
_mod_dirs.insert(_mod_dirs.begin(), moddir);
}
void
GlobalPreferences::add_policies_dir(const Glib::ustring& poldir)
{
_pol_dirs.insert(_pol_dirs.begin(), poldir);
}
std::vector<Glib::ustring>&
GlobalPreferences::get_policy_dirs() GlobalPreferences::get_policy_dirs()
{ {
return _pol_dirs; return _pol_dirs;
} }
std::vector<Glib::ustring>& GlobalPreferences::DirVector&
GlobalPreferences::get_plugin_dirs() GlobalPreferences::get_plugin_dirs()
{ {
return _mod_dirs; return _mod_dirs;
@ -113,7 +88,7 @@ GlobalPreferences::set_speed(int new_speed)
return old_speed; return old_speed;
} }
Glib::ustring const Glib::ustring
GlobalPreferences::get_schedulable_color(Schedulable::state st) const GlobalPreferences::get_schedulable_color(Schedulable::state st) const
{ {
switch(st) switch(st)
@ -133,7 +108,7 @@ GlobalPreferences::get_schedulable_color(Schedulable::state st) const
} }
} }
Glib::ustring const Glib::ustring
GlobalPreferences::get_request_color(Request::state st) const GlobalPreferences::get_request_color(Request::state st) const
{ {
switch(st) switch(st)
@ -154,7 +129,7 @@ GlobalPreferences::get_request_color(Request::state st) const
} }
void void
GlobalPreferences::write_configrc() GlobalPreferences::write_configrc() throw(Glib::FileError)
{ {
KeyFile kf; KeyFile kf;
@ -163,7 +138,7 @@ GlobalPreferences::write_configrc()
} }
void void
GlobalPreferences::load_configrc() GlobalPreferences::load_configrc() throw(Glib::FileError)
{ {
KeyFile kf; KeyFile kf;
@ -171,24 +146,6 @@ GlobalPreferences::load_configrc()
key_file_read(kf); key_file_read(kf);
} }
void
GlobalPreferences::write_configrc(std::ostream &os)
{
KeyFile kf;
key_file_write(kf);
kf.file_write(os);
}
void
GlobalPreferences::load_configrc(std::istream &is)
{
KeyFile kf;
kf.file_read(is);
key_file_read(kf);
}
void void
GlobalPreferences::key_file_read(KeyFile& kf) GlobalPreferences::key_file_read(KeyFile& kf)
@ -277,8 +234,8 @@ GlobalPreferences::key_file_write(KeyFile& kf)
/* /*
GlobalPreferences::dir_iterator iter=_globalPreferences.modules_dir_begin(); GlobalPreferences::dir_iterator iter=_globalPreferences.modules_dir_begin();
*/ */
dir_iterator iter = _mod_dirs.begin(); DirVectorConstIt iter = _mod_dirs.begin();
dir_iterator end = _mod_dirs.end(); DirVectorConstIt end = _mod_dirs.end();
int n = 0; int n = 0;
while (iter != end) while (iter != end)
{ {
@ -300,8 +257,8 @@ GlobalPreferences::key_file_write(KeyFile& kf)
/* /*
GlobalPreferences::dir_iterator iter=_globalPreferences.policies_dir_begin(); GlobalPreferences::dir_iterator iter=_globalPreferences.policies_dir_begin();
*/ */
dir_iterator iter = _pol_dirs.begin(); DirVectorConstIt iter = _pol_dirs.begin();
dir_iterator end = _pol_dirs.end(); DirVectorConstIt end = _pol_dirs.end();
int n = 0; int n = 0;
while (iter != end) while (iter != end)
{ {

View File

@ -55,12 +55,13 @@ PluginManager::rescan_dirs()
_modules.clear(); _modules.clear();
GlobalPreferences& prefs = GlobalPreferences::get_instance(); GlobalPreferences& prefs = GlobalPreferences::get_instance();
GlobalPreferences::dir_iterator it = prefs.modules_dir_begin(); GlobalPreferences::DirVector& plugin_dirs = prefs.get_plugin_dirs();
GlobalPreferences::DirVectorIt it = plugin_dirs.begin();
Glib::PatternSpec shared_obj(Glib::ustring("*.") + G_MODULE_SUFFIX); Glib::PatternSpec shared_obj(Glib::ustring("*.") + G_MODULE_SUFFIX);
while (it != prefs.modules_dir_end()) while (it != plugin_dirs.end())
{ {
Glib::Dir dir(*it); Glib::Dir dir(*it);

View File

@ -23,7 +23,9 @@
#include "config.h" #include "config.h"
#include <glibmm/fileutils.h>
#include <glibmm/ustring.h> #include <glibmm/ustring.h>
#include <iostream> #include <iostream>
#include <vector> #include <vector>
@ -47,47 +49,29 @@ namespace sgpem
class SG_DLLEXPORT GlobalPreferences : public Singleton<GlobalPreferences> class SG_DLLEXPORT GlobalPreferences : public Singleton<GlobalPreferences>
{ {
friend class Singleton<GlobalPreferences>; friend class Singleton<GlobalPreferences>;
public: public:
typedef std::vector<Glib::ustring> DirVector;
typedef std::vector<Glib::ustring>::const_iterator dir_iterator; typedef DirVector::iterator DirVectorIt;
typedef DirVector::const_iterator DirVectorConstIt;
dir_iterator modules_dir_begin() const;
dir_iterator modules_dir_end() const;
dir_iterator policies_dir_begin() const;
dir_iterator policies_dir_end() const;
/** /**
\return GlobalPreferences configuration filename \return GlobalPreferences configuration filename
*/ */
const Glib::ustring get_config_filename(); const Glib::ustring& get_config_filename() const throw(Glib::FileError);
/**
\brief Adds a directory search entry to modules dirs
*/
void add_modules_dir(const Glib::ustring& moddir);
/**
\brief Adds a directory search entry to policies dirs
*/
void add_policies_dir(const Glib::ustring& poldir);
/** /**
\brief Returns configured Policy directories \brief Returns configured Policy directories
\return ::_policy_dirs \return ::_policy_dirs
*/ */
std::vector<Glib::ustring>& get_policy_dirs(); DirVector& get_policy_dirs();
/** /**
\brief Returns configured Plugin directories \brief Returns configured Plugin directories
\return ::_plugin_dirs \return ::_plugin_dirs
*/ */
std::vector<Glib::ustring>& get_plugin_dirs(); DirVector& get_plugin_dirs();
/** /**
\brief Returns the simumulation speed \brief Returns the simumulation speed
@ -106,14 +90,14 @@ namespace sgpem
/** /**
\return A HTML color name or hexadecimal code \return A HTML color name or hexadecimal code
*/ */
Glib::ustring get_schedulable_color(Schedulable::state st) const; const Glib::ustring get_schedulable_color(Schedulable::state st) const;
/** /**
\brief Also works with SubRequest::state \brief Also works with SubRequest::state
\return A HTML color name or hexadecimal code \return A HTML color name or hexadecimal code
*/ */
Glib::ustring get_request_color(Request::state st) const; const Glib::ustring get_request_color(Request::state st) const;
/** /**
\brief Writes preferences to disk \brief Writes preferences to disk
@ -126,7 +110,7 @@ namespace sgpem
We advice using a key=value text format. We advice using a key=value text format.
#- Close the configuration file. #- Close the configuration file.
*/ */
void write_configrc(); void write_configrc() throw(Glib::FileError);
/** /**
\brief Load global preferences from disk \brief Load global preferences from disk
@ -135,10 +119,17 @@ namespace sgpem
\throw std::io_error \throw std::io_error
*/ */
void load_configrc(); void load_configrc() throw(Glib::FileError);
/** \brief Prepare directory to read/write preferences to disk
*
* This method should make sure that an appropriate directory
* for saving preferences exists; in Windows it will be
* %ApplicationData%/sgpemv2, on *nix systems $HOME/.sgpemv2.
* If it doesn't exist, attempt to create it.
*/
const Glib::ustring& get_preferences_dir() const throw(Glib::FileError);
void write_configrc(std::ostream &os);
void load_configrc(std::istream &is);
private: private:
GlobalPreferences(); GlobalPreferences();
GlobalPreferences(const GlobalPreferences&); GlobalPreferences(const GlobalPreferences&);
@ -150,11 +141,13 @@ namespace sgpem
/** /**
\brief Returns directories to search for plugins \brief Returns directories to search for plugins
*/ */
std::vector<Glib::ustring> _mod_dirs; DirVector _mod_dirs;
/** /**
\brief Returns directories to search for policies \brief Returns directories to search for policies
*/ */
std::vector<Glib::ustring> _pol_dirs; DirVector _pol_dirs;
/* /*
These directories can be added to SGPEM in the following ways: These directories can be added to SGPEM in the following ways:
-# Hardcoded (usually done for the default installation directory on *n?x-systems, but NOT for Microsoft Windows) -# Hardcoded (usually done for the default installation directory on *n?x-systems, but NOT for Microsoft Windows)

View File

@ -115,11 +115,11 @@ parse_options(int argc, char** argv)
for (Glib::OptionGroup::vecustrings::const_iterator it = policies_dir_val.begin(); for (Glib::OptionGroup::vecustrings::const_iterator it = policies_dir_val.begin();
it != policies_dir_val.end(); ++it) it != policies_dir_val.end(); ++it)
prefs.add_policies_dir(*it); prefs.get_policy_dirs().push_back(*it);
for (Glib::OptionGroup::vecustrings::const_iterator it = modules_dir_val.begin(); for (Glib::OptionGroup::vecustrings::const_iterator it = modules_dir_val.begin();
it != modules_dir_val.end(); ++it) it != modules_dir_val.end(); ++it)
prefs.add_modules_dir(*it); prefs.get_plugin_dirs().push_back(*it);
// Now that GlobalPreferences has been initialized properly, // Now that GlobalPreferences has been initialized properly,

View File

@ -55,13 +55,13 @@ main(int argc, char** argv)
int i = 1; int i = 1;
while (i < argc && (*argv[i] != '%')) while (i < argc && (*argv[i] != '%'))
{ {
gp.add_modules_dir( Glib::ustring(argv[i]) ); gp.get_plugin_dirs().push_back( Glib::ustring(argv[i]) );
i++; i++;
} }
i++; i++;
while (i < argc) while (i < argc)
{ {
gp.add_policies_dir( Glib::ustring(argv[i]) ); gp.get_policy_dirs().push_back( Glib::ustring(argv[i]) );
i++; i++;
} }