/*
 * 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.i18n;

import static org.apache.geode.distributed.ConfigurationProperties.ARCHIVE_DISK_SPACE_LIMIT;
import static org.apache.geode.distributed.ConfigurationProperties.ARCHIVE_FILE_SIZE_LIMIT;
import static org.apache.geode.distributed.ConfigurationProperties.CACHE_XML_FILE;
import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_ID;
import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_TIME_STATISTICS;
import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
import static org.apache.geode.distributed.ConfigurationProperties.LOG_DISK_SPACE_LIMIT;
import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE_SIZE_LIMIT;
import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
import static org.apache.geode.distributed.ConfigurationProperties.MCAST_ADDRESS;
import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
import static org.apache.geode.distributed.ConfigurationProperties.MEMCACHED_BIND_ADDRESS;
import static org.apache.geode.distributed.ConfigurationProperties.MEMCACHED_PORT;
import static org.apache.geode.distributed.ConfigurationProperties.MEMCACHED_PROTOCOL;
import static org.apache.geode.distributed.ConfigurationProperties.SERVER_BIND_ADDRESS;
import static org.apache.geode.distributed.ConfigurationProperties.SOCKET_BUFFER_SIZE;
import static org.apache.geode.distributed.ConfigurationProperties.STATISTIC_ARCHIVE_FILE;
import static org.apache.geode.distributed.ConfigurationProperties.STATISTIC_SAMPLE_RATE;
import static org.apache.geode.distributed.ConfigurationProperties.USE_CLUSTER_CONFIGURATION;

import java.text.MessageFormat;

import org.apache.geode.cache.PartitionAttributesFactory;
import org.apache.geode.cache.server.CacheServer;
import org.apache.geode.distributed.ConfigurationProperties;
import org.apache.geode.distributed.internal.DistributionConfig;
import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
import org.apache.geode.internal.cache.xmlcache.CacheXml;

/**
 * - * Contains 'String' constants used as key to the Localized strings to be used in classes under
 * <code>org.apache.geode.management.internal.cli</code> for Command Line Interface (CLI). NOTES: 1.
 * CONVENTIONS: Defining constants for Command Name, option, argument, help: 1.1 Command Name:
 * Command name in BOLD. Multiple words separated by single underscore ('_') E.g. COMPACT_DISK_STORE
 * 1.2 Command Help Text: Command name in BOLD followed by double underscore ('__') followed by HELP
 * in BOLD. E.g.COMPACT_DISK_STORE__HELP 1.3 Command Option: Command name in BOLD followed by double
 * underscore ('__') followed by option name in BOLD - multiple words concatenated by removing
 * space. E.g. for option "--disk-dirs" - COMPACT_DISK_STORE__DISKDIRS 1.4 Command Option Help: As
 * mentioned in 1.3, followed by double underscore ('__') followed by HELP in BOLD. E.g.
 * COMPACT_DISK_STORE__DISKDIRS__HELP 1.5 Info/Error Message used in a command: Command name in BOLD
 * followed by double underscore ('__') followed by MSG in BOLD followed by brief name for the
 * message (Similar to used in LocalizedStrings). E.g.
 * COMPACT_DISK_STORE__MSG__ERROR_WHILE_COMPACTING = "Error occurred while compacting disk store."
 * 1.6 Parameterized messages are supposed to be handled by users. It's recommended to use the same
 * conventions as used in LocalizedStrings. E.g. COMPACT_DISK_STORE__MSG__ERROR_WHILE_COMPACTING__0
 * = "Error occurred while compacting disk store {0}."
 *
 * 2. Defining Topic constants: 2.1 The constants' names should begin with "TOPIC_" E.g.
 * TOPIC_GEODE_REGION 2.2 Topic brief description should be defined with suffix "__DESC". E.g.
 * TOPIC_GEODE_REGION__DESC
 *
 * 3. Order for adding constants: It should be alphabetically sorted at least on the first name
 * within the current group
 *
 * @since GemFire 7.0
 */
