Add possibility to set Required Parameters.
[command.git] / include / required.h
1 #ifndef __COMMAND_REQUIRED_H
2 #define __COMMAND_REQUIRED_H
3
4 #include "parameter.h"
5
6 namespace command {
7     /**
8      * Required Parameter decorator. Makes passed Parameters treated as required
9      */
10     class Required : public Parameter {
11     protected:
12         /**
13          * Parameter which will be treated as required
14          */
15         Parameter * parameter;
16
17     public:
18         /**
19          * Default constructor.
20          *
21          * @param parameter Parameter which will be treated as required
22          */
23         Required(Parameter * parameter)
24             : Parameter(parameter->describe()), parameter(parameter) {
25         }
26
27         /**
28          * Default destructor. Releases allocated memory
29          */
30         virtual ~Required() {
31             delete parameter;
32         }
33
34         /**
35          * Method used for handling method calls to linked Parameter
36          */
37         virtual void handle() {
38             parameter->handle();
39         }
40
41         /**
42          * Method used for checking if the given user value is understandable by
43          * parameter.
44          *
45          * @param value value from argv to check against
46          */
47         virtual bool understand(const std::string & value) {
48             return parameter->understand(value);
49         }
50
51         /**
52          * Indicates if current Parameter is required
53          */
54         virtual bool isRequired() {
55             return true;
56         };
57
58         /**
59          * Indicates if current Parameter is already used
60          */
61         virtual bool isUsed() {
62             return parameter->isUsed();
63         };
64     };
65 }
66
67 #endif /* __COMMAND_PARAMETER_H */