hs.hsadmin/hsacppcli/hsadminc/source/hsadminc.cpp
Christof Donat c64ab570a1 added more or less resurrected C++ cli client. This will need a lot of
work.

please note, that I would do quite some things differently nowadays. I
home to get those things in via refactoring
2012-04-24 15:15:42 +00:00

156 lines
7.1 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. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/algorithm/string.hpp>
#include "cmdlineparser.h"
#include "configfile.h"
#include "logger.h"
#include "transaction.h"
using std::string;
using std::vector;
using std::cerr;
using std::endl;
using boost::shared_ptr;
using boost::scoped_ptr;
using boost::starts_with;
void printErrorMessage(Transaction& transact, vector<string>& options) {
shared_ptr<commandline::parsedParameters> p = transact.getParsed();
string FailedOption = options[0];
if( starts_with(FailedOption,"--") )
FailedOption = FailedOption.substr(2);
else if( starts_with(FailedOption,"-") )
FailedOption = FailedOption.substr(1,2);
cerr << "Error on Commandline at Parameter '"<< FailedOption;
if( p->m_error == commandline::NeedCall )
cerr << ": call specific Parameter before call";
cerr << endl;
}
void printUsage(char* cmdname) {
cerr << "Usage: " << endl << endl;
cerr << cmdname << " [--test|-t]" << endl;
cerr << "[--ignoreerrors|-e]" << endl;
cerr << "[--verbosity=<level>|-v <level>]" << endl;
cerr << "[--quiet|-q]" << endl;
cerr << "[--runas=<user>|-r <user>]" << endl;
cerr << "[--ticket=<ticketfile>|-T <ticketfile>]" << endl;
cerr << "[--config=<configfile>|-C <configfile>]" << endl;
cerr << "[--default-display:<displaySpec>|-D <displaySpec>]" << endl;
cerr << "[(--only:<property_1>=<expr_1>|-W <property_1>=<expr_1>)" << endl;
cerr << " ... (--only:<property_n>=<expr_n>|-W <property_n>=<expr_n>)]" << endl;
cerr << "[(--setall:<property_1>=<value_1>|-S <property_1>=<value_1>)" << endl;
cerr << " ... (--setall:<property_n>=<value_n>|-S <property_n>=<value_n>)]" << endl;
cerr << " [(--unsetall:property_1|-U property_1) ... (--unsetall:property_n|-U property_n)]" << endl;
cerr << "[(--global-order:<property_1>[=(asc|desc|a|d)]|-O <property_1>[=(asc|desc|a|d)])" << endl;
cerr << " ..." << endl;
cerr << " (--global-order:<property_n>[=(asc|desc|a|d)]|-O <property_n>[=(asc|desc|a|d)]]" << endl;
cerr << " [--ignoreerrors|-E]" << endl;
cerr << "(--call:<module_1>.<function_1>|-c <module_1>.<function_1>)" << endl;
cerr << " [--force]" << endl;
cerr << " [--ignoreerror|-e]" << endl;
cerr << " [--display:<displaySpec>|-d <displaySpec>]" << endl;
cerr << " [(--where:<property_1_1>=<expr_1_1>|-w <property_1_1>=<expr_1_1>)" << endl;
cerr << " ... (--where:<property_1_n>=<expr_1_n>|-w <property_1_n>=<expr_1_n>)]" << endl;
cerr << " [(--set:<property_1_1>=<value_1_1>|-s <property_1_1>=<value_1_1>)" << endl;
cerr << " ... (--set:<property_1_n>=<value_1_n>|-s <property_1_n>=<value_1_n>)]" << endl;
cerr << " [(--input:<property_1_1>|-i <property_1_1>)" << endl;
cerr << " ... (--input:<property_1_n>|-i <property_1_n>)]" << endl;
cerr << " [(--passinput:<property_1_1>|-p <property_1_1>)" << endl;
cerr << " ... (--passinput:<property_1_n>|-p <property_1_n>)]" << endl;
cerr << " [(--infile:<property_1_1>=<file_1_1>|-f <property_1_1>=<file_1_1>)" << endl;
cerr << " ... (--infile:<property_1_n>=<file_1_n>|-f <property_1_n>=<file_1_n>)]" << endl;
cerr << " [(--unset:property_1_1|-u property_1_1]) ... (--unset:property_1_n|-u property_1_n])]" << endl;
cerr << " [(--order:<property_1_1>[=(asc|desc|a|d)]|-o <property_1_1>[=(asc|desc|a|d)])" << endl;
cerr << " ..." << endl;
cerr << " [--globals|-l]" << endl;
cerr << " ..." << endl;
cerr << " (--order:<property_1_n>[=(asc|desc|a|d)]|-o <property_1_n>[=(asc|desc|a|d)]]" << endl;
cerr << " [object_1_1 ... object_1_n]" << endl;
cerr << "..." << endl;
cerr << "(--call:<module_m>.<function_m>|-c <module_m>.<function_m>)" << endl;
cerr << " [--force]" << endl;
cerr << " [--ignoreerror|-e]" << endl;
cerr << " [--display:<displaySpec>|-d <displaySpec>]" << endl;
cerr << " [(--where:<property_m_1>=<expr_m_1>|-w <property_m_1>=<expr_m_1>)" << endl;
cerr << " ... (--where:<property_m_n>=<expr_m_n>|-w <property_m_n>=<expr_m_n>)]" << endl;
cerr << " [(--set:<property_m_1>=<value_m_1>|-s <property_m_1>=<value_m_1>)" << endl;
cerr << " ... (--set:<property_m_n>=<value_m_n>|-s <property_m_n>=<value_m_n>)]" << endl;
cerr << " [(--input:<property_m_1>|-i <property_m_1>)" << endl;
cerr << " ... (--input:<property_m_n>|-i <property_m_n>)]" << endl;
cerr << " [(--passinput:<property_m_1>|-p <property_m_1>)" << endl;
cerr << " ... (--passinput:<property_m_n>|-p <property_m_n>)]" << endl;
cerr << " [(--infile:<property_m_1>=<file_m_1>|-f <property_m_1>=<file_m_1>)" << endl;
cerr << " ... (--infile:<property_m_n>=<file_m_n>|-f <property_m_n>=<file_m_n>)]" << endl;
cerr << " [(--unset:property_m_1|-u property_m_1]) ... (--unset:property_m_n|-u property_m_n])]" << endl;
cerr << " [(--order:<property_m_1>[=(asc|desc|a|d)]|-o <property_m_1>[=(asc|desc|a|d)])" << endl;
cerr << " ..." << endl;
cerr << " [--globals|-l]" << endl;
cerr << " ..." << endl;
cerr << " (--order:<property_m_n>[=(asc|desc|a|d)]|-o <property_m_n>[=(asc|desc|a|d)]]" << endl;
cerr << " [object_m_1 ... object_m_n]" << endl;
}
int main(int argc, char *argv[])
{
if( argc == 1 ) {
printUsage(*argv);
exit(1);
}
vector<string> options(argv+1,argv+argc);
Transaction transact(options);
if( !transact ) {
printErrorMessage(transact, options);
printUsage(*argv);
exit(1);
}
Logger::log(Logger::DEBUG,"have parsed Parameters");
scoped_ptr<ConfigFileFinder> cfff(new ConfigFileFinder(transact));
shared_ptr<ConfigFileParser> cfg(new ConfigFileParser(cfff.get()));
Logger::log(Logger::DEBUG,"have read config File");
transact(cfg);
Logger::log(Logger::DEBUG,"have executed Transaction");
//cout << transact.formatOutput();
//exit(transact.errorCode());
return 0;
}