public class CliStrings {

  public static final String GROUP = "group";
  public static final String GROUPS = "groups";
  public static final String MEMBER = "member";
  public static final String MEMBERS = "members";
  public static final String IFEXISTS = "if-exists";
  public static final String IFNOTEXISTS = "if-not-exists";
  public static final String JAR = "jar";
  public static final String JARS = "jars";

  public static final String NULL = "null";

  public static final String IFEXISTS_HELP =
      "If true, the command will be a no-op if the entity does not exist.";
  public static final String IFNOTEXISTS_HELP =
      "If true, the command will be a no-op if the entity does exist.";
  public static final String ENTRY_IDLE_TIME_CUSTOM_EXPIRY = "entry-idle-time-custom-expiry";
  public static final String ENTRY_TTL_CUSTOM_EXPIRY = "entry-time-to-live-custom-expiry";
  public static final String ENTRY_IDLE_TIME_CUSTOM_EXPIRY_HELP =
      "The name of the class implementing CustomExpiry for entry idle time. Append json string for initialization properties.";
  public static final String ENTRY_TTL_CUSTOM_EXPIRY_HELP =
      "The name of the class implementing CustomExpiry for entry time to live. Append json string for initialization properties.";
  private static final String LOG_LEVEL_VALUES =
      "Possible values for log-level include: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF.";

  /*-*************************************************************************
   *************                  T O P I C S                  ***************
   ***************************************************************************/
  public static final String DEFAULT_TOPIC_GEODE = "Geode";
  public static final String DEFAULT_TOPIC_GEODE__DESC =
      "Apache Geode is a distributed data management platform providing dynamic scalability, high performance and database-like persistence.";
  public static final String TOPIC_GEODE_REGION = "Region";
  public static final String TOPIC_GEODE_REGION__DESC =
      "A region is the core building block of the Apache Geode distributed system. Cached data is organized into regions and all data puts, gets, and querying activities are done against them.";
  public static final String TOPIC_GEODE_WAN = "WAN";
  public static final String TOPIC_GEODE_WAN__DESC =
      "For multiple data centers in remote locations, Geode provides a WAN gateway to facilitate data sharing. The WAN gateway connects two or more remote sites and then sends asynchronous, batched updates as data is changed.";
  public static final String TOPIC_GEODE_JMX = "JMX";
  public static final String TOPIC_GEODE_JMX__DESC =
      "JMX technology provides the tools for building distributed, Web-based, modular and dynamic solutions for managing and monitoring devices, applications, and service-driven networks.";
  public static final String TOPIC_GEODE_DISKSTORE = "Disk Store";
  public static final String TOPIC_GEODE_DISKSTORE__DESC =
      "Disk stores are used to persist data to disk as a backup to your in-memory copy or as overflow storage when memory use is too high.";
  public static final String TOPIC_GEODE_LOCATOR = "Locator";
  public static final String TOPIC_GEODE_LOCATOR__DESC =
      "JVMs running Geode discover each other through a TCP service named the locator.";
  public static final String TOPIC_GEODE_SERVER = "Server";
  public static final String TOPIC_GEODE_SERVER__DESC =
      "A server is Geode cluster member which holds a Geode cache. Depending on the topology used it can refer to either a system that responds to client requests or a system that is only a peer to other members.";
  public static final String TOPIC_GEODE_MANAGER = "Manager";
  public static final String TOPIC_GEODE_MANAGER__DESC =
      "The Manager is a member which has the additional role of a managing & monitoring the Geode distributed system.";
  public static final String TOPIC_GEODE_STATISTICS = "Statistics";
  public static final String TOPIC_GEODE_STATISTICS__DESC =
      "iEvery application and server in a Apache Geode distributed system can be configured to perform statistical data collection for analysis.";
  public static final String TOPIC_GEODE_LIFECYCLE = "Lifecycle";
  public static final String TOPIC_GEODE_LIFECYCLE__DESC =
      "Launching, execution and termination of Geode cluster members such as servers and locators.";
  public static final String TOPIC_GEODE_M_AND_M = "Management-Monitoring";
  public static final String TOPIC_GEODE_M_AND_M__DESC =
      "The management of and monitoring of Geode systems using Geode tools, such as Apache Geode Pulse or Data Browser, and JConsole, which is provided with the JDK(TM)";
  public static final String TOPIC_GEODE_DATA = "Data";
  public static final String TOPIC_GEODE_DATA__DESC =
      "User data as stored in regions of the Geode distributed system.";
  public static final String TOPIC_GEODE_CONFIG = "Configuration";
  public static final String TOPIC_GEODE_CONFIG__DESC =
      "Configuration of Apache Geode Cache & Servers/Locators hosting the Cache.";
  public static final String TOPIC_GEODE_FUNCTION = "Function Execution";
  public static final String TOPIC_GEODE_FUNCTION__DESC =
      "The function execution service provides solutions for these application use cases: \n\tAn application that executes a server-side transaction or carries out data updates using the Geode distributed locking service. \n\tAn application that needs to initialize some of its components once on each server, which might be used later by executed functions. Initialization and startup of a third-party service, such as a messaging service. \n\tAny arbitrary aggregation operation that requires iteration over local data sets that can be done more efficiently through a single call to the cache server. \n\tAny kind of external resource provisioning that can be done by executing a function on a server.";
  public static final String TOPIC_GEODE_HELP = "Help";
  public static final String TOPIC_GEODE_HELP__DESC =
      "Provides usage information for gfsh & its commands.";
  public static final String TOPIC_GEODE_DEBUG_UTIL = "Debug-Utility";
  public static final String TOPIC_GEODE_DEBUG_UTIL__DESC =
      "Debugging aids & utilities to use with Apache Geode.";
  public static final String TOPIC_GFSH = "GFSH";
  public static final String TOPIC_GFSH__DESC = "The Geode Shell";
  public static final String TOPIC_SHARED_CONFIGURATION = "Cluster Configuration";
  public static final String TOPIC_SHARED_CONFIGURATION_HELP =
      "Configuration for cluster and various groups. It consists of cache.xml, geode properties and deployed jars.\nChanges due to gfsh command are persisted to the locator hosting the cluster configuration service.";
  public static final String TOPIC_LOGS = "Logs";
  public static final String TOPIC_LOGS__DESC = "Generate log contents as per the need";
  public static final String TOPIC_CLIENT = "Client";
  public static final String TOPIC_CLIENT__DESC = "Client status";

