Skip to content

Commit fb83403

Browse files
committed
Improved
1 parent 04728c8 commit fb83403

File tree

2 files changed

+62
-14
lines changed

2 files changed

+62
-14
lines changed

src/wsjcpp_arguments.cpp

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ void WSJCppArgumentProcessor::registryProcessor(WSJCppArgumentProcessor *p) {
9494

9595
// ---------------------------------------------------------------------
9696

97+
void WSJCppArgumentProcessor::registryExample(const std::string &sExample) {
98+
m_vExamples.push_back(sExample);
99+
}
100+
101+
// ---------------------------------------------------------------------
102+
97103
void WSJCppArgumentProcessor::registrySingleArgument(const std::string &sArgumentName, const std::string &sDescription) {
98104
if (hasRegisteredArgumentName(sArgumentName)) {
99105
WSJCppLog::throw_err(TAG, "Argument Name '" + sArgumentName + "' already registered");
@@ -184,31 +190,70 @@ bool WSJCppArgumentProcessor::hasRegisteredArgumentName(const std::string &sArgu
184190

185191
// ---------------------------------------------------------------------
186192

193+
bool WSJCppArgumentProcessor::applySingleArgument(const std::string &sProgramName, const std::string &sArgumentName) {
194+
WSJCppLog::throw_err(TAG, "No support single argument '" + sArgumentName + "'");
195+
return false;
196+
}
197+
198+
// ---------------------------------------------------------------------
199+
200+
bool WSJCppArgumentProcessor::applyParameterArgument(const std::string &sProgramName, const std::string &sArgumentName, const std::string &sValue) {
201+
WSJCppLog::throw_err(TAG, "No support parameter argument '" + sArgumentName + "' for '" + getName() + "'");
202+
return false;
203+
}
204+
205+
// ---------------------------------------------------------------------
206+
207+
int WSJCppArgumentProcessor::exec(const std::string &sProgramName, const std::vector<std::string> &vSubParams) {
208+
WSJCppLog::throw_err(TAG, "Processor '" + getName() + "' has not implementation");
209+
return -1;
210+
}
211+
212+
// ---------------------------------------------------------------------
213+
187214
std::string WSJCppArgumentProcessor::help(const std::string &sProgramName, const std::string &sPrefix) {
188215
std::string sRet = "";
216+
int nParams = 0;
189217
if (m_vSingleArguments.size() > 0 || m_vParameterArguments.size()) {
190218
sRet += "\r\n" + sPrefix + "Arguments: \r\n";
191219

192220
for (int i = 0; i < m_vSingleArguments.size(); i++) {
193221
sRet += m_vSingleArguments[i]->help(sProgramName, sPrefix + " ") + " \r\n";
222+
nParams++;
194223
}
195224

196225
for (int i = 0; i < m_vParameterArguments.size(); i++) {
197226
sRet += m_vParameterArguments[i]->help(sProgramName, sPrefix + " ") + " \r\n";
227+
nParams++;
228+
}
229+
}
230+
231+
if (m_vExamples.size() > 0) {
232+
for (int ei = 0; ei < m_vExamples.size(); ei++) {
233+
sRet += sPrefix + " - example " + std::to_string(ei) + ": " + m_vExamples[ei] + "\r\n";
198234
}
235+
sRet += "\r\n";
199236
}
200237

201238
if (m_vProcessors.size() > 0) {
202239
sRet += "\r\n" + sPrefix + "Commands: \r\n";
203240
for (int i = 0; i < m_vProcessors.size(); i++) {
204241
WSJCppArgumentProcessor *p = m_vProcessors[i];
205242
// TODO need a previous Processors
206-
sRet += sPrefix + " " + sProgramName + " <params> " + p->getName() + " - " + p->getDescription() + "\r\n";
207-
sRet += p->help(sProgramName, sPrefix + " ");
243+
244+
std::string sRoute = sProgramName;
245+
if (nParams > 0) {
246+
sRoute += " <arguments>";
247+
}
248+
sRoute += " " + p->getName();
249+
// TODO: <package-name>
250+
sRet += sPrefix + " " + sRoute + " - " + p->getDescription() + "\r\n";
251+
sRet += p->help(sRoute, sPrefix + " ");
208252
}
253+
sRet += "\r\n";
209254
}
210255

211-
sRet += "\r\n"; // TODO
256+
// sRet += "\r\n"; // TODO
212257
return sRet;
213258
}
214259

@@ -260,15 +305,14 @@ int WSJCppArguments::recursiveExec(WSJCppArgumentProcessor *pArgumentProcessor,
260305
}
261306
}
262307

263-
if (vSubArguments.size() == 0) {
264-
WSJCppLog::throw_err(TAG, "Could not find processor for execute with empty name");
308+
if (vSubArguments.size() > 0) {
309+
WSJCppArgumentProcessor *pNextProcessor = pArgumentProcessor->findRegisteredProcessor(vSubArguments[0]);
310+
if (pNextProcessor != nullptr) {
311+
vSubArguments.erase(vSubArguments.begin());
312+
return this->recursiveExec(pNextProcessor, vSubArguments);
313+
}
265314
}
266315

267-
WSJCppArgumentProcessor *pNextProcessor = pArgumentProcessor->findRegisteredProcessor(vSubArguments[0]);
268-
if (pNextProcessor != nullptr) {
269-
vSubArguments.erase(vSubArguments.begin());
270-
return this->recursiveExec(pNextProcessor, vSubArguments);
271-
}
272316
return pArgumentProcessor->exec(m_sProgramName, vSubArguments);
273317
}
274318

src/wsjcpp_arguments.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class WSJCppArgumentProcessor {
4545
std::string getDescription();
4646

4747
void registryProcessor(WSJCppArgumentProcessor *p);
48+
void registryExample(const std::string &sExample);
4849
void registrySingleArgument(const std::string &sArgumentName, const std::string &sDescription);
4950
void registryParameterArgument(const std::string &sArgumentName, const std::string &sDescription);
5051
WSJCppArgumentProcessor *findRegisteredProcessor(const std::string &sArgumentName);
@@ -57,17 +58,20 @@ class WSJCppArgumentProcessor {
5758

5859
bool getValueOfParam(const std::string &sArgumentName);
5960

60-
virtual bool applySingleArgument(const std::string &sProgramName, const std::string &sArgumentName) = 0;
61-
virtual bool applyParameterArgument(const std::string &sProgramName, const std::string &sArgumentName, const std::string &sValue) = 0;
62-
virtual int exec(const std::string &sProgramName, const std::vector<std::string> &vSubParams) = 0;
61+
virtual bool applySingleArgument(const std::string &sProgramName, const std::string &sArgumentName);
62+
virtual bool applyParameterArgument(const std::string &sProgramName, const std::string &sArgumentName, const std::string &sValue);
63+
virtual int exec(const std::string &sProgramName, const std::vector<std::string> &vSubParams);
6364

64-
private:
65+
protected:
6566
std::string TAG;
67+
68+
private:
6669
std::string m_sName;
6770
std::string m_sDescription;
6871
std::vector<WSJCppArgumentProcessor *> m_vProcessors;
6972
std::vector<WSJCppArgumentSingle *> m_vSingleArguments;
7073
std::vector<WSJCppArgumentParameter *> m_vParameterArguments;
74+
std::vector<std::string> m_vExamples;
7175
};
7276

7377
// ---------------------------------------------------------------------

0 commit comments

Comments
 (0)