summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhelllth <th@cismet.de>2014-07-22 16:13:01 +0200
committerhelllth <th@cismet.de>2014-07-22 16:13:01 +0200
commit9d7035d4d9145090a0d20869963e23014b835577 (patch)
tree60580c32d4f36844813d77bf690e6da33c6cda38
parent55e9949641d8906e622ea92f40ac1138ae74a30c (diff)
downloadjcommander-9d7035d4d9145090a0d20869963e23014b835577.tar.gz
add possibility to allow parameter overwriting (and even disallowing it for certain parameters)
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java7
-rw-r--r--src/main/java/com/beust/jcommander/Parameter.java8
-rw-r--r--src/main/java/com/beust/jcommander/ParameterDescription.java6
-rw-r--r--src/main/java/com/beust/jcommander/WrappedParameter.java3
4 files changed, 23 insertions, 1 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index f4a29e5..04f98ba 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -154,6 +154,7 @@ public class JCommander {
private List<String> m_unknownArgs = Lists.newArrayList();
private boolean m_acceptUnknownOptions = false;
+ private boolean m_allowParameterOverwriting = false;
private static Console m_console;
@@ -1567,7 +1568,13 @@ public class JCommander {
public List<String> getUnknownOptions() {
return m_unknownArgs;
}
+ public void setAllowParameterOverwriting(boolean b) {
+ m_allowParameterOverwriting = b;
+ }
+ public boolean isParameterOverwritingAllowed() {
+ return m_allowParameterOverwriting;
+ }
// public void setCaseSensitiveCommands(boolean b) {
// m_caseSensitiveCommands = b;
// }
diff --git a/src/main/java/com/beust/jcommander/Parameter.java b/src/main/java/com/beust/jcommander/Parameter.java
index 974eeaa..d8cf87d 100644
--- a/src/main/java/com/beust/jcommander/Parameter.java
+++ b/src/main/java/com/beust/jcommander/Parameter.java
@@ -119,4 +119,12 @@ public @interface Parameter {
* required parameters are no longer checked for their presence.
*/
boolean help() default false;
+
+ /**
+ * If true, this parameter can be overwritten through a file or another appearance of the parameter
+ * @return
+ */
+ boolean forceNonOverwritable() default false;
+
+
}
diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java
index 33574a9..e41c782 100644
--- a/src/main/java/com/beust/jcommander/ParameterDescription.java
+++ b/src/main/java/com/beust/jcommander/ParameterDescription.java
@@ -231,7 +231,7 @@ public class ParameterDescription {
p("Adding " + (isDefault ? "default " : "") + "value:" + value
+ " to parameter:" + m_parameterized.getName());
String name = m_wrappedParameter.names()[0];
- if (m_assigned && ! isMultiOption()) {
+ if (m_assigned && ! isMultiOption() && !m_jCommander.isParameterOverwritingAllowed() || isNonOverwritableForced()) {
throw new ParameterException("Can only specify option " + name + " once.");
}
@@ -358,4 +358,8 @@ public class ParameterDescription {
public boolean isHelp() {
return m_wrappedParameter.isHelp();
}
+
+ public boolean isNonOverwritableForced() {
+ return m_wrappedParameter.isNonOverwritableForced();
+ }
}
diff --git a/src/main/java/com/beust/jcommander/WrappedParameter.java b/src/main/java/com/beust/jcommander/WrappedParameter.java
index 52cafc4..f4e7d56 100644
--- a/src/main/java/com/beust/jcommander/WrappedParameter.java
+++ b/src/main/java/com/beust/jcommander/WrappedParameter.java
@@ -109,4 +109,7 @@ public class WrappedParameter {
return m_parameter != null && m_parameter.help();
}
+ public boolean isNonOverwritableForced() {
+ return m_parameter != null && m_parameter.forceNonOverwritable();
+ }
}