c64ab570a1
work. please note, that I would do quite some things differently nowadays. I home to get those things in via refactoring
387 lines
11 KiB
C++
387 lines
11 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2005 by Christof Donat *
|
|
* cdonat@gmx.de *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
|
|
|
|
#include <vector>
|
|
#include <string>
|
|
#include <map>
|
|
#include <boost/shared_ptr.hpp>
|
|
#include <boost/scoped_ptr.hpp>
|
|
|
|
#include "abstractcmdlineparser.h"
|
|
#include "configfile.h"
|
|
|
|
//! here comes the commandline-Parser - with help of the abstractcommandlineparser.
|
|
|
|
namespace commandline {
|
|
|
|
#ifndef HSADMIN_CMDLINEPARSER
|
|
#define HSADMIN_CMDLINEPARSER
|
|
|
|
using std::vector;
|
|
using std::string;
|
|
using std::map;
|
|
using boost::shared_ptr;
|
|
using boost::scoped_ptr;
|
|
|
|
// Parameter Objects are the resultof each Parser step and used in second step.
|
|
|
|
//! parsed values of a --setall, --set, --input, --passinput or a --infile option
|
|
class setParameter {
|
|
public:
|
|
string m_property;
|
|
string m_value;
|
|
|
|
string toXML(string &username, shared_ptr< ::ConfigFileParser > cfgfile);
|
|
};
|
|
|
|
//! parsed values of a --only or a --where option
|
|
class whereParameter {
|
|
public:
|
|
string m_property;
|
|
string m_pattern;
|
|
|
|
string toXML(string &username, shared_ptr< ::ConfigFileParser > cfgfile);
|
|
};
|
|
|
|
//! parsed values of a --global-order or a --order option
|
|
class orderParameter {
|
|
public:
|
|
string m_property;
|
|
bool m_ascending;
|
|
|
|
string toXML(string &username, shared_ptr< ::ConfigFileParser > cfgfile);
|
|
};
|
|
|
|
//! a whole parsed --call Option which holds all the relevant other options
|
|
class callParameter {
|
|
public:
|
|
callParameter(): m_module(""), m_function(""), m_display(""), m_ignoreerror(false), m_force(false), m_globalOrderIndex(-1) { };
|
|
|
|
string m_module;
|
|
string m_function;
|
|
|
|
string m_display;
|
|
vector<shared_ptr<setParameter> > m_set;
|
|
vector<shared_ptr<whereParameter> > m_where;
|
|
vector<shared_ptr<orderParameter> > m_order;
|
|
vector<string> m_objects;
|
|
vector<string> m_unset;
|
|
|
|
bool m_ignoreerror;
|
|
bool m_force;
|
|
int m_globalOrderIndex;
|
|
|
|
vector<string> parseDisplayspec();
|
|
string evalDisplay(const map<string, string> &values);
|
|
string toXML(string &username, shared_ptr< ::ConfigFileParser > cfgfile);
|
|
};
|
|
|
|
enum parseError { NOERROR = 0, NeedCall = 1 };
|
|
|
|
//! all the parsed values
|
|
class parsedParameters {
|
|
public:
|
|
parsedParameters();
|
|
parseError m_error;
|
|
string m_user;
|
|
string m_ticket;
|
|
string m_defaultDisplay;
|
|
string m_addConfigFile;
|
|
bool m_test;
|
|
bool m_ignoreerrors;
|
|
vector<shared_ptr<whereParameter> > m_only;
|
|
vector<shared_ptr<setParameter> > m_setall;
|
|
vector<shared_ptr<orderParameter> > m_globalOrder;
|
|
vector<shared_ptr<callParameter> > m_call;
|
|
vector<string> m_unsetall;
|
|
|
|
string toXML(string &username, shared_ptr< ::ConfigFileParser > cfgfile);
|
|
};
|
|
|
|
// Option classes are used in first Parse step
|
|
|
|
//! --test
|
|
class TestOption: public abstractcommandlineparser::CmdLineOption<true,true,false,parsedParameters> {
|
|
public:
|
|
TestOption();
|
|
protected:
|
|
virtual bool handle(shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --ignoreerror
|
|
class IgnoreErrorOption: public abstractcommandlineparser::CmdLineOption<true,true,false,parsedParameters> {
|
|
public:
|
|
IgnoreErrorOption();
|
|
protected:
|
|
virtual bool handle(shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --ignoreerrors
|
|
class IgnoreErrorsOption: public IgnoreErrorOption {
|
|
public:
|
|
IgnoreErrorsOption();
|
|
protected:
|
|
virtual bool handle(shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --verbosity
|
|
class VerbosityOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
VerbosityOption();
|
|
bool parseThis(vector<string>& options, shared_ptr<parsedParameters> result);
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --quiet
|
|
class QuietOption: public abstractcommandlineparser::CmdLineOption<true,true,false,parsedParameters> {
|
|
public:
|
|
QuietOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --runas
|
|
class RunAsOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
RunAsOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --ticket
|
|
class TicketOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
TicketOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --config
|
|
class ConfigOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
ConfigOption();
|
|
protected:
|
|
virtual bool handle(string & parameter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --force
|
|
class ForceOption: public abstractcommandlineparser::CmdLineOption<true,false,false,parsedParameters> {
|
|
public:
|
|
ForceOption();
|
|
protected:
|
|
virtual bool handle(shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --globals
|
|
class GlobalsOption: public abstractcommandlineparser::CmdLineOption<true,true,false,parsedParameters> {
|
|
public:
|
|
GlobalsOption();
|
|
protected:
|
|
virtual bool handle(shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --where
|
|
class WhereOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
WhereOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --only
|
|
class OnlyOption: public WhereOption {
|
|
public:
|
|
OnlyOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --set
|
|
class SetOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
SetOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --setall
|
|
class SetAllOption: public SetOption {
|
|
public:
|
|
SetAllOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --infile
|
|
class InfileOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
InfileOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --order
|
|
class OrderOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
OrderOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --global-order
|
|
class GlobalOrderOption: public OrderOption {
|
|
public:
|
|
GlobalOrderOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --input
|
|
class InputOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
InputOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --passinput
|
|
class PassInputOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
PassInputOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --display
|
|
class DisplayOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
DisplayOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --default-display
|
|
class DefaultDisplayOption: public DisplayOption {
|
|
public:
|
|
DefaultDisplayOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --call
|
|
class CallOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
CallOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --unset
|
|
class UnsetOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
UnsetOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! --unsetall
|
|
class UnsetAllOption: public abstractcommandlineparser::CmdLineOption<true,true,true,parsedParameters> {
|
|
public:
|
|
UnsetAllOption();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! all other parameters are objectIDs.
|
|
class ObjectID: public abstractcommandlineparser::CmdLineOption<false,false,true,parsedParameters> {
|
|
public:
|
|
ObjectID();
|
|
protected:
|
|
virtual bool handle(string ¶meter, shared_ptr<parsedParameters> result);
|
|
};
|
|
|
|
//! putting it all together in a typelist
|
|
typedef Parameterlist24(
|
|
TestOption,
|
|
IgnoreErrorsOption,
|
|
VerbosityOption,
|
|
RunAsOption,
|
|
TicketOption,
|
|
ConfigOption,
|
|
SetAllOption,
|
|
UnsetAllOption,
|
|
OnlyOption,
|
|
GlobalOrderOption,
|
|
DefaultDisplayOption,
|
|
IgnoreErrorOption,
|
|
ForceOption,
|
|
GlobalsOption,
|
|
WhereOption,
|
|
SetOption,
|
|
InfileOption,
|
|
OrderOption,
|
|
InputOption,
|
|
PassInputOption,
|
|
UnsetOption,
|
|
DisplayOption,
|
|
ObjectID,
|
|
CallOption ) allParameters;
|
|
|
|
//! generating a class with parse()-function from the list of Options
|
|
typedef abstractcommandlineparser::CmdLineOptionList<allParameters, parsedParameters> Parameters;
|
|
|
|
#else
|
|
class parsedParameters;
|
|
class setParameter;
|
|
class whereParameter;
|
|
class orderParameter;
|
|
class callParameter;
|
|
class TestOption;
|
|
class IgnoreErrorOption;
|
|
class IgnoreErrorsOption;
|
|
class VerbosityOption;
|
|
class RunAsOption;
|
|
class TicketOption;
|
|
class ConfigOption;
|
|
class SetAllOption;
|
|
class OnlyOption;
|
|
class UnsetAllOption;
|
|
class GlobalOrderOption;
|
|
class DefaultDisplayOption;
|
|
class ForceOption;
|
|
class GlobalsOption;
|
|
class WhereOption;
|
|
class SetOption;
|
|
class InfileOption;
|
|
class OrderOption;
|
|
class InputOption;
|
|
class PassInputOption;
|
|
class DisplayOption;
|
|
class unsetOption;
|
|
class CallOption;
|
|
class ObjectID;
|
|
|
|
#endif /* HSADMIN_CMDLINEPARSER */
|
|
|
|
};
|
|
|