You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2017/05/15 15:34:56 UTC
[2/2] geode git commit: GEODE-2880: fix help, hint, regionName,
filePath value completions
GEODE-2880: fix help, hint, regionName, filePath value completions
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/2a272acc
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/2a272acc
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/2a272acc
Branch: refs/heads/develop
Commit: 2a272acc9396fa499fe93d08e6a2ef0ba5a4448d
Parents: 119f84b
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon May 15 08:27:59 2017 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Mon May 15 08:32:56 2017 -0700
----------------------------------------------------------------------
.../geode/management/cli/ConverterHint.java | 33 +-
.../management/internal/cli/CommandManager.java | 30 +-
.../internal/cli/CommandManagerAware.java | 20 +
.../management/internal/cli/GfshParser.java | 33 +-
.../CreateAlterDestroyRegionCommands.java | 6 +-
.../internal/cli/commands/DataCommands.java | 12 +-
.../cli/commands/DiskStoreCommands.java | 6 +-
.../internal/cli/commands/FunctionCommands.java | 2 +-
.../internal/cli/commands/GfshHelpCommands.java | 29 +-
.../internal/cli/commands/IndexCommands.java | 6 +-
.../cli/commands/LauncherLifecycleCommands.java | 25 +-
.../cli/commands/MiscellaneousCommands.java | 4 +-
.../internal/cli/commands/RegionCommands.java | 2 +-
.../internal/cli/commands/ShellCommands.java | 2 +-
.../cli/converters/DirPathConverter.java | 143 ------
.../cli/converters/DiskStoreNameConverter.java | 31 +-
.../cli/converters/FilePathConverter.java | 111 +----
.../cli/converters/FilePathStringConverter.java | 132 ++---
.../internal/cli/converters/HelpConverter.java | 69 +++
.../cli/converters/HintTopicConverter.java | 75 +++
.../cli/converters/RegionPathConverter.java | 52 +-
.../management/internal/cli/help/Helper.java | 63 ++-
.../cli/GfshParserAutoCompletionTest.java | 292 +++++++++++
.../internal/cli/GfshParserConverterTest.java | 218 +++++++++
.../internal/cli/GfshParserIntegrationTest.java | 490 -------------------
.../internal/cli/GfshParserParsingTest.java | 193 ++++++++
.../cli/help/HelperIntegrationTest.java | 63 +++
.../internal/cli/help/HelperUnitTest.java | 11 +-
.../internal/cli/LuceneIndexCommands.java | 8 +-
29 files changed, 1197 insertions(+), 964 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/cli/ConverterHint.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/cli/ConverterHint.java b/geode-core/src/main/java/org/apache/geode/management/cli/ConverterHint.java
index a4b30be..9c32559 100644
--- a/geode-core/src/main/java/org/apache/geode/management/cli/ConverterHint.java
+++ b/geode-core/src/main/java/org/apache/geode/management/cli/ConverterHint.java
@@ -23,23 +23,26 @@ import org.springframework.shell.core.annotation.CliOption;
* @since GemFire 8.0
*/
public interface ConverterHint {
- public static final String DIR_PATHSTRING = "converter.hint.dir.path.string";
- public static final String DISKSTORE_ALL = "converter.hint.cluster.diskstore";
- public static final String FILE = "converter.hint.file";
- public static final String FILE_PATHSTRING = "converter.hint.file.path.string";
- public static final String HINTTOPIC = "converter.hint.gfsh.hint.topic";
- public static final String MEMBERGROUP = "converter.hint.member.groups";
+ public static final String DISABLE_STRING_CONVERTER = ":disable-string-converter";
+ public static final String DISKSTORE =
+ "geode.converter.cluster.diskstore" + DISABLE_STRING_CONVERTER;
+ public static final String FILE = "geode.converter.file";
+ public static final String FILE_PATH = "geode.converter.file.path" + DISABLE_STRING_CONVERTER;
+ public static final String HINT = "geode.converter.hint" + DISABLE_STRING_CONVERTER;
+ public static final String HELP = "geode.converter.help" + DISABLE_STRING_CONVERTER;
+ public static final String MEMBERGROUP = "geode.converter.member.groups";
/** Hint to be used for all types of GemFire cluster members */
- public static final String ALL_MEMBER_IDNAME = "converter.hint.all.member.idOrName";
+ public static final String ALL_MEMBER_IDNAME = "geode.converter.all.member.idOrName";
/** Hint to be used for all non locator GemFire cluster members */
- public static final String MEMBERIDNAME = "converter.hint.member.idOrName";
+ public static final String MEMBERIDNAME = "geode.converter.member.idOrName";
/** Hint to be used for GemFire stand-alone locator members */
- public static final String LOCATOR_MEMBER_IDNAME = "converter.hint.locatormember.idOrName";
+ public static final String LOCATOR_MEMBER_IDNAME = "geode.converter.locatormember.idOrName";
/** Hint to be used for configured locators for discovery */
- public static final String LOCATOR_DISCOVERY_CONFIG = "converter.hint.locators.discovery.config";
- public static final String REGIONPATH = "converter.hint.region.path";
- public static final String INDEX_TYPE = "converter.hint.index.type";
- public static final String GATEWAY_SENDER_ID = "converter.hint.gateway.senderid";
- public static final String GATEWAY_RECEIVER_ID = "converter.hint.gateway.receiverid";
- public static final String LOG_LEVEL = "converter.hint.log.levels:disable-string-converter";
+ public static final String LOCATOR_DISCOVERY_CONFIG = "geode.converter.locators.discovery.config";
+ public static final String REGION_PATH = "geode.converter.region.path" + DISABLE_STRING_CONVERTER;
+ public static final String INDEX_TYPE = "geode.converter.index.type";
+ public static final String GATEWAY_SENDER_ID = "geode.converter.gateway.senderid";
+ public static final String GATEWAY_RECEIVER_ID = "geode.converter.gateway.receiverid";
+ public static final String LOG_LEVEL = "geode.converter.log.levels" + DISABLE_STRING_CONVERTER;
+
}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
index 24b07fa..0576e46 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManager.java
@@ -22,6 +22,7 @@ import org.apache.geode.internal.ClassPathLoader;
import org.apache.geode.management.internal.cli.help.Helper;
import org.apache.geode.management.internal.cli.shell.Gfsh;
import org.apache.geode.management.internal.cli.util.ClasspathScanLoadHelper;
+import org.springframework.shell.converters.SimpleFileConverter;
import org.springframework.shell.core.CommandMarker;
import org.springframework.shell.core.Converter;
import org.springframework.shell.core.MethodTarget;
@@ -205,7 +206,9 @@ public class CommandManager {
.loadAndGet("org.apache.geode.management.internal.cli.converters", Converter.class, true);
for (Class<?> klass : foundClasses) {
try {
- add((Converter<?>) klass.newInstance());
+ Converter<?> object = (Converter<?>) klass.newInstance();
+ add(object);
+
} catch (Exception e) {
logWrapper.warning(
"Could not load Converter from: " + klass + " due to " + e.getLocalizedMessage()); // continue
@@ -217,11 +220,13 @@ public class CommandManager {
foundClasses = ClasspathScanLoadHelper.loadAndGet("org.springframework.shell.converters",
Converter.class, true);
for (Class<?> klass : foundClasses) {
- try {
- add((Converter<?>) klass.newInstance());
- } catch (Exception e) {
- logWrapper.warning(
- "Could not load Converter from: " + klass + " due to " + e.getLocalizedMessage()); // continue
+ if (!SHL_CONVERTERS_TOSKIP.contains(klass)) {
+ try {
+ add((Converter<?>) klass.newInstance());
+ } catch (Exception e) {
+ logWrapper.warning(
+ "Could not load Converter from: " + klass + " due to " + e.getLocalizedMessage()); // continue
+ }
}
}
raiseExceptionIfEmpty(foundClasses, "Basic Converters");
@@ -235,6 +240,13 @@ public class CommandManager {
}
}
+ /** Skip some of the Converters from Spring Shell for our customization */
+ private static List<Class> SHL_CONVERTERS_TOSKIP = new ArrayList();
+ static {
+ // skip springs SimpleFileConverter to use our own FilePathConverter
+ SHL_CONVERTERS_TOSKIP.add(SimpleFileConverter.class);
+ }
+
public List<Converter<?>> getConverters() {
return converters;
}
@@ -249,6 +261,9 @@ public class CommandManager {
* @param converter
*/
void add(Converter<?> converter) {
+ if (CommandManagerAware.class.isAssignableFrom(converter.getClass())) {
+ ((CommandManagerAware) converter).setCommandManager(this);
+ }
converters.add(converter);
}
@@ -258,6 +273,9 @@ public class CommandManager {
* @param commandMarker
*/
void add(CommandMarker commandMarker) {
+ if (CommandManagerAware.class.isAssignableFrom(commandMarker.getClass())) {
+ ((CommandManagerAware) commandMarker).setCommandManager(this);
+ }
commandMarkers.add(commandMarker);
for (Method method : commandMarker.getClass().getMethods()) {
CliCommand cliCommand = method.getAnnotation(CliCommand.class);
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManagerAware.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManagerAware.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManagerAware.java
new file mode 100644
index 0000000..0cda3ce
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CommandManagerAware.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF 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.apache.geode.management.internal.cli;
+
+public interface CommandManagerAware {
+ void setCommandManager(CommandManager commandManager);
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
index bc4db16..426b05b 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/GfshParser.java
@@ -16,6 +16,7 @@ package org.apache.geode.management.internal.cli;
import org.apache.commons.lang.StringUtils;
import org.apache.geode.internal.logging.LogService;
+import org.apache.logging.log4j.Logger;
import org.springframework.shell.converters.ArrayConverter;
import org.springframework.shell.core.CommandMarker;
import org.springframework.shell.core.Completion;
@@ -28,7 +29,6 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
-import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -47,17 +47,12 @@ public class GfshParser extends SimpleParser {
public static final String COMMAND_DELIMITER = ";";
public static final String CONTINUATION_CHARACTER = "\\";
- // Make use of LogWrapper
- private static final LogWrapper logWrapper = LogWrapper.getInstance();
- private static final org.apache.logging.log4j.Logger logger = LogService.getLogger();
+ private static final Logger logger = LogService.getLogger();
// pattern used to split the user input with whitespaces except those in quotes (single or double)
private static Pattern PATTERN =
Pattern.compile("\\s*([^\\s']*)'([^']*)'\\s+|\\s*([^\\s\"]*)\"([^\"]*)\"\\s+|\\S+");
- /**
- * Used for warning messages
- */
- private Logger consoleLogger;
+
private CommandManager commandManager = null;
@@ -66,12 +61,6 @@ public class GfshParser extends SimpleParser {
}
public GfshParser(Properties cacheProperties) {
- if (CliUtil.isGfshVM()) {
- consoleLogger = Logger.getLogger(this.getClass().getCanonicalName());
- } else {
- consoleLogger = logWrapper.getLogger();
- }
-
this.commandManager = new CommandManager(cacheProperties);
for (CommandMarker command : commandManager.getCommandMarkers()) {
@@ -282,7 +271,9 @@ public class GfshParser extends SimpleParser {
// strip off the beginning part of the candidates from the cursor point
potentials.replaceAll(
completion -> new Completion(completion.getValue().substring(candidateBeginAt)));
- } else {
+ }
+ // if the completed values are option, and the userInput doesn't ends with an "=" sign,
+ else if (!userInput.endsWith("=")) {
// these potentials do not have "=" in front of them, manually add them
potentials.replaceAll(completion -> new Completion("=" + completion.getValue()));
}
@@ -322,16 +313,4 @@ public class GfshParser extends SimpleParser {
candidates.replaceAll(completion -> new Completion(completion.getValue().trim()));
return candidates;
}
-
- @Override
- public void obtainHelp(String command) {
- if (StringUtils.isBlank(command))
- super.obtainHelp(command);
- else
- consoleLogger.info(commandManager.obtainHelp(command));
- }
-
- public void obtainHint(String topic) {
- consoleLogger.info(commandManager.obtainHint(topic));
- }
}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
index c4455ad..fb292d2 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
@@ -119,7 +119,7 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.CREATE_REGION__REGIONSHORTCUT__HELP) RegionShortcut regionShortcut,
@CliOption(key = CliStrings.CREATE_REGION__USEATTRIBUTESFROM,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.CREATE_REGION__USEATTRIBUTESFROM__HELP) String useAttributesFrom,
@CliOption(key = CliStrings.CREATE_REGION__GROUP, optionContext = ConverterHint.MEMBERGROUP,
@@ -140,7 +140,7 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.CREATE_REGION__CACHEWRITER,
help = CliStrings.CREATE_REGION__CACHEWRITER__HELP) String cacheWriter,
@CliOption(key = CliStrings.CREATE_REGION__COLOCATEDWITH,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.CREATE_REGION__COLOCATEDWITH__HELP) String prColocatedWith,
@CliOption(key = CliStrings.CREATE_REGION__COMPRESSOR,
@@ -1036,7 +1036,7 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
@CliMetaData(shellOnly = false, relatedTopic = CliStrings.TOPIC_GEODE_REGION)
@ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE)
public Result destroyRegion(
- @CliOption(key = CliStrings.DESTROY_REGION__REGION, optionContext = ConverterHint.REGIONPATH,
+ @CliOption(key = CliStrings.DESTROY_REGION__REGION, optionContext = ConverterHint.REGION_PATH,
mandatory = true, help = CliStrings.DESTROY_REGION__REGION__HELP) String regionPath) {
if (regionPath == null) {
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
index 29d68bd..51ce318 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
@@ -775,7 +775,7 @@ public class DataCommands implements CommandMarker {
@CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
public Result exportData(
@CliOption(key = CliStrings.EXPORT_DATA__REGION, mandatory = true,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
help = CliStrings.EXPORT_DATA__REGION__HELP) String regionName,
@CliOption(key = CliStrings.EXPORT_DATA__FILE,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, mandatory = true,
@@ -832,7 +832,7 @@ public class DataCommands implements CommandMarker {
@CliCommand(value = CliStrings.IMPORT_DATA, help = CliStrings.IMPORT_DATA__HELP)
@CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
public Result importData(
- @CliOption(key = CliStrings.IMPORT_DATA__REGION, optionContext = ConverterHint.REGIONPATH,
+ @CliOption(key = CliStrings.IMPORT_DATA__REGION, optionContext = ConverterHint.REGION_PATH,
mandatory = true, help = CliStrings.IMPORT_DATA__REGION__HELP) String regionName,
@CliOption(key = CliStrings.IMPORT_DATA__FILE, mandatory = true,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
@@ -900,7 +900,7 @@ public class DataCommands implements CommandMarker {
help = CliStrings.PUT__VALUE__HELP) String value,
@CliOption(key = {CliStrings.PUT__REGIONNAME}, mandatory = true,
help = CliStrings.PUT__REGIONNAME__HELP,
- optionContext = ConverterHint.REGIONPATH) String regionPath,
+ optionContext = ConverterHint.REGION_PATH) String regionPath,
@CliOption(key = {CliStrings.PUT__KEYCLASS},
help = CliStrings.PUT__KEYCLASS__HELP) String keyClass,
@CliOption(key = {CliStrings.PUT__VALUEKLASS},
@@ -968,7 +968,7 @@ public class DataCommands implements CommandMarker {
help = CliStrings.GET__KEY__HELP) String key,
@CliOption(key = {CliStrings.GET__REGIONNAME}, mandatory = true,
help = CliStrings.GET__REGIONNAME__HELP,
- optionContext = ConverterHint.REGIONPATH) String regionPath,
+ optionContext = ConverterHint.REGION_PATH) String regionPath,
@CliOption(key = {CliStrings.GET__KEYCLASS},
help = CliStrings.GET__KEYCLASS__HELP) String keyClass,
@CliOption(key = {CliStrings.GET__VALUEKLASS},
@@ -1031,7 +1031,7 @@ public class DataCommands implements CommandMarker {
help = CliStrings.LOCATE_ENTRY__KEY__HELP) String key,
@CliOption(key = {CliStrings.LOCATE_ENTRY__REGIONNAME}, mandatory = true,
help = CliStrings.LOCATE_ENTRY__REGIONNAME__HELP,
- optionContext = ConverterHint.REGIONPATH) String regionPath,
+ optionContext = ConverterHint.REGION_PATH) String regionPath,
@CliOption(key = {CliStrings.LOCATE_ENTRY__KEYCLASS},
help = CliStrings.LOCATE_ENTRY__KEYCLASS__HELP) String keyClass,
@CliOption(key = {CliStrings.LOCATE_ENTRY__VALUEKLASS},
@@ -1083,7 +1083,7 @@ public class DataCommands implements CommandMarker {
specifiedDefaultValue = "") String key,
@CliOption(key = {CliStrings.REMOVE__REGION}, mandatory = true,
help = CliStrings.REMOVE__REGION__HELP,
- optionContext = ConverterHint.REGIONPATH) String regionPath,
+ optionContext = ConverterHint.REGION_PATH) String regionPath,
@CliOption(key = CliStrings.REMOVE__ALL, help = CliStrings.REMOVE__ALL__HELP,
specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean removeAllKeys,
@CliOption(key = {CliStrings.REMOVE__KEYCLASS},
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java
index a96d3c2..460e1d1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java
@@ -294,7 +294,7 @@ public class DiskStoreCommands extends AbstractCommandsSupport {
@ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE)
public Result createDiskStore(
@CliOption(key = CliStrings.CREATE_DISK_STORE__NAME, mandatory = true,
- optionContext = ConverterHint.DISKSTORE_ALL,
+ optionContext = ConverterHint.DISKSTORE,
help = CliStrings.CREATE_DISK_STORE__NAME__HELP) String name,
@CliOption(key = CliStrings.CREATE_DISK_STORE__ALLOW_FORCE_COMPACTION,
specifiedDefaultValue = "true", unspecifiedDefaultValue = "false",
@@ -418,7 +418,7 @@ public class DiskStoreCommands extends AbstractCommandsSupport {
@ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE)
public Result compactDiskStore(
@CliOption(key = CliStrings.COMPACT_DISK_STORE__NAME, mandatory = true,
- optionContext = ConverterHint.DISKSTORE_ALL,
+ optionContext = ConverterHint.DISKSTORE,
help = CliStrings.COMPACT_DISK_STORE__NAME__HELP) String diskStoreName,
@CliOption(key = CliStrings.COMPACT_DISK_STORE__GROUP,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
@@ -872,7 +872,7 @@ public class DiskStoreCommands extends AbstractCommandsSupport {
optionContext = ConverterHint.MEMBERIDNAME,
help = CliStrings.DESCRIBE_DISK_STORE__MEMBER__HELP) final String memberName,
@CliOption(key = CliStrings.DESCRIBE_DISK_STORE__NAME, mandatory = true,
- optionContext = ConverterHint.DISKSTORE_ALL,
+ optionContext = ConverterHint.DISKSTORE,
help = CliStrings.DESCRIBE_DISK_STORE__NAME__HELP) final String diskStoreName) {
try {
return toCompositeResult(getDiskStoreDescription(memberName, diskStoreName));
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java
index e21a334..1c37807 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java
@@ -94,7 +94,7 @@ public class FunctionCommands implements CommandMarker {
help = CliStrings.EXECUTE_FUNCTION__ONMEMBER__HELP) String onMember,
@CliOption(key = CliStrings.EXECUTE_FUNCTION__ONREGION,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
help = CliStrings.EXECUTE_FUNCTION__ONREGION__HELP) String onRegion,
@CliOption(key = CliStrings.EXECUTE_FUNCTION__ARGUMENTS,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshHelpCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshHelpCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshHelpCommands.java
index 29e6bae..da13cdf 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshHelpCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshHelpCommands.java
@@ -16,8 +16,11 @@ package org.apache.geode.management.internal.cli.commands;
import org.apache.geode.management.cli.CliMetaData;
import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.CommandManager;
+import org.apache.geode.management.internal.cli.CommandManagerAware;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.cli.shell.Gfsh;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
import org.springframework.shell.core.CommandMarker;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
@@ -25,20 +28,28 @@ import org.springframework.shell.core.annotation.CliOption;
/**
* @since GemFire 7.0
*/
-public class GfshHelpCommands implements CommandMarker {
+public class GfshHelpCommands implements CommandMarker, CommandManagerAware {
+ private CommandManager commandManager = null;
+
+ public void setCommandManager(CommandManager commandManager) {
+ this.commandManager = commandManager;
+ }
+
@CliCommand(value = CliStrings.HELP, help = CliStrings.HELP__HELP)
@CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEODE_HELP})
- public void obtainHelp(@CliOption(key = {"", CliStrings.SH__COMMAND},
- help = "Command name to provide help for") String buffer) {
- Gfsh.getCurrentInstance().getGfshParser().obtainHelp(buffer);
+ public Result obtainHelp(
+ @CliOption(key = {"", CliStrings.SH__COMMAND}, optionContext = ConverterHint.HELP,
+ help = "Command name to provide help for") String buffer) {
+
+ return ResultBuilder.createInfoResult(commandManager.obtainHelp(buffer));
}
@CliCommand(value = CliStrings.HINT, help = CliStrings.HINT__HELP)
@CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEODE_HELP})
- public void hint(
- @CliOption(key = {"", CliStrings.HINT__TOPICNAME}, optionContext = ConverterHint.HINTTOPIC,
- help = CliStrings.HINT__TOPICNAME) String topicName) {
- Gfsh.getCurrentInstance().getGfshParser().obtainHint(topicName);
+ public Result hint(@CliOption(key = {"", CliStrings.HINT__TOPICNAME},
+ optionContext = ConverterHint.HINT, help = CliStrings.HINT__TOPICNAME) String topicName) {
+
+ return ResultBuilder.createInfoResult(commandManager.obtainHint(topicName));
}
}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java
index 080d520..005c98b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java
@@ -181,7 +181,7 @@ public class IndexCommands extends AbstractCommandsSupport {
help = CliStrings.CREATE_INDEX__EXPRESSION__HELP) final String indexedExpression,
@CliOption(key = CliStrings.CREATE_INDEX__REGION, mandatory = true,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
help = CliStrings.CREATE_INDEX__REGION__HELP) String regionPath,
@CliOption(key = CliStrings.CREATE_INDEX__MEMBER, mandatory = false,
@@ -330,7 +330,7 @@ public class IndexCommands extends AbstractCommandsSupport {
help = CliStrings.DESTROY_INDEX__NAME__HELP) final String indexName,
@CliOption(key = CliStrings.DESTROY_INDEX__REGION, mandatory = false,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
help = CliStrings.DESTROY_INDEX__REGION__HELP) final String regionPath,
@CliOption(key = CliStrings.DESTROY_INDEX__MEMBER, mandatory = false,
@@ -472,7 +472,7 @@ public class IndexCommands extends AbstractCommandsSupport {
help = CliStrings.DEFINE_INDEX__EXPRESSION__HELP) final String indexedExpression,
@CliOption(key = CliStrings.DEFINE_INDEX__REGION, mandatory = true,
- optionContext = ConverterHint.REGIONPATH,
+ optionContext = ConverterHint.REGION_PATH,
help = CliStrings.DEFINE_INDEX__REGION__HELP) String regionPath,
@CliOption(key = CliStrings.DEFINE_INDEX__TYPE, mandatory = false,
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
index b3de975..d61e72d 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java
@@ -224,15 +224,15 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.START_LOCATOR__PORT,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_LOCATOR__PORT__HELP) final Integer port,
- @CliOption(key = CliStrings.START_LOCATOR__DIR, optionContext = ConverterHint.DIR_PATHSTRING,
+ @CliOption(key = CliStrings.START_LOCATOR__DIR,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_LOCATOR__DIR__HELP) String workingDirectory,
@CliOption(key = CliStrings.START_LOCATOR__PROPERTIES,
- optionContext = ConverterHint.FILE_PATHSTRING,
+ optionContext = ConverterHint.FILE_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_LOCATOR__PROPERTIES__HELP) String gemfirePropertiesPathname,
@CliOption(key = CliStrings.START_LOCATOR__SECURITY_PROPERTIES,
- optionContext = ConverterHint.FILE_PATHSTRING,
+ optionContext = ConverterHint.FILE_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_LOCATOR__SECURITY_PROPERTIES__HELP) String gemfireSecurityPropertiesPathname,
@CliOption(key = CliStrings.START_LOCATOR__INITIALHEAP,
@@ -774,7 +774,7 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.STATUS_LOCATOR__PID,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STATUS_LOCATOR__PID__HELP) final Integer pid,
- @CliOption(key = CliStrings.STATUS_LOCATOR__DIR, optionContext = ConverterHint.DIR_PATHSTRING,
+ @CliOption(key = CliStrings.STATUS_LOCATOR__DIR,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STATUS_LOCATOR__DIR__HELP) final String workingDirectory) {
try {
@@ -829,7 +829,7 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.STOP_LOCATOR__PID,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STOP_LOCATOR__PID__HELP) final Integer pid,
- @CliOption(key = CliStrings.STOP_LOCATOR__DIR, optionContext = ConverterHint.DIR_PATHSTRING,
+ @CliOption(key = CliStrings.STOP_LOCATOR__DIR,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STOP_LOCATOR__DIR__HELP) final String workingDirectory) {
LocatorState locatorState;
@@ -1297,11 +1297,11 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__BIND_ADDRESS__HELP) final String bindAddress,
@CliOption(key = CliStrings.START_SERVER__CACHE_XML_FILE,
- optionContext = ConverterHint.FILE_PATHSTRING,
+ optionContext = ConverterHint.FILE_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__CACHE_XML_FILE__HELP) String cacheXmlPathname,
@CliOption(key = CliStrings.START_SERVER__CLASSPATH,
- /* optionContext = ConverterHint.FILE_PATHSTRING, // there's an issue with TAB here */
+ /* optionContext = ConverterHint.FILE_PATH, // there's an issue with TAB here */
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__CLASSPATH__HELP) final String classpath,
@CliOption(key = CliStrings.START_SERVER__CRITICAL__HEAP__PERCENTAGE,
@@ -1310,7 +1310,7 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.START_SERVER__CRITICAL_OFF_HEAP_PERCENTAGE,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__CRITICAL_OFF_HEAP__HELP) final Float criticalOffHeapPercentage,
- @CliOption(key = CliStrings.START_SERVER__DIR, optionContext = ConverterHint.DIR_PATHSTRING,
+ @CliOption(key = CliStrings.START_SERVER__DIR,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__DIR__HELP) String workingDirectory,
@CliOption(key = CliStrings.START_SERVER__DISABLE_DEFAULT_SERVER,
@@ -1403,15 +1403,14 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.START_SERVER__OFF_HEAP_MEMORY_SIZE,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__OFF_HEAP_MEMORY_SIZE__HELP) final String offHeapMemorySize,
- @CliOption(key = CliStrings.START_SERVER__PROPERTIES,
- optionContext = ConverterHint.FILE_PATHSTRING,
+ @CliOption(key = CliStrings.START_SERVER__PROPERTIES, optionContext = ConverterHint.FILE_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__PROPERTIES__HELP) String gemfirePropertiesPathname,
@CliOption(key = CliStrings.START_SERVER__REBALANCE, unspecifiedDefaultValue = "false",
specifiedDefaultValue = "true",
help = CliStrings.START_SERVER__REBALANCE__HELP) final Boolean rebalance,
@CliOption(key = CliStrings.START_SERVER__SECURITY_PROPERTIES,
- optionContext = ConverterHint.FILE_PATHSTRING,
+ optionContext = ConverterHint.FILE_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.START_SERVER__SECURITY_PROPERTIES__HELP) String gemfireSecurityPropertiesPathname,
@CliOption(key = CliStrings.START_SERVER__SERVER_BIND_ADDRESS,
@@ -1853,7 +1852,7 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.STATUS_SERVER__PID,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STATUS_SERVER__PID__HELP) final Integer pid,
- @CliOption(key = CliStrings.STATUS_SERVER__DIR, optionContext = ConverterHint.DIR_PATHSTRING,
+ @CliOption(key = CliStrings.STATUS_SERVER__DIR,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STATUS_SERVER__DIR__HELP) final String workingDirectory) {
try {
@@ -1911,7 +1910,7 @@ public class LauncherLifecycleCommands extends AbstractCommandsSupport {
@CliOption(key = CliStrings.STOP_SERVER__PID,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STOP_SERVER__PID__HELP) final Integer pid,
- @CliOption(key = CliStrings.STOP_SERVER__DIR, optionContext = ConverterHint.DIR_PATHSTRING,
+ @CliOption(key = CliStrings.STOP_SERVER__DIR,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.STOP_SERVER__DIR__HELP) final String workingDirectory) {
ServerState serverState;
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java
index b5fb9fe..e543c74 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java
@@ -405,7 +405,7 @@ public class MiscellaneousCommands implements CommandMarker {
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
optionContext = ConverterHint.MEMBERGROUP,
help = CliStrings.NETSTAT__GROUP__HELP) String group,
- @CliOption(key = CliStrings.NETSTAT__FILE, optionContext = ConverterHint.FILE,
+ @CliOption(key = CliStrings.NETSTAT__FILE,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.NETSTAT__FILE__HELP) String saveAs,
@CliOption(key = CliStrings.NETSTAT__WITHLSOF, specifiedDefaultValue = "true",
@@ -817,7 +817,7 @@ public class MiscellaneousCommands implements CommandMarker {
@CliOption(key = {CliStrings.SHOW_METRICS__MEMBER},
optionContext = ConverterHint.ALL_MEMBER_IDNAME,
help = CliStrings.SHOW_METRICS__MEMBER__HELP) String memberNameOrId,
- @CliOption(key = {CliStrings.SHOW_METRICS__REGION}, optionContext = ConverterHint.REGIONPATH,
+ @CliOption(key = {CliStrings.SHOW_METRICS__REGION}, optionContext = ConverterHint.REGION_PATH,
help = CliStrings.SHOW_METRICS__REGION__HELP) String regionName,
@CliOption(key = {CliStrings.SHOW_METRICS__FILE},
help = CliStrings.SHOW_METRICS__FILE__HELP) String export_to_report_to,
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java
index 0bf80a5..478975f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java
@@ -154,7 +154,7 @@ public class RegionCommands implements CommandMarker {
relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_CONFIG})
@ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
public Result describeRegion(
- @CliOption(key = CliStrings.DESCRIBE_REGION__NAME, optionContext = ConverterHint.REGIONPATH,
+ @CliOption(key = CliStrings.DESCRIBE_REGION__NAME, optionContext = ConverterHint.REGION_PATH,
help = CliStrings.DESCRIBE_REGION__NAME__HELP, mandatory = true) String regionName) {
Result result = null;
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java
index 81a96ae..c9e79b0 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java
@@ -304,7 +304,7 @@ public class ShellCommands implements CommandMarker {
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.CONNECT__SSL_PROTOCOLS__HELP) String sslProtocols,
@CliOption(key = CliStrings.CONNECT__SECURITY_PROPERTIES,
- optionContext = ConverterHint.FILE_PATHSTRING,
+ optionContext = ConverterHint.FILE_PATH,
unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE,
help = CliStrings.CONNECT__SECURITY_PROPERTIES__HELP) final String gfSecurityPropertiesPath,
@CliOption(key = {CliStrings.CONNECT__USE_SSL}, specifiedDefaultValue = "true",
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DirPathConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DirPathConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DirPathConverter.java
deleted file mode 100644
index 1670898..0000000
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DirPathConverter.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF 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.apache.geode.management.internal.cli.converters;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.List;
-
-import org.springframework.shell.core.Completion;
-import org.springframework.shell.core.Converter;
-import org.springframework.shell.core.MethodTarget;
-
-import org.apache.geode.management.cli.ConverterHint;
-
-/**
- *
- * @since GemFire 7.0
- */
-public class DirPathConverter implements Converter<String> {
- private final DirFilterImpl dirFilter = new DirFilterImpl();
-
- @Override
- public boolean supports(Class<?> type, String optionContext) {
- // System.out.println("FilePathConverter.supports() : type :: "+type+", optionContext ::
- // "+optionContext);
- return String.class.equals(type) && ConverterHint.DIR_PATHSTRING.equals(optionContext);
- }
-
- @Override
- public String convertFromText(String value, Class<?> targetType, String optionContext) {
- // System.out.println("FilePathConverter.convertFromText() : optionContext :: "+optionContext);
- return value;
- }
-
- @Override
- public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
- String existingData, String optionContext, MethodTarget target) {
- // prefix is needed while comparing Completion Candidates as potential matches
- String prefixToUse = "";
- boolean prependAbsolute = true;
- File parentDir = null; // directory to be searched for file(s)
-
- if (existingData != null) {
- // System.out.println("FilePathConverter.getAllPossibleValues() : optionContext ::
- // "+optionContext+", existingData : "+existingData);
- String[] completionValues = new String[0];
-
- if (ConverterHint.DIR_PATHSTRING.equals(optionContext)) {
- // if existingData is empty, start from root
- if (existingData != null && existingData.trim().isEmpty()) {
- File[] listRoots = File.listRoots();
- completionValues = new String[listRoots.length];
- for (int i = 0; i < listRoots.length; i++) {
- if (listRoots[i].isDirectory()) {
- completionValues[i] = listRoots[i].getPath();
- }
- }
- prefixToUse = File.separator;
- } else {
- // Create a file from existing data
- File file = new File(existingData);
- if (file.isDirectory()) {
- // For a directory, list files/sub-dirs in the directory
- parentDir = file;
- completionValues = parentDir.list(dirFilter);
- } else if (!file.exists()) {
- parentDir = file.getParentFile();
- if (parentDir == null) {
- try {
- parentDir = file.getCanonicalFile().getParentFile();
- } catch (IOException e) {
- parentDir = null;
- }
- }
- if (parentDir != null) {
- completionValues = parentDir.list(new DirNameFilterImpl(parentDir, file.getName()));
- }
- }
- // whether the file path is absolute
- prependAbsolute = file.isAbsolute();
- }
- }
-
- if (completionValues.length > 0) {
- // use directory path as prefix for completion of names of the contained files
- if (parentDir != null) {
- if (existingData.startsWith(".")) { // handle . & ..
- prefixToUse = parentDir.getPath();
- } else if (prependAbsolute) {
- prefixToUse = parentDir.getAbsolutePath();
- }
- }
- // add File.separator in the end
- if (!prefixToUse.endsWith(File.separator)
- && (prependAbsolute || existingData.startsWith("."))) {
- prefixToUse += File.separator;
- }
- for (int i = 0; i < completionValues.length; i++) {
- completions.add(new Completion(prefixToUse + completionValues[i]));
- }
- }
- }
-
- return !completions.isEmpty();
- }
-
- class DirNameFilterImpl implements FilenameFilter {
- private File parentDirectory;
- private String userInput;
-
- public DirNameFilterImpl(File parentDirectory, String userInput) {
- this.parentDirectory = parentDirectory;
- this.userInput = userInput;
- }
-
- @Override
- public boolean accept(File dir, String name) {
- return parentDirectory.equals(dir) && name.startsWith(userInput)
- && new File(dir, name).isDirectory();
- }
- }
-
- class DirFilterImpl implements FilenameFilter {
-
- @Override
- public boolean accept(File dir, String name) {
- return new File(dir, name).isDirectory();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DiskStoreNameConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DiskStoreNameConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DiskStoreNameConverter.java
index f629046..04c5fd4 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DiskStoreNameConverter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/DiskStoreNameConverter.java
@@ -14,6 +14,12 @@
*/
package org.apache.geode.management.internal.cli.converters;
+import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.internal.cli.shell.Gfsh;
+import org.springframework.shell.core.Completion;
+import org.springframework.shell.core.Converter;
+import org.springframework.shell.core.MethodTarget;
+
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -22,13 +28,6 @@ import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
-import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.internal.cli.shell.Gfsh;
-
-import org.springframework.shell.core.Completion;
-import org.springframework.shell.core.Converter;
-import org.springframework.shell.core.MethodTarget;
-
/**
*
*
@@ -38,7 +37,7 @@ public class DiskStoreNameConverter implements Converter<String> {
@Override
public boolean supports(Class<?> type, String optionContext) {
- return String.class.equals(type) && ConverterHint.DISKSTORE_ALL.equals(optionContext);
+ return String.class.equals(type) && optionContext.contains(ConverterHint.DISKSTORE);
}
@Override
@@ -49,24 +48,22 @@ public class DiskStoreNameConverter implements Converter<String> {
@Override
public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
String existingData, String optionContext, MethodTarget target) {
- if (String.class.equals(targetType) && ConverterHint.DISKSTORE_ALL.equals(optionContext)) {
- Set<String> diskStoreNames = getDiskStoreNames();
+ Set<String> diskStoreNames = getDiskStoreNames();
- for (String diskStoreName : diskStoreNames) {
- if (existingData != null) {
- if (diskStoreName.startsWith(existingData)) {
- completions.add(new Completion(diskStoreName));
- }
- } else {
+ for (String diskStoreName : diskStoreNames) {
+ if (existingData != null) {
+ if (diskStoreName.startsWith(existingData)) {
completions.add(new Completion(diskStoreName));
}
+ } else {
+ completions.add(new Completion(diskStoreName));
}
}
return !completions.isEmpty();
}
- private Set<String> getDiskStoreNames() {
+ public Set<String> getDiskStoreNames() {
SortedSet<String> diskStoreNames = new TreeSet<String>();
Gfsh gfsh = Gfsh.getCurrentInstance();
if (gfsh != null && gfsh.isConnectedAndReady()) { // gfsh exists & is not null
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathConverter.java
index f36cdd5..7232795 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathConverter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathConverter.java
@@ -14,122 +14,45 @@
*/
package org.apache.geode.management.internal.cli.converters;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.List;
-
+import org.apache.geode.management.cli.ConverterHint;
import org.springframework.shell.core.Completion;
import org.springframework.shell.core.Converter;
import org.springframework.shell.core.MethodTarget;
-import org.apache.geode.management.cli.ConverterHint;
+import java.io.File;
+import java.util.List;
/**
*
* @since GemFire 7.0
*/
public class FilePathConverter implements Converter<File> {
+ private FilePathStringConverter delegate;
+
+ public FilePathConverter() {
+ this.delegate = new FilePathStringConverter();
+ }
+
+ public void setDelegate(FilePathStringConverter delegate) {
+ this.delegate = delegate;
+ }
+
@Override
public boolean supports(Class<?> type, String optionContext) {
- // System.out.println("FilePathConverter.supports() : type :: "+type+", optionContext ::
- // "+optionContext);
- return File.class.equals(type) && ConverterHint.FILE.equals(optionContext);
+ return File.class.equals(type) && optionContext.contains(ConverterHint.FILE);
}
@Override
public File convertFromText(String value, Class<?> targetType, String optionContext) {
- // System.out.println("FilePathConverter.convertFromText() : optionContext :: "+optionContext);
- File filePath = null;
- if (ConverterHint.FILE.equals(optionContext)) {
- filePath = new File(value);
- }
- return filePath;
+ return new File(value);
}
@Override
public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
String existingData, String optionContext, MethodTarget target) {
- // prefix is needed while comparing Completion Candidates as potential matches
- String prefixToUse = "";
- boolean prependAbsolute = true;
- File parentDir = null; // directory to be searched for file(s)
-
- if (existingData != null) {
- // System.out.println("FilePathConverter.getAllPossibleValues() : optionContext ::
- // "+optionContext+", existingData : "+existingData);
- String[] completionValues = new String[0];
-
- if (ConverterHint.FILE.equals(optionContext)) {
- // if existingData is empty, start from root
- if (existingData != null && existingData.trim().isEmpty()) {
- File[] listRoots = File.listRoots();
- completionValues = new String[listRoots.length];
- for (int i = 0; i < listRoots.length; i++) {
- completionValues[i] = listRoots[i].getPath();
- }
- prefixToUse = File.separator;
- } else {
- // Create a file from existing data
- File file = new File(existingData);
- if (file.isDirectory()) {
- // For a directory, list files/sub-dirsin the directory
- parentDir = file;
- completionValues = parentDir.list();
- } else if (!file.exists()) {
- parentDir = file.getParentFile();
- if (parentDir == null) {
- try {
- parentDir = file.getCanonicalFile().getParentFile();
- } catch (IOException e) {
- parentDir = null;
- }
- }
- if (parentDir != null) {
- completionValues = parentDir.list(new FileNameFilterImpl(parentDir, file.getName()));
- }
- }
- // whether the file path is absolute
- prependAbsolute = file.isAbsolute();
- }
- }
-
- if (completionValues.length > 0) {
- // use directory path as prefix for completion of names of the contained files
- if (parentDir != null) {
- if (existingData.startsWith(".")) { // handle . & ..
- prefixToUse = parentDir.getPath();
- } else if (prependAbsolute) {
- prefixToUse = parentDir.getAbsolutePath();
- }
- }
- // add File.separator in the end
- if (!prefixToUse.endsWith(File.separator)
- && (prependAbsolute || existingData.startsWith("."))) {
- prefixToUse += File.separator;
- }
- for (int i = 0; i < completionValues.length; i++) {
- completions.add(new Completion(prefixToUse + completionValues[i]));
- }
- }
- }
-
- return !completions.isEmpty();
+ return delegate.getAllPossibleValues(completions, targetType, existingData, optionContext,
+ target);
}
- class FileNameFilterImpl implements FilenameFilter {
- private File parentDirectory;
- private String userInput;
-
- public FileNameFilterImpl(File parentDirectory, String userInput) {
- this.parentDirectory = parentDirectory;
- this.userInput = userInput;
- }
-
- @Override
- public boolean accept(File dir, String name) {
- return parentDirectory.equals(dir) && name.startsWith(userInput);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathStringConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathStringConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathStringConverter.java
index 35baf76..3fadd96 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathStringConverter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/FilePathStringConverter.java
@@ -14,16 +14,16 @@
*/
package org.apache.geode.management.internal.cli.converters;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.List;
-
+import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.management.cli.ConverterHint;
import org.springframework.shell.core.Completion;
import org.springframework.shell.core.Converter;
import org.springframework.shell.core.MethodTarget;
-import org.apache.geode.management.cli.ConverterHint;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
/**
*
@@ -32,100 +32,64 @@ import org.apache.geode.management.cli.ConverterHint;
public class FilePathStringConverter implements Converter<String> {
@Override
public boolean supports(Class<?> type, String optionContext) {
- // System.out.println("FilePathConverter.supports() : type :: "+type+", optionContext ::
- // "+optionContext);
- return String.class.equals(type) && ConverterHint.FILE_PATHSTRING.equals(optionContext);
+ return String.class.equals(type) && optionContext.contains(ConverterHint.FILE_PATH);
}
@Override
public String convertFromText(String value, Class<?> targetType, String optionContext) {
- // System.out.println("FilePathConverter.convertFromText() : optionContext :: "+optionContext);
return value;
}
- @Override
- public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
- String existingData, String optionContext, MethodTarget target) {
- // prefix is needed while comparing Completion Candidates as potential matches
- String prefixToUse = "";
- boolean prependAbsolute = true;
- File parentDir = null; // directory to be searched for file(s)
-
- if (existingData != null) {
- // System.out.println("FilePathConverter.getAllPossibleValues() : optionContext ::
- // "+optionContext+", existingData : "+existingData);
- String[] completionValues = new String[0];
+ public List<String> getRoots() {
+ File[] roots = File.listRoots();
+ return Arrays.stream(roots).map(File::getAbsolutePath).collect(Collectors.toList());
+ }
- if (ConverterHint.FILE_PATHSTRING.equals(optionContext)) {
- // if existingData is empty, start from root
- if (existingData != null && existingData.trim().isEmpty()) {
- File[] listRoots = File.listRoots();
- completionValues = new String[listRoots.length];
- for (int i = 0; i < listRoots.length; i++) {
- completionValues[i] = listRoots[i].getPath();
- }
- prefixToUse = File.separator;
- } else {
- // Create a file from existing data
- File file = new File(existingData);
- if (file.isDirectory()) {
- // For a directory, list files/sub-dirsin the directory
- parentDir = file;
- completionValues = parentDir.list();
- } else if (!file.exists()) {
- parentDir = file.getParentFile();
- if (parentDir == null) {
- try {
- parentDir = file.getCanonicalFile().getParentFile();
- } catch (IOException e) {
- parentDir = null;
- }
- }
- if (parentDir != null) {
- completionValues = parentDir.list(new FileNameFilterImpl(parentDir, file.getName()));
- }
- }
- // whether the file path is absolute
- prependAbsolute = file.isAbsolute();
- }
- }
+ /**
+ * if path is a dir, it will return the list of files under this dir. if path is a filename, it
+ * will return all the siblings of this file
+ */
+ public List<String> getSiblings(String path) {
+ File currentFile = new File(path);
- if (completionValues.length > 0) {
- // use directory path as prefix for completion of names of the contained files
- if (parentDir != null) {
- if (existingData.startsWith(".")) { // handle . & ..
- prefixToUse = parentDir.getPath();
- } else if (prependAbsolute) {
- prefixToUse = parentDir.getAbsolutePath();
- }
- }
- // add File.separator in the end
- if (!prefixToUse.endsWith(File.separator)
- && (prependAbsolute || existingData.startsWith("."))) {
- prefixToUse += File.separator;
- }
- for (int i = 0; i < completionValues.length; i++) {
- completions.add(new Completion(prefixToUse + completionValues[i]));
- }
+ // if currentFile is not a dir, convert currentFile to it's parent dir
+ if (!currentFile.isDirectory()) {
+ currentFile = currentFile.getParentFile();
+ // a file needs to be in a directory, if the file's parent is null, that means user
+ // typed a filename without "./" prefix, but meant to find the file in the current dir.
+ if (currentFile == null) {
+ currentFile = new File("./");
+ path = null;
+ } else {
+ path = currentFile.getPath();
}
}
- return !completions.isEmpty();
+ // at this point, currentFile should be a directory, we need to return all the files
+ // under this directory
+ String prefix;
+ if (path == null) {
+ prefix = "";
+ } else {
+ prefix = path.endsWith(File.separator) ? path : path + File.separator;
+ }
+ return Arrays.stream(currentFile.list()).map(s -> prefix + s).collect(Collectors.toList());
}
- class FileNameFilterImpl implements FilenameFilter {
- private File parentDirectory;
- private String userInput;
-
- public FileNameFilterImpl(File parentDirectory, String userInput) {
- this.parentDirectory = parentDirectory;
- this.userInput = userInput;
+ @Override
+ public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
+ String existingData, String optionContext, MethodTarget target) {
+ if (StringUtils.isBlank(existingData)) {
+ getRoots().stream().forEach(path -> completions.add(new Completion(path)));
+ return !completions.isEmpty();
}
- @Override
- public boolean accept(File dir, String name) {
- return parentDirectory.equals(dir) && name.startsWith(userInput);
- }
+ getSiblings(existingData).stream().filter(string -> string.startsWith(existingData))
+ .forEach(path -> {
+ completions.add(new Completion(path));
+ });
+
+ return !completions.isEmpty();
}
}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HelpConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HelpConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HelpConverter.java
new file mode 100644
index 0000000..88fd758
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HelpConverter.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF 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.apache.geode.management.internal.cli.converters;
+
+import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.internal.cli.CommandManager;
+import org.apache.geode.management.internal.cli.CommandManagerAware;
+import org.apache.geode.management.internal.cli.commands.GfshHelpCommands;
+import org.springframework.shell.core.Completion;
+import org.springframework.shell.core.Converter;
+import org.springframework.shell.core.MethodTarget;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * {@link Converter} for {@link GfshHelpCommands#obtainHelp(String)}
+ *
+ *
+ * @since GemFire 7.0
+ */
+public class HelpConverter implements Converter<String>, CommandManagerAware {
+
+ private CommandManager commandManager;
+
+ @Override
+ public String convertFromText(String existingData, Class<?> dataType, String optionContext) {
+ return existingData;
+ }
+
+ @Override
+ public boolean getAllPossibleValues(List<Completion> completionCandidates, Class<?> dataType,
+ String existingData, String optionContext, MethodTarget arg4) {
+ Set<String> commandNames = commandManager.getHelper().getCommands();
+ for (String string : commandNames) {
+ completionCandidates.add(new Completion(string));
+ }
+
+ if (completionCandidates.size() > 0) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean supports(Class<?> arg0, String optionContext) {
+ if (String.class.isAssignableFrom(arg0) && optionContext.contains(ConverterHint.HELP)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void setCommandManager(CommandManager commandManager) {
+ this.commandManager = commandManager;
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HintTopicConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HintTopicConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HintTopicConverter.java
new file mode 100644
index 0000000..17667ca
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/HintTopicConverter.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF 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.apache.geode.management.internal.cli.converters;
+
+import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.internal.cli.CommandManager;
+import org.apache.geode.management.internal.cli.CommandManagerAware;
+import org.apache.geode.management.internal.cli.help.Helper;
+import org.springframework.shell.core.Completion;
+import org.springframework.shell.core.Converter;
+import org.springframework.shell.core.MethodTarget;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ *
+ * @since GemFire 7.0
+ */
+public class HintTopicConverter implements Converter<String>, CommandManagerAware {
+
+ private CommandManager commandManager;
+
+ @Override
+ public boolean supports(Class<?> type, String optionContext) {
+ return String.class.equals(type) && optionContext.contains(ConverterHint.HINT);
+ }
+
+ @Override
+ public String convertFromText(String value, Class<?> targetType, String optionContext) {
+ return value;
+ }
+
+ @Override
+ public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
+ String existingData, String optionContext, MethodTarget target) {
+ Helper helper = commandManager.getHelper();
+ Set<String> topicNames = helper.getTopicNames();
+
+ for (String topicName : topicNames) {
+ if (existingData != null && !existingData.isEmpty()) {
+ if (topicName.startsWith(existingData)) { // match exact case
+ completions.add(new Completion(topicName));
+ } else if (topicName.toLowerCase().startsWith(existingData.toLowerCase())) { // match
+ // case
+ // insensitive
+ String completionStr = existingData + topicName.substring(existingData.length());
+
+ completions.add(new Completion(completionStr));
+ }
+ } else {
+ completions.add(new Completion(topicName));
+ }
+ }
+
+ return !completions.isEmpty();
+ }
+
+ @Override
+ public void setCommandManager(CommandManager commandManager) {
+ this.commandManager = commandManager;
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/RegionPathConverter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/RegionPathConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/RegionPathConverter.java
index 3d96088..a992ddb 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/RegionPathConverter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/RegionPathConverter.java
@@ -14,18 +14,17 @@
*/
package org.apache.geode.management.internal.cli.converters;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
import org.apache.geode.management.cli.ConverterHint;
import org.apache.geode.management.internal.cli.shell.Gfsh;
-
import org.springframework.shell.core.Completion;
import org.springframework.shell.core.Converter;
import org.springframework.shell.core.MethodTarget;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
/**
*
* @since GemFire 7.0
@@ -36,7 +35,7 @@ public class RegionPathConverter implements Converter<String> {
@Override
public boolean supports(Class<?> type, String optionContext) {
- return String.class.equals(type) && ConverterHint.REGIONPATH.equals(optionContext);
+ return String.class.equals(type) && optionContext.contains(ConverterHint.REGION_PATH);
}
@Override
@@ -47,38 +46,35 @@ public class RegionPathConverter implements Converter<String> {
@Override
public boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
String existingData, String optionContext, MethodTarget target) {
- if (String.class.equals(targetType) && ConverterHint.REGIONPATH.equals(optionContext)) {
- Set<String> regionPathSet = getAllRegionPaths();
- Gfsh gfsh = Gfsh.getCurrentInstance();
- String currentContextPath = "";
- if (gfsh != null) {
- currentContextPath = gfsh.getEnvProperty(Gfsh.ENV_APP_CONTEXT_PATH);
- if (currentContextPath != null
- && !org.apache.geode.management.internal.cli.converters.RegionPathConverter.DEFAULT_APP_CONTEXT_PATH
- .equals(currentContextPath)) {
- regionPathSet.remove(currentContextPath);
- regionPathSet.add(
- org.apache.geode.management.internal.cli.converters.RegionPathConverter.DEFAULT_APP_CONTEXT_PATH);
- }
+ Set<String> regionPathSet = getAllRegionPaths();
+ Gfsh gfsh = Gfsh.getCurrentInstance();
+ String currentContextPath = "";
+ if (gfsh != null) {
+ currentContextPath = gfsh.getEnvProperty(Gfsh.ENV_APP_CONTEXT_PATH);
+ if (currentContextPath != null
+ && !org.apache.geode.management.internal.cli.converters.RegionPathConverter.DEFAULT_APP_CONTEXT_PATH
+ .equals(currentContextPath)) {
+ regionPathSet.remove(currentContextPath);
+ regionPathSet.add(
+ org.apache.geode.management.internal.cli.converters.RegionPathConverter.DEFAULT_APP_CONTEXT_PATH);
}
+ }
- for (String regionPath : regionPathSet) {
- if (existingData != null) {
- if (regionPath.startsWith(existingData)) {
- completions.add(new Completion(regionPath));
- }
- } else {
+ for (String regionPath : regionPathSet) {
+ if (existingData != null) {
+ if (regionPath.startsWith(existingData)) {
completions.add(new Completion(regionPath));
}
+ } else {
+ completions.add(new Completion(regionPath));
}
}
return !completions.isEmpty();
}
- Set<String> getAllRegionPaths() {
+ public Set<String> getAllRegionPaths() {
Set<String> regionPathSet = Collections.emptySet();
-
Gfsh gfsh = Gfsh.getCurrentInstance();
if (gfsh != null && gfsh.isConnectedAndReady()) {
String[] regionPaths =
http://git-wip-us.apache.org/repos/asf/geode/blob/2a272acc/geode-core/src/main/java/org/apache/geode/management/internal/cli/help/Helper.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/help/Helper.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/help/Helper.java
index fe2dc7d..9dbf59c 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/help/Helper.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/help/Helper.java
@@ -59,6 +59,8 @@ public class Helper {
static final String VALUE_FIELD = "value";
static final String TRUE_TOKEN = "true";
static final String FALSE_TOKEN = "false";
+ static final String AVAILABLE = "Available";
+ static final String NOT_AVAILABLE = "Not Available";
private final Map<String, Topic> topics = new HashMap<>();
private final Map<String, Method> commands = new TreeMap<String, Method>();
@@ -123,12 +125,23 @@ public class Helper {
});
}
+ /**
+ * get help string for a specific command, or a brief description of all the commands if buffer is
+ * null or empty
+ */
public String getHelp(String buffer, int terminalWidth) {
+ if (StringUtils.isBlank(buffer)) {
+ return getHelp().toString(terminalWidth);
+ }
+
Method method = commands.get(buffer);
if (method == null) {
return "no help exists for this command.";
}
- return getHelp(method).toString(terminalWidth);
+
+ HelpBlock helpBlock = getHelp(method.getDeclaredAnnotation(CliCommand.class),
+ method.getParameterAnnotations(), method.getParameterTypes());
+ return helpBlock.toString(terminalWidth);
}
public String getHint(String buffer) {
@@ -157,13 +170,45 @@ public class Helper {
return builder.toString();
}
- private HelpBlock getHelp(Method method) {
- return getHelp(method.getDeclaredAnnotation(CliCommand.class), method.getParameterAnnotations(),
- method.getParameterTypes());
+ public Set<String> getTopicNames() {
+ return topics.keySet();
+ }
+
+ boolean isAvailable(String command) {
+ MethodTarget target = availabilityIndicators.get(command);
+ if (target == null) {
+ return true;
+ }
+ try {
+ return (Boolean) target.getMethod().invoke(target.getTarget());
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ HelpBlock getHelp() {
+ HelpBlock root = new HelpBlock();
+ commands.keySet().stream().sorted().map(commands::get).forEach(method -> {
+ root.addChild(getHelp(method.getDeclaredAnnotation(CliCommand.class), null, null));
+ });
+ return root;
}
+ /**
+ * returns a short description and help string of the command if annotations is null or returns a
+ * details description of the command with the syntax and parameter description
+ */
HelpBlock getHelp(CliCommand cliCommand, Annotation[][] annotations, Class<?>[] parameterTypes) {
String commandName = cliCommand.value()[0];
+ boolean isAvailable = isAvailable(commandName);
+
+ if (annotations == null && parameterTypes == null) {
+ String available = isAvailable ? AVAILABLE : NOT_AVAILABLE;
+ HelpBlock help = new HelpBlock(commandName + " (" + available + ")");
+ help.addChild(new HelpBlock(cliCommand.help()));
+ return help;
+ }
+
HelpBlock root = new HelpBlock();
// First we will have the block for NAME of the command
HelpBlock name = new HelpBlock(NAME_NAME);
@@ -172,15 +217,7 @@ public class Helper {
// add the availability flag
HelpBlock availability = new HelpBlock(IS_AVAILABLE_NAME);
- boolean available = true;
- MethodTarget target = availabilityIndicators.get(commandName);
- if (target != null) {
- try {
- available = (Boolean) target.getMethod().invoke(target.getTarget());
- } catch (Exception e) {
- }
- }
- availability.addChild(new HelpBlock(available + ""));
+ availability.addChild(new HelpBlock(isAvailable + ""));
root.addChild(availability);
// Now add synonyms if any