summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/cli/SettingCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/cli/SettingCommand.java')
-rw-r--r--core/src/main/java/org/elasticsearch/cli/SettingCommand.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/core/src/main/java/org/elasticsearch/cli/SettingCommand.java b/core/src/main/java/org/elasticsearch/cli/SettingCommand.java
new file mode 100644
index 0000000000..868975ac6f
--- /dev/null
+++ b/core/src/main/java/org/elasticsearch/cli/SettingCommand.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.elasticsearch.cli;
+
+import joptsimple.OptionSet;
+import joptsimple.OptionSpec;
+import joptsimple.util.KeyValuePair;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public abstract class SettingCommand extends Command {
+
+ private final OptionSpec<KeyValuePair> settingOption;
+
+ public SettingCommand(String description) {
+ super(description);
+ this.settingOption = parser.accepts("E", "Configure a setting").withRequiredArg().ofType(KeyValuePair.class);
+ }
+
+ @Override
+ protected void execute(Terminal terminal, OptionSet options) throws Exception {
+ final Map<String, String> settings = new HashMap<>();
+ for (final KeyValuePair kvp : settingOption.values(options)) {
+ if (kvp.value.isEmpty()) {
+ throw new UserError(ExitCodes.USAGE, "Setting [" + kvp.key + "] must not be empty");
+ }
+ settings.put(kvp.key, kvp.value);
+ }
+
+ putSystemPropertyIfSettingIsMissing(settings, "path.conf", "es.path.conf");
+ putSystemPropertyIfSettingIsMissing(settings, "path.data", "es.path.data");
+ putSystemPropertyIfSettingIsMissing(settings, "path.home", "es.path.home");
+ putSystemPropertyIfSettingIsMissing(settings, "path.logs", "es.path.logs");
+
+ execute(terminal, options, settings);
+ }
+
+ protected static void putSystemPropertyIfSettingIsMissing(final Map<String, String> settings, final String setting, final String key) {
+ final String value = System.getProperty(key);
+ if (value != null) {
+ if (settings.containsKey(setting)) {
+ final String message =
+ String.format(
+ Locale.ROOT,
+ "duplicate setting [%s] found via command-line [%s] and system property [%s]",
+ setting,
+ settings.get(setting),
+ value);
+ throw new IllegalArgumentException(message);
+ } else {
+ settings.put(setting, value);
+ }
+ }
+ }
+
+ protected abstract void execute(Terminal terminal, OptionSet options, Map<String, String> settings) throws Exception;
+
+}