  /*-*************************************************************************
   * ********* String Constants other than command name, options & help ******
   * *************************************************************************/

  public static final String DESKTOP_APP_RUN_ERROR_MESSAGE =
      "Running desktop applications is not supported on %1$s.";
  public static final String GEODE_HOME_NOT_FOUND_ERROR_MESSAGE =
      "The GEODE environment variable was not defined.  Please set the GEODE environment variable to the directory where GEODE is installed.";
  public static final String JAVA_HOME_NOT_FOUND_ERROR_MESSAGE =
      "Unable to locate the Java executables and dependencies.  Please set the JAVA_HOME environment variable.";
  public static final String CACHE_XML_NOT_FOUND_MESSAGE =
      "Warning: The Geode cache XML file {0} could not be found.";
  public static final String CLUSTER_CONFIG_PRECEDENCE_OVER_CACHE_XML_WARN =
      "NOTE: If cluster configuration is enabled, then those settings will take precedence over: ";
  public static final String GEODE_0_PROPERTIES_1_NOT_FOUND_MESSAGE =
      "Warning: The Geode {0}properties file {1} could not be found.";
  public static final String MEMBER_NOT_FOUND_ERROR_MESSAGE =
      "Member {0} could not be found.  Please verify the member name or ID and try again.";
  public static final String NO_MEMBERS_IN_GROUP_ERROR_MESSAGE =
      "No caching members for group {0} could be found.  Please verify the group and try again.";
  public static final String NO_MEMBERS_FOUND_MESSAGE = "No Members Found";
  public static final String NO_CACHING_MEMBERS_FOUND_MESSAGE = "No caching members found.";
  public static final String COMMAND_FAILURE_MESSAGE = "Error occurred while executing : {0}";
  public static final String EXCEPTION_CLASS_AND_MESSAGE = "Exception : {0} , Message : {1}";
  public static final String GROUP_EMPTY_ERROR_MESSAGE = "No members found in group : {0}";
  public static final String REGION_NOT_FOUND = "Region : {0} not found";
  public static final String INVALID_REGION_NAME = "Invalid region name";
  public static final String INVALID_FILE_EXTENSION =
      "Invalid file type, the file extension must be \"{0}\"";
  public static final String GEODE_DATA_FILE_EXTENSION = ".gfd";
  public static final String LOCATOR_HEADER = "Locator";
  public static final String LOCATOR_TERM_NAME = "Locator";
  public static final String ERROR__MSG__HEADER = "Error";
  public static final String ZIP_FILE_EXTENSION = ".zip";
  // This should be thrown for FunctionInvocationTargetException
  public static final String COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN =
      "Could not execute \" {0} \", please try again ";
  public static final String UNEXPECTED_RETURN_TYPE_EXECUTING_COMMAND_ERROR_MESSAGE =
      "Received an unexpected return type ({0}) while executing command {1}.";
  public static final String PROVIDE_ATLEAST_ONE_OPTION =
      "\"{0}\" requires that one or more parameters be provided.";
  public static final String STATUS_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE =
      "Gfsh must be connected in order to get the status of a {0} by member name or ID.";
  public static final String STOP_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE =
      "Gfsh must be connected in order to stop a {0} by member name or ID.";
  public static final String PROVIDE_EITHER_MEMBER_OR_GROUP_MESSAGE =
      "Please provide either \"member\" or \"group\" option.";
  public static final String GFSH_MUST_BE_CONNECTED_FOR_LAUNCHING_0 =
      "Gfsh must be connected for launching {0}";
  public static final String GFSH_MUST_BE_CONNECTED_VIA_JMX_FOR_LAUNCHING_0 =
      "Gfsh must be connected via JMX for launching {0}";
  public static final String ATTACH_API_IN_0_NOT_FOUND_ERROR_MESSAGE =
      "The JDK {0} is required by 'start', 'status' and 'stop' commands for Locators and Servers. Please set JAVA_HOME to the JDK Directory or add the JDK {0} to the classpath, restart Gfsh and try again.";
  public static final String ASYNC_PROCESS_LAUNCH_MESSAGE =
      "Broken out of wait... the %1$s process will continue to startup in the background.%n";
  public static final String NO_NON_LOCATOR_MEMBERS_FOUND = "No non-locator members found.";
  public static final String NO_CLIENT_FOUND = "No client found on this server";
  public static final String NO_CLIENT_FOUND_WITH_CLIENT_ID =
      "No client found with client-id : {0}";
  public static final String ACTION_SUCCEEDED_ON_MEMBER = "{0} on following members.";
  public static final String OCCURRED_ON_MEMBERS = "Occurred on members";
  public static final String SHARED_CONFIGURATION_NOT_STARTED =
      "Cluster configuration service is enabled but has not started yet.";
  public static final String SHARED_CONFIGURATION_NO_LOCATORS_WITH_SHARED_CONFIGURATION =
      "No locators with cluster configuration enabled.";
  public static final String SHARED_CONFIGURATION_FAILED_TO_PERSIST_COMMAND_CHANGES =
      "This change is not persisted in the cluster configuration, either because the cluster configuration service is not running or the command is operating on targeted members.";
  /* Other Constants */
  public static final String GFSH__MSG__NO_LONGER_CONNECTED_TO_0 = "No longer connected to {0}.";
  public static final String GFSHPARSER__MSG__REQUIRED_ARGUMENT_0 = "Required Argument: \"{0}\"";
  public static final String GFSHPARSER__MSG__VALUE_REQUIRED_FOR_OPTION_0 =
      "Value is required for parameter \"{0}\"";
  public static final String GFSHPARSER__MSG__AMBIGUOUS_COMMAND_0_FOR_ASSISTANCE_USE_1_OR_HINT_HELP =
      "Ambiguous command \"{0}\" (for assistance press \"{1}\" or type \"hint\" or \"help <command name>\" & then hit ENTER)";
  public static final String GFSHPARSER__MSG__COMMAND_ARGUMENT_0_IS_REQUIRED_USE_HELP =
      "Command parameter \"{0}\" is required. Use \"help <command name>\" for assistance.";
  public static final String GFSHPARSER__MSG__COMMAND_OPTION_0_IS_REQUIRED_USE_HELP =
      "Parameter \"{0}\" is required. Use \"help <command name>\" for assistance.";
  public static final String GFSHPARSER__MSG__VALUE_0_IS_NOT_APPLICABLE_FOR_1 =
      "Value \"{0}\" is not applicable for \"{1}\".";
  public static final String GFSHPARSER__MSG__INVALID_COMMAND_STRING_0 =
      "Invalid command String: {0}";
  public static final String GFSHPARSER__MSG__COMMAND_0_IS_NOT_VALID =
      "Command \"{0}\" is not valid.";
  public static final String GFSHPARSER__MSG__NO_MATCHING_COMMAND = "No matching command";
  public static final String GFSHPARSER__MSG__USE_0_HELP_COMMAND_TODISPLAY_DETAILS =
      "Use {0}help <command name> to display detailed usage information for a specific command.";
  public static final String GFSHPARSER__MSG__HELP_CAN_ALSO_BE_OBTAINED_BY_0_KEY =
      "Help with command and parameter completion can also be obtained by entering all or a portion of either followed by the \"{0}\" key.";
  public static final String GFSHPARSER__MSG__0_IS_NOT_AVAILABLE_REASON_1 =
      "\"{0}\" is not available. Reason: {1}";
  public static final String GFSHPARSER__MSG__OTHER_COMMANDS_STARTING_WITH_0_ARE =
      "Other commands starting with \"{0}\" are: ";

