AnyAgent Class Reference

SCR Agent for access to any describeable file. More...

#include <AnyAgent.h>

Inheritance diagram for AnyAgent:
SCRAgent

List of all members.

Public Member Functions

 AnyAgent ()
 ~AnyAgent ()
YCPValue Read (const YCPPath &path, const YCPValue &arg=YCPNull(), const YCPValue &opt=YCPNull())
YCPBoolean Write (const YCPPath &path, const YCPValue &value, const YCPValue &arg=YCPNull())
YCPList Dir (const YCPPath &path)
YCPValue otherCommand (const YCPTerm &term)

Private Types

enum  { MTYPE_NONE, MTYPE_FILE, MTYPE_PROG, MTYPE_LOCAL }

Private Member Functions

YCPValue readValueByPath (const YCPValue &value, const YCPPath &path)
YCPValue writeValueByPath (const YCPValue &current, const YCPPath &path, const YCPValue &value)
YCPValue findSyntax (const YCPValue &syntax, const YCPPath &path)
const char * get_line (FILE *fp)
YCPValue parseIp4Number (char const *&lptr, bool optional)
const string unparseIp4Number (const YCPValue &value)
YCPValue parseBoolean (char const *&lptr, bool optional)
const string unparseBoolean (const YCPValue &value)
YCPValue parseNumber (char const *&lptr, bool optional)
const string unparseNumber (const YCPValue &value)
YCPValue parseHexval (char const *&lptr, bool optional)
const string unparseHexval (const YCPValue &value)
YCPValue parseString (char const *&lptr, const char *set, const char *stripped, bool optional)
const string unparseString (const YCPValue &syntax, const YCPValue &stripped, const YCPValue &value)
YCPValue parseFloat (char const *&lptr, bool optional)
const string unparseFloat (const YCPValue &value)
YCPValue parseHostname (char const *&lptr, bool optional)
const string unparseHostname (const YCPValue &value)
YCPValue parseUsername (char const *&lptr, bool optional)
const string unparseUsername (const YCPValue &value)
YCPValue parseVerbose (char const *&lptr, const char *match, bool optional)
const string unparseVerbose (const YCPValue &value)
YCPValue parseSeparator (char const *&lptr, const char *match, bool optional)
const string unparseSeparator (const YCPValue &match)
const char * getLine (void)
const string putLine (const string s)
YCPValue parseChoice (char const *&line, const YCPList &syntax, bool optional)
const string unparseChoice (const YCPList &syntax, const YCPValue &value)
YCPValue parseSequence (char const *&line, const YCPList &syntax, bool optional)
const string unparseSequence (const YCPList &syntax, const YCPValue &value)
YCPValue parseList (char const *&line, const YCPList &syntax, bool optional)
const string unparseList (const YCPList &syntax, const YCPValue &value)
YCPValue parseTuple (char const *&line, const YCPList &syntax, bool optional)
const string unparseTuple (const YCPList &syntax, const YCPValue &value)
YCPValue parseData (char const *&line, const YCPValue &syntax, bool optional)
const string unparseData (const YCPValue &syntax, const YCPValue &value)
YCPValue validateCache (const YCPList &data, const YCPValue &arg=YCPNull())
YCPValue readFile (const YCPValue &arg)
const string writeFile (const YCPValue &arg)
string evalArg (const YCPValue &arg)
int lineNumber () const

Private Attributes

bool description_read
time_t mtime
YCPValue cache
bool cchanged
YCPList alldata
bool achanged
bool mReadOnly
enum AnyAgent:: { ... }  mType
YCPValue mName
string mComment
bool isFillup
YCPValue mSyntax
YCPValue mHeader
int line_number
stack< string > tupleName
stack< YCPValuetupleValue
bool tupleContinue

Detailed Description

SCR Agent for access to any describeable file.


Member Enumeration Documentation

anonymous enum [private]

type of mName

Enumerator:
MTYPE_NONE 
MTYPE_FILE 
MTYPE_PROG 
MTYPE_LOCAL 

Constructor & Destructor Documentation

AnyAgent::AnyAgent (  ) 

Creates a new AnyAgent.

AnyAgent.cc

Purpose: generalized agent handler for handling system files from /proc and /etc

Creator: kkaempf@suse.de Maintainer: kkaempf@suse.de

loads syntax description at startup to read and write system file

loads complete file (incl. comments) to internal YCPListRep and provides valid (i.e. non-comment) lines in another data structure defined by syntax.

Syntax description:

Header (<syntax>) Header to write at start of file, used only by Write ()

List (<syntax>, terminal) list of syntax, separated by terminal character represented as YCPListRep

Tuple (<name> (<syntax>), ...) // fixed name tuple of syntax represented as YCPMapRep with <name>

Separator (<string>) separator characters used to separate data elements

Sequence (<syntax>,...) sequence of syntactical constructs

Choice ([<match>, <opt-action>], ...) <string> string constant, verbose match

