#include <ScriptingAgent.h>
Classes | |
struct | RegistrationDir |
Public Member Functions | |
ScriptingAgent () | |
ScriptingAgent (const string &file) | |
~ScriptingAgent () | |
virtual YCPValue | Read (const YCPPath &path, const YCPValue &arg=YCPNull(), const YCPValue &opt=YCPNull()) |
virtual YCPBoolean | Write (const YCPPath &path, const YCPValue &value, const YCPValue &arg=YCPNull()) |
virtual YCPList | Dir (const YCPPath &path) |
virtual YCPValue | Execute (const YCPPath &path, const YCPValue &value=YCPNull(), const YCPValue &arg=YCPNull()) |
virtual YCPMap | Error (const YCPPath &path) |
YCPValue | otherCommand (const YCPTerm &term) |
virtual YCPBoolean | RegisterAgent (const YCPPath &path, const YCPValue &value) |
virtual YCPBoolean | UnregisterAgent (const YCPPath &path) |
virtual YCPBoolean | UnregisterAllAgents () |
virtual YCPBoolean | UnmountAgent (const YCPPath &path) |
virtual YCPBoolean | RegisterNewAgents () |
Private Types | |
typedef vector< SCRSubAgent * > | SubAgents |
Private Member Functions | |
void | InitRegDirs () |
YCPValue | MountAgent (const YCPPath &path) |
YCPValue | MountAllAgents () |
YCPValue | UnmountAllAgents () |
void | Sweep () |
void | tryRegister (const YCPPath &path) |
SubAgents::const_iterator | findSubagent (const YCPPath &path) |
SubAgents::const_iterator | findAndRegisterSubagent (const YCPPath &path) |
YCPList | dirSubagents (const YCPPath &path) |
YCPValue | executeSubagentCommand (const char *command, const YCPPath &path, const YCPValue &arg=YCPNull(), const YCPValue &optpar=YCPNull()) |
SubAgents::iterator | findByPath (const YCPPath &path) |
void | parseConfigFiles (const string &directory) |
void | parseSingleConfigFile (const string &file) |
Private Attributes | |
bool | done_sweep |
list< RegistrationDir > | registration_dirs |
SubAgents | agents |
The main agant that dispatches calls to other agents.
typedef vector<SCRSubAgent*> ScriptingAgent::SubAgents [private] |
Type and list of subagents The vector is sorted by path
ScriptingAgent::ScriptingAgent | ( | ) |
Constructor.
References InitRegDirs(), and Sweep().
ScriptingAgent::ScriptingAgent | ( | const string & | file | ) |
Constructor. Load only a single SCR.
file | SCR configuration file to be registered. |
References InitRegDirs(), parseSingleConfigFile(), and y2debug.
ScriptingAgent::~ScriptingAgent | ( | ) |
Destructor. Also deletes subagents.
References UnregisterAllAgents().
Get a list of all subtrees.
Implements SCRAgent.
References executeSubagentCommand(), YCPElement::isNull(), and ycp2error.
If a SCR::Dir falls inside our tree, we have to provide a listing
References YCPList::add(), agents, YCPList::size(), str, and YCPList::value().
Referenced by executeSubagentCommand().
Get a detailed error description if a previous command failed
Reimplemented from SCRAgent.
References executeSubagentCommand(), YCPElement::isNull(), and ycp2error.
YCPValue ScriptingAgent::Execute | ( | const YCPPath & | path, | |
const YCPValue & | value = YCPNull () , |
|||
const YCPValue & | arg = YCPNull () | |||
) | [virtual] |
Executes a command.
Reimplemented from SCRAgent.
References executeSubagentCommand(), YCPElement::isNull(), y2debug, and ycp2error.
YCPValue ScriptingAgent::executeSubagentCommand | ( | const char * | command, | |
const YCPPath & | path, | |||
const YCPValue & | arg = YCPNull () , |
|||
const YCPValue & | optpar = YCPNull () | |||
) | [private] |
Calls a subagent to execute a Read, Write, Dir or other command
command | the command like "Read", "Dir", .. | |
path | All commands take a path as first parameter. Here you give an absolute path, for example .etc.liloconf.global. When calling the agent, this path will be made relative to the agents root. E.g. If the agent's root path would be .etc.liloconf and the command "Read", the resulting command would be Read (.global). | |
optional | value to be given as second parameter to the call |
References YCPTerm::add(), agent, agents, dirSubagents(), findAndRegisterSubagent(), YCPElement::isNull(), y2debug, ycp2error, and YCPError().
Referenced by Dir(), Error(), Execute(), Read(), and Write().
ScriptingAgent::SubAgents::const_iterator ScriptingAgent::findAndRegisterSubagent | ( | const YCPPath & | path | ) | [private] |
Find it in agents, registering if necessary, sweeping if necessary
References agent, agents, done_sweep, findSubagent(), Sweep(), and tryRegister().
Referenced by executeSubagentCommand().
ScriptingAgent::SubAgents::iterator ScriptingAgent::findByPath | ( | const YCPPath & | path | ) | [private] |
Find agent exactly matching path. Returns agents.end () if the path isn't covered by any agent. Does not try to register.
Referenced by MountAgent(), parseSingleConfigFile(), RegisterAgent(), UnmountAgent(), and UnregisterAgent().
ScriptingAgent::SubAgents::const_iterator ScriptingAgent::findSubagent | ( | const YCPPath & | path | ) | [private] |
Iterate thru agents
Find the agent where the agent's path and the given path have the longest match. Example:
agent net at .etc.network agent isdn at .etc.network.isdn
The command Read (.etc.network.isdn.line0) will call agent isdn with Read (.line0). The command Read (.etc.network) will call agent net with Read (.).
Referenced by findAndRegisterSubagent().
void ScriptingAgent::InitRegDirs | ( | ) | [private] |
Populate registration_dirs
References Y2PathSearch::GENERIC, ScriptingAgent::RegistrationDir::last_changed, ScriptingAgent::RegistrationDir::name, Y2PathSearch::numberOfComponentLevels(), registration_dirs, Y2PathSearch::searchPath(), and y2debug.
Referenced by ScriptingAgent().
Mount the agent handling path. This function is called automatically when the agent is used.
References agent, agents, findByPath(), and YCPError().
Referenced by otherCommand().
YCPValue ScriptingAgent::MountAllAgents | ( | ) | [private] |
Handle the commands MountAgent, MountAllAgents, UnmountAllAgents, YaST2Version, SuSEVersion. Formerly also 'UnregisterAgent', 'UnregisterAllAgents', 'UnmountAgent' which are now builtins.
Reimplemented from SCRAgent.
References MountAgent(), MountAllAgents(), YCPTerm::name(), RegisterAgent(), YCPTerm::size(), UnmountAllAgents(), UnregisterAgent(), and YCPTerm::value().
void ScriptingAgent::parseConfigFiles | ( | const string & | directory | ) | [private] |
Parses all SCR configuration files in the given directory, registers the agents. (If a SCR path is already registered, keep the old one.)
References less_than_inodes(), parseSingleConfigFile(), and y2debug.
Referenced by Sweep().
void ScriptingAgent::parseSingleConfigFile | ( | const string & | file | ) | [private] |
Parses a single SCR configuration file, registers the agent. (If the SCR path is already registered, keep the old one.)
References agent, agents, findByPath(), RegisterAgent(), y2debug, and y2warning.
Referenced by parseConfigFiles(), ScriptingAgent(), and tryRegister().
YCPValue ScriptingAgent::Read | ( | const YCPPath & | path, | |
const YCPValue & | arg = YCPNull () , |
|||
const YCPValue & | opt = YCPNull () | |||
) | [virtual] |
Reads data.
path | Specifies what part of the subtree should be read. The path is specified _relatively_ to Root()! |
Implements SCRAgent.
References executeSubagentCommand(), YCPElement::isNull(), y2debug, and ycp2error.
YCPBoolean ScriptingAgent::RegisterAgent | ( | const YCPPath & | path, | |
const YCPValue & | value | |||
) | [virtual] |
Register a agent, that is specify the scr path and the filename for it's definition or the term with the definition. The preferred way is to specify the filename.
Reimplemented from SCRAgent.
References agent, agents, findByPath(), y2debug, and ycp2warning.
Referenced by otherCommand(), and parseSingleConfigFile().
YCPBoolean ScriptingAgent::RegisterNewAgents | ( | ) | [virtual] |
Register new agents. (bnc#245508c16) Rescan the scrconf registration directories and register any agents at new(!) paths. Agents, even new ones, on paths that are registered already, will not be replaced. This means that .oes.specific.agent will start to work but something like adding /usr/local/etc/sysconfig to .sysconfig.network would not.
Reimplemented from SCRAgent.
References Sweep().
void ScriptingAgent::Sweep | ( | ) | [private] |
Read all registration files.
References done_sweep, ee, ExecutionEnvironment::filename(), Y2PathSearch::GENERIC, ExecutionEnvironment::linenumber(), Y2PathSearch::numberOfComponentLevels(), parseConfigFiles(), Y2PathSearch::searchPath(), y2debug, and ycp2warning.
Referenced by findAndRegisterSubagent(), RegisterNewAgents(), and ScriptingAgent().
void ScriptingAgent::tryRegister | ( | const YCPPath & | path | ) | [private] |
For .foo.bar.baz, register foo.bar.baz.scr, or foo.bar.scr, or foo.scr. BTW we can register an unrelated path because this is just a heuristic.
References ScriptingAgent::RegistrationDir::name, parseSingleConfigFile(), registration_dirs, tr(), and y2debug.
Referenced by findAndRegisterSubagent().
YCPBoolean ScriptingAgent::UnmountAgent | ( | const YCPPath & | path | ) | [virtual] |
Unmount the agent handling path.
Reimplemented from SCRAgent.
References agent, agents, and findByPath().
YCPValue ScriptingAgent::UnmountAllAgents | ( | ) | [private] |
YCPBoolean ScriptingAgent::UnregisterAgent | ( | const YCPPath & | path | ) | [virtual] |
Unregister a agent.
Reimplemented from SCRAgent.
References agent, agents, findByPath(), and y2debug.
Referenced by otherCommand().
YCPBoolean ScriptingAgent::UnregisterAllAgents | ( | ) | [virtual] |
Unregister all agents.
Reimplemented from SCRAgent.
References agent, agents, done_sweep, and y2debug.
Referenced by ~ScriptingAgent().
YCPBoolean ScriptingAgent::Write | ( | const YCPPath & | path, | |
const YCPValue & | value, | |||
const YCPValue & | arg = YCPNull () | |||
) | [virtual] |
Writes data.
Implements SCRAgent.
References executeSubagentCommand(), YCPElement::isNull(), and ycp2error.
SubAgents ScriptingAgent::agents [private] |
bool ScriptingAgent::done_sweep [private] |
Referenced by findAndRegisterSubagent(), Sweep(), and UnregisterAllAgents().
list<RegistrationDir> ScriptingAgent::registration_dirs [private] |
Where to look for *.scr files, in order of preference
Referenced by InitRegDirs(), and tryRegister().