  public static final String ABSTRACTRESULTDATA__MSG__FILE_WITH_NAME_0_EXISTS_IN_1 =
      "File with name \"{0}\" already exists in \"{1}\".";
  public static final String ABSTRACTRESULTDATA__MSG__PARENT_DIRECTORY_OF_0_DOES_NOT_EXIST =
      "Parent directory of \"{0}\" does not exist.";
  public static final String ABSTRACTRESULTDATA__MSG__PARENT_DIRECTORY_OF_0_IS_NOT_WRITABLE =
      "Parent directory of \"{0}\" is not writable.";
  public static final String ABSTRACTRESULTDATA__MSG__PARENT_OF_0_IS_NOT_DIRECTORY =
      "Parent of \"{0}\" is not a directory.";

  public static final String AVAILABILITYTARGET_MSG_DEFAULT_UNAVAILABILITY_DESCRIPTION =
      "Requires connection.";

  public static final String LAUNCHERLIFECYCLECOMMANDS__MSG__FAILED_TO_START_0_REASON_1 =
      "Failed to start {0}. Reason: {1}";

  public static final String GFSH__PLEASE_CHECK_LOGS_AT_0 = "Please check logs {0}";

  public static final String STACK_TRACE_FOR_MEMBER = "*** Stack-trace for member ";