Whitespace () == Separator (" \t")

String (<string>) string match consisting of characters from <string> if <string> starts with ^, set of characters that do not match represented as YCPStringRep. if <optional-stripped> is given (as a string constant!), these characters are stripped from the match if they're found as leading or trailing characters. i.e. given the string " xxx xxx " matches String (" x") completely and results in " xxx xxx ". With String (" x", " "), leading and trailing blanks are stripped. So " xxx xxx " is still matched but the result is "xxx xxx". When writing such values, stripping is also performed. So writing " xxx xxx " results in the output of "xxx xxx"

Number () integer represented as YCPIntegerRep

Hexval () hexadecimal value represented as YCPIntegerRep

Float () floating point represented as YCPFloatRep

Ip4Number () IP4 address as nnn.nnn.nnn.nnn represented as YCPIntegerRep

Hostname () hostname, with or without domain represented as YCPStringRep

Username () username represented as YCPStringRep

Var (...Name (syntax) ... Value (syntax))

AnyAgent::~AnyAgent (  ) 

Cleans up


Member Function Documentation

YCPList AnyAgent::Dir ( const YCPPath path  )  [virtual]

Get a list of all subtrees.

Dir

show subtree

Implements SCRAgent.

References YCPList::add(), description_read, mSyntax, and ycp2error.

string AnyAgent::evalArg ( const YCPValue arg  )  [private]
YCPValue AnyAgent::findSyntax ( const YCPValue syntax,
const YCPPath path 
) [private]

findSyntax

find syntax for path

References YCPTerm::name(), YCPTerm::size(), YCPTerm::value(), y2debug, y2error, YT_STRING, and YT_TERM.

Referenced by Write().

const char * AnyAgent::get_line ( FILE *  fp  )  [private]

References y2error.

Referenced by readFile().

char const * AnyAgent::getLine ( void   )  [private]
int AnyAgent::lineNumber (  )  const [private]

References line_number.

YCPValue AnyAgent::otherCommand ( const YCPTerm term  )  [virtual]
YCPValue AnyAgent::parseBoolean ( char const *&  lptr,
bool  optional 
) [private]

References y2error.

Referenced by parseData().

YCPValue AnyAgent::parseChoice ( char const *&  line,
const YCPList syntax,
bool  optional 
) [private]
YCPValue AnyAgent::parseData ( char const *&  line,
const YCPValue syntax,
bool  optional 
) [private]
YCPValue AnyAgent::parseFloat ( char const *&  lptr,
bool  optional 
) [private]

References y2debug.

Referenced by parseData().

YCPValue AnyAgent::parseHexval ( char const *&  lptr,
bool  optional 
) [private]

References y2error.

Referenced by parseData().

YCPValue AnyAgent::parseHostname ( char const *&  lptr,
bool  optional 
) [private]

References y2error.

Referenced by parseData().

YCPValue AnyAgent::parseIp4Number ( char const *&  lptr,
bool  optional 
) [private]

AnyAgentBasic.cc

Purpose: basic type handling for AnyAgent

Creator: kkaempf@suse.de Maintainer: kkaempf@suse.de

References y2error.

Referenced by parseData().

YCPValue AnyAgent::parseList ( char const *&  line,
const YCPList syntax,
bool  optional 
) [private]
YCPValue AnyAgent::parseNumber ( char const *&  lptr,
bool  optional 
) [private]

References y2error.

Referenced by parseData().

YCPValue AnyAgent::parseSeparator ( char const *&  lptr,
const char *  match,
bool  optional 
) [private]

Referenced by parseData().

YCPValue AnyAgent::parseSequence ( char const *&  line,
const YCPList syntax,
bool  optional 
) [private]
YCPValue AnyAgent::parseString ( char const *&  lptr,
const char *  set,
const char *  stripped,
bool  optional 
) [private]

Referenced by parseData().

YCPValue AnyAgent::parseTuple ( char const *&  line,
const YCPList syntax,
bool  optional 
) [private]
YCPValue AnyAgent::parseUsername ( char const *&  lptr,
bool  optional 
) [private]

References y2error.

Referenced by parseData().

YCPValue AnyAgent::parseVerbose ( char const *&  lptr,
const char *  match,
bool  optional 
) [private]

Referenced by parseData().

const string AnyAgent::putLine ( const string  s  )  [private]
YCPValue AnyAgent::Read ( const YCPPath path,
const YCPValue arg = YCPNull (),
const YCPValue optarg = YCPNull () 
) [virtual]

Reads data. Destroy the result after use.

Parameters:
path Specifies what part of the subtree should be read. The path is specified _relatively_ to Root()!

Read

read value from relative path

Implements SCRAgent.

References alldata, description_read, isFillup, mComment, mName, mSyntax, readValueByPath(), YCPList::size(), validateCache(), YCPList::value(), y2debug, y2error, and ycp2error.

YCPValue AnyAgent::readFile ( const YCPValue arg  )  [private]

readFile

read complete file to alldata