  /*-**************************************************************************
   * *********** COMMAND NAME, OPTION, ARGUMENT, HELP, MESSAGES ****************
   * **************************************************************************/
  /* 'alter disk-store' command */
  public static final String ALTER_DISK_STORE = "alter disk-store";
  public static final String ALTER_DISK_STORE__HELP =
      "Alter some options for a region or remove a region in an offline disk store.";
  public static final String ALTER_DISK_STORE__DISKSTORENAME = "name";
  public static final String ALTER_DISK_STORE__DISKSTORENAME__HELP =
      "Name of the disk store whose contents will be altered.";
  public static final String ALTER_DISK_STORE__REGIONNAME = "region";
  public static final String ALTER_DISK_STORE__REGIONNAME__HELP =
      "Name/Path of the region in the disk store to alter.";
  public static final String ALTER_DISK_STORE__DISKDIRS = "disk-dirs";
  public static final String ALTER_DISK_STORE__DISKDIRS__HELP =
      "Directories where data for the disk store was previously written.";
  public static final String ALTER_DISK_STORE__LRU__EVICTION__ALGORITHM = "lru-algorithm";
  public static final String ALTER_DISK_STORE__LRU__EVICTION__ALGORITHM__HELP =
      "Least recently used eviction algorithm.  Valid values are: none, lru-entry-count, lru-heap-percentage and lru-memory-size.";
  public static final String ALTER_DISK_STORE__LRU__EVICTION__ACTION = "lru-action";
  public static final String ALTER_DISK_STORE__LRU__EVICTION__ACTION__HELP =
      "Action to take when evicting entries from the region. Valid values are: none, overflow-to-disk and local-destroy.";
  public static final String ALTER_DISK_STORE__LRU__EVICTION__LIMIT = "lru-limit";
  public static final String ALTER_DISK_STORE__LRU__EVICTION__LIMIT__HELP =
      "Number of entries allowed in the region before eviction will occur.";
  public static final String ALTER_DISK_STORE__CONCURRENCY__LEVEL = "concurrency-level";
  public static final String ALTER_DISK_STORE__CONCURRENCY__LEVEL__HELP =
      "An estimate of the maximum number of application threads that will concurrently modify a region at one time. This attribute does not apply to partitioned regions.";
  public static final String ALTER_DISK_STORE__INITIAL__CAPACITY = "initial-capacity";
  public static final String ALTER_DISK_STORE__INITIAL__CAPACITY__HELP =
      "Together with --load-factor, sets the parameters on the underlying java.util.ConcurrentHashMap used for storing region entries.";
  public static final String ALTER_DISK_STORE__LOAD__FACTOR = "load-factor";
  public static final String ALTER_DISK_STORE__LOAD__FACTOR__HELP =
      "Together with --initial-capacity, sets the parameters on the underlying java.util.ConcurrentHashMap used for storing region entries. This must be a floating point number between 0 and 1, inclusive.";
  public static final String ALTER_DISK_STORE__COMPRESSOR = "compressor";
  public static final String ALTER_DISK_STORE__COMPRESSOR__HELP =
      "The fully-qualified class name of the Compressor to use when compressing region entry values. A value of 'none' will remove the Compressor.";
  public static final String ALTER_DISK_STORE__STATISTICS__ENABLED = "enable-statistics";
  public static final String ALTER_DISK_STORE__STATISTICS__ENABLED__HELP =
      "Whether to enable statistics. Valid values are: true and false.";
  public static final String ALTER_DISK_STORE__OFF_HEAP = "off-heap";
  public static final String ALTER_DISK_STORE__OFF_HEAP__HELP =
      "Whether to use off-heap memory for the region. Valid values are: true and false.";
  public static final String ALTER_DISK_STORE__REMOVE = "remove";
  public static final String ALTER_DISK_STORE__REMOVE__HELP =
      "Whether to remove the region from the disk store.";

  /* alter gateway-sender */
  public static final String ALTER_GATEWAYSENDER = "alter gateway-sender";
  public static final String ALTER_GATEWAYSENDER__HELP =
      "Alter some options for the Gateway Sender on a member or members.";
  public static final String ALTER_GATEWAYSENDER__ID = "id";
  public static final String ALTER_GATEWAYSENDER__ID__HELP = "ID of the gateway sender.";

  public static final String ALTER_GATEWAYSENDER__GROUP__HELP =
      "Group(s) of members on which to alter the gateway sender option.";
  public static final String ALTER_GATEWAYSENDER__MEMBER__HELP =
      "Name/Id of the member on which to alter the gateway sender option.";

  public static final String ALTER_GATEWAYSENDER__ALERTTHRESHOLD = "alert-threshold";
  public static final String ALTER_GATEWAYSENDER__ALERTTHRESHOLD__HELP =
      "The alert threshold for entries in a gateway sender's queue.";

  public static final String ALTER_GATEWAYSENDER__BATCHSIZE = "batch-size";
  public static final String ALTER_GATEWAYSENDER__BATCHSIZE__HELP =
      "The batch size for the gateway sender.";

  public static final String ALTER_GATEWAYSENDER__BATCHTIMEINTERVAL = "batch-time-interval";
  public static final String ALTER_GATEWAYSENDER__BATCHTIMEINTERVAL__HELP =
      "The batch time interval for the gateway sender.";