References achanged, YCPList::add(), alldata, evalArg(), get_line(), mName, mtime, mType, MTYPE_PROG, y2debug, y2error, and ycp2error.

Referenced by validateCache().

YCPValue AnyAgent::readValueByPath ( const YCPValue value,
const YCPPath path 
) [private]

readValueByPath

read sub-value denoted by path

if path == .<num> && value->isList() return element <num> of list

if path == .<name> && value->isMap() return element <name> of list

References YCPElement::isNull(), and y2error.

Referenced by Read().

const string AnyAgent::unparseBoolean ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseChoice ( const YCPList syntax,
const YCPValue value 
) [private]

Referenced by unparseData().

const string AnyAgent::unparseData ( const YCPValue syntax,
const YCPValue value 
) [private]
const string AnyAgent::unparseFloat ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseHexval ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

const string AnyAgent::unparseHostname ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseIp4Number ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseList ( const YCPList syntax,
const YCPValue value 
) [private]
const string AnyAgent::unparseNumber ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseSeparator ( const YCPValue match  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseSequence ( const YCPList syntax,
const YCPValue value 
) [private]

Referenced by unparseData().

const string AnyAgent::unparseString ( const YCPValue syntax,
const YCPValue stripped,
const YCPValue value 
) [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseTuple ( const YCPList syntax,
const YCPValue value 
) [private]
const string AnyAgent::unparseUsername ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

const string AnyAgent::unparseVerbose ( const YCPValue value  )  [private]

References YCPElement::isNull(), and y2debug.

Referenced by unparseData().

YCPValue AnyAgent::validateCache ( const YCPList data,
const YCPValue arg = YCPNull () 
) [private]

validateCache

parse file according to mSyntax and construct YCPValueRep

References alldata, cache, cchanged, YCPElement::isNull(), line_number, mSyntax, parseData(), readFile(), y2debug, and ycp2error.

Referenced by Read(), and Write().

YCPBoolean AnyAgent::Write ( const YCPPath path,
const YCPValue value,
const YCPValue arg = YCPNull () 
) [virtual]

Writes data. Destroy the result after use.

Write

write value to relative path

return YCPIntegerRep(0) if ok or YCPVoidRep if error

Approach:

descend path to get syntax (gives expected syntax of value) unparse value according to syntax (gives string if value matches syntax, else error) set new value to cache

Implements SCRAgent.

References YCPList::add(), alldata, description_read, evalArg(), findSyntax(), YCPElement::isNull(), mName, mReadOnly, mSyntax, YCPList::size(), unparseData(), validateCache(), YCPList::value(), y2debug, and ycp2error.

const string AnyAgent::writeFile ( const YCPValue arg  )  [private]

writeFile

References YCPElement::isNull(), mHeader, and unparseData().

YCPValue AnyAgent::writeValueByPath ( const YCPValue current,
const YCPPath path,
const YCPValue value 
) [private]

writeValueByPath

write sub-value denoted by path to current

return new current

if path == .<num> && value->isList() return element <num> of list

if path == .<name> && value->isMap() return element <name> of list

References YCPElement::isNull(), run, y2debug, and y2error.


Member Data Documentation

bool AnyAgent::achanged [private]

Referenced by readFile().

Referenced by validateCache().

bool AnyAgent::cchanged [private]

Referenced by validateCache().

Starts with false and is set to true as soon as the Description is read. Any Read/Write/Dir command prior to the reading of the description is invalid.

Referenced by Dir(), otherCommand(), Read(), and Write().

bool AnyAgent::isFillup [private]
int AnyAgent::line_number [private]

Used for line counting while parsing the target file.

Referenced by getLine(), lineNumber(), and validateCache().

string AnyAgent::mComment [private]

comment characters

Referenced by getLine(), otherCommand(), parseData(), and Read().

syntax description of header lines

Referenced by otherCommand(), and writeFile().

name of system file or program

Referenced by evalArg(), otherCommand(), Read(), readFile(), and Write().

bool AnyAgent::mReadOnly [private]

true if file is read-only

Referenced by otherCommand(), parseData(), and Write().

syntax description of system file

Referenced by Dir(), otherCommand(), Read(), validateCache(), and Write().

time_t AnyAgent::mtime [private]

file cache mtime = file's mtime when alldata was filled cache = parsed file alldata = list of YCPStringRep with all data from file

Referenced by readFile().

enum { ... } AnyAgent::mType [private]

type of mName

Referenced by otherCommand(), and readFile().

bool AnyAgent::tupleContinue [private]

Referenced by parseData(), parseTuple(), and unparseData().

stack<string> AnyAgent::tupleName [private]

tuple parsing

Referenced by parseData(), parseTuple(), and unparseData().

stack<YCPValue> AnyAgent::tupleValue [private]

Referenced by parseData(), parseTuple(), and unparseData().


The documentation for this class was generated from the following files:

Generated on a sunny day for yast2-core by doxygen 1.6.3