  public static final String ALTER_GATEWAYSENDER__GATEWAYEVENTFILTER = "gateway-event-filter";
  // Note: Spring Shell 2.x migration removed the 'specifiedDefaultValue' annotation parameter
  // that was previously used in Spring Shell 1.x. In Spring Shell 1.x, we could use
  // @CliOption(specifiedDefaultValue="") to detect when a user provided an option without a value
  // (e.g., --gateway-event-filter=). This allowed us to distinguish between "option not provided"
  // and "option provided with empty value" to clear filters. Spring Shell 2.x removed this feature
  // and strips the trailing '=' from options, making both "--gateway-event-filter" and
  // "--gateway-event-filter=" identical. To work around this limitation, we now require users to
  // explicitly use a special marker value "CLEAR" (case-insensitive) to remove all filters.
  public static final String ALTER_GATEWAYSENDER__GATEWAYEVENTFILTER__HELP =
      "The list of fully qualified class names of GatewayEventFilters (separated by commas) to be associated with the GatewaySender.\n"
          + "This serves as a callback for users to filter out events before dispatching to the remote distributed system.\n"
          + "E.g gateway-event-filter=com.user.filters.MyFilter1,com.user.filters.MyFilters2\n"
          + "Use 'CLEAR' (case-insensitive) to remove all existing filters. E.g gateway-event-filter=CLEAR";

  public static final String ALTER_GATEWAYSENDER__GROUPTRANSACTIONEVENTS =
      "group-transaction-events";
  public static final String ALTER_GATEWAYSENDER__GROUPTRANSACTIONEVENTS__HELP =
      "Ensure that all the events of a transaction are sent in the same batch, i.e., they are never spread across different batches.\n"
          + "Only allowed on serial gateway senders with 1 dispatcher thread or on parallel ones.\n"
          + "Note that in order to work for a transaction, the regions to which the transaction \n"
          + "events belong must be replicated by the same set of senders with this flag enabled.";

  public static final String ALTER_GATEWAYSENDER__RELEVANT__OPTION__MESSAGE =
      "Please provide a relevant parameter(s)";
  public static final String ALTER_GATEWAYSENDER__MSG__CAN_NOT_CREATE_DIFFERENT_VERSIONS =
      "Alter Gateway Sender cannot be performed until all members are the current version";


  /* 'alter region' command */
  public static final String ALTER_REGION = "alter region";
  public static final String ALTER_REGION__HELP =
      "Alter a region with the given path and configuration.";
  public static final String ALTER_REGION__REGION = "name";
  public static final String ALTER_REGION__REGION__HELP = "Name/Path of the region to be altered.";
  public static final String ALTER_REGION__GROUP__HELP =
      "Group(s) of members on which the region will be altered.";
  public static final String ALTER_REGION__ENTRYEXPIRATIONIDLETIME = "entry-idle-time-expiration";
  public static final String ALTER_REGION__ENTRYEXPIRATIONIDLETIME__HELP =
      "How long the region's entries can remain in the cache without being accessed. The default is no expiration of this type.";
  public static final String ALTER_REGION__ENTRYEXPIRATIONIDLETIMEACTION =
      "entry-idle-time-expiration-action";
  public static final String ALTER_REGION__ENTRYEXPIRATIONIDLETIMEACTION__HELP =
      "Action to be taken on an entry that has exceeded the idle expiration.";
  public static final String ALTER_REGION__ENTRYEXPIRATIONTIMETOLIVE =
      "entry-time-to-live-expiration";
  public static final String ALTER_REGION__ENTRYEXPIRATIONTIMETOLIVE__HELP =
      "How long the region's entries can remain in the cache without being accessed or updated. The default is no expiration of this type.";
  public static final String ALTER_REGION__ENTRYEXPIRATIONTTLACTION =
      "entry-time-to-live-expiration-action";
  public static final String ALTER_REGION__ENTRYEXPIRATIONTTLACTION__HELP =
      "Action to be taken on an entry that has exceeded the TTL expiration.";
  public static final String ALTER_REGION__REGIONEXPIRATIONIDLETIME = "region-idle-time-expiration";
  public static final String ALTER_REGION__REGIONEXPIRATIONIDLETIME__HELP =
      "How long the region can remain in the cache without being accessed. The default is no expiration of this type.";
  public static final String ALTER_REGION__REGIONEXPIRATIONIDLETIMEACTION =
      "region-idle-time-expiration-action";
  public static final String ALTER_REGION__REGIONEXPIRATIONIDLETIMEACTION__HELP =
      "Action to be taken on a region that has exceeded the idle expiration.";
  public static final String ALTER_REGION__REGIONEXPIRATIONTTL = "region-time-to-live-expiration";
  public static final String ALTER_REGION__REGIONEXPIRATIONTTL__HELP =
      "How long the region can remain in the cache without being accessed or updated. The default is no expiration of this type.";
  public static final String ALTER_REGION__REGIONEXPIRATIONTTLACTION =
      "region-time-to-live-expiration-action";
  public static final String ALTER_REGION__REGIONEXPIRATIONTTLACTION__HELP =
      "Action to be taken on a region that has exceeded the TTL expiration.";
  public static final String ALTER_REGION__CACHELISTENER = "cache-listener";
  public static final String ALTER_REGION__CACHELISTENER__HELP =
      "Fully qualified class name of a plug-in to be instantiated for receiving after-event notification of changes to the region and its entries. Any number of cache listeners can be configured.";
  public static final String ALTER_REGION__CACHELOADER = "cache-loader";
  public static final String ALTER_REGION__CACHELOADER__HELP =
      "Fully qualified class name of a plug-in to be instantiated for receiving notification of cache misses in the region. At most, one cache loader can be defined in each member for the region. For distributed regions, a cache loader may be invoked remotely from other members that have the region defined.";
  public static final String ALTER_REGION__CACHEWRITER = "cache-writer";
  public static final String ALTER_REGION__CACHEWRITER__HELP =
      "Fully qualified class name of a plug-in to be instantiated for receiving before-event notification of changes to the region and its entries. The plug-in may cancel the event. At most, one cache writer can be defined in each member for the region.";
  public static final String ALTER_REGION__ASYNCEVENTQUEUEID = "async-event-queue-id";
  public static final String ALTER_REGION__ASYNCEVENTQUEUEID__HELP =
      "IDs of the Async Event Queues that will be used for write-behind operations.";
  public static final String ALTER_REGION__GATEWAYSENDERID = "gateway-sender-id";
  public static final String ALTER_REGION__GATEWAYSENDERID__HELP =
      "IDs of the Gateway Senders to which data will be routed.";
  public static final String ALTER_REGION__CLONINGENABLED = "enable-cloning";
  public static final String ALTER_REGION__CLONINGENABLED__HELP =
      "Determines how fromDelta applies deltas to the local cache for delta propagation. When true, the updates are applied to a clone of the value and then the clone is saved to the cache. When false, the value is modified in place in the cache.";
  public static final String ALTER_REGION__EVICTIONMAX = "eviction-max";
  public static final String ALTER_REGION__EVICTIONMAX__HELP =
