#
# Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

cannotAddDuplicate={0} already exists: cannot add duplicate
noSuchAgent=Node Agent {0} does not exist.
noSystemConnector=Node Agent {0} does not have a system connector named {1}.
noSuchInstance=Server Instance {0} does not exist.
noSuchConfig=Configuration {0} does not exist.
noMkdir=Cannot create configuration specific directory {0}.
noAdminService=Configuration {0} referenced by Server Instance {1} contains no admin-service element.
noInstanceSystemConnector=Server Instance {0} does not have a system connector named {1}.
noDASAuthenticationProperty=DAS authentication properties do not exist for the system connector for {0}.
noSuchCluster=Cluster {0} does not exist.
noSuchNode=Node {0} does not exist.
noSuchClusterInstance=Cluster {0} contains Server Instance {1} which does not exist.
noSuchClusterConfig=Configuration {0} referenced by Cluster {1} does not exist.
noSuchAgentForInstance=Server Instance {0} references a Node Agent {1} which does not exist.
noSuchClusteredInstance=Server Instance {0} is not part of a cluster.
noAgentSystemConnector=Node Agent {0} does not have a system connector named {1}.
missingInstanceConnectorAuth=Could not find necessary client connection properties for Server Instance {0}.
missingAgentConnectorAuth=Could not find necessary client connection properties for Node Agent {0}.

noDASFound=Could not identify the Domain Administration Server

tooManyDASFound=Server Instance {0} and {1} have both been identified as the Domain Administration Server.

noSuchResource=Resource {0} does not exist
noSuchApplication=Application {0} does not exist

illegalName=The name is illegal.  Names are not allowed to have this String embedded in them: {0}
CorruptClusterConfig=The cluster [{0}] is in an inconsistent state.  Not all of the instances are referencing the mbean [{1}].  Here is the summary: {2}.
Cluster.no_default_config_found=No default config found, using config {0} as the default config for the cluster {1}
Server.cannotSpecifyBothConfigAndCluster=A configuration name and cluster name cannot both be specified.
Cluster.noDefaultConfig=Can''t find the default config (an element named \"default-config\") \
in domain.xml.  You may specify the name of an existing config element next time.
Server.HostNotFound=Unable to resolve the nodeagent-ref [{0}] to an IP address.
Server.LocalHostNotFound=Unable to resolve the local hostname.
Server.cannotHaveSameAdminPortAsDAS=Cannot create an instance on the same host as DAS with the same admin port as DAS: {0}.

Cluster.error_while_copying=Error while copying the default configuration {0}
Cluster.error_while_settingConfig=Error while setting config {0} on cluster {1} {2}
deleteConfigFailed=Unable to remove config {0}
deleteServerRefFailed=Unable to remove server-ref {0} from cluster {1}
Cluster.hasInstances=Cluster {0} contains server instances {1} and must not contain any instances
Cluster.obsoleteOptions=Obsolete options used.
cannot.execute.command=Cluster software is not installed.

# CRUD commands related strings.

create.cluster.command=Creates a new GlassFish cluster
create.cluster.command.name=The name for this new cluster
delete.cluster.command=Deletes an existing cluster

generic.config=The existing config name to be used by this cluster

config.duplicate.dir=Config {0} is trying to use the same directory as config {1}
config.copyConfigError=Error copying the config caused by {0}
config.mkdirs=error creating config specific directories

# validation messages
cluster.invalid.name=Invalid cluster name. The name must start with a letter, number or underscore and may contain only letters, numbers, and these characters: hyphen, period, underscore, and semicolon.
server.invalid.name=Invalid server name. The name must start with a letter, number or underscore and may contain only letters, numbers, and these characters: hyphen, period, underscore, and semicolon.
appref.invalid.name=Invalid application name. The name must start with a letter, number or underscore and may contain only letters, numbers, and these characters: hyphen, period, underscore, slash, colon, hash, and semicolon.
node.invalid.name=Invalid node name. Name must start with a letter or number and may contain only letters, numbers, and certain other characters.
config.invalid.name=Invalid config name. The name must start with a letter, number or underscore and may contain only letters, numbers, and these characters: hyphen, period, underscore, and semicolon.
nodehost.invalid.name=Invalid nodehost name. Name must start with a letter or number and may contain only letters, numbers, and certain other characters.
windowsdomain.invalid.name=Invalid windows domain name. Name must start with a letter or number and may contain only letters, numbers, and certain other characters.

config.duplicate.name= Config name provided is not unique in domain.  Please provide a unique config name.
cluster.duplicate.name= Cluster name provided is not unique in domain.  Please provide a unique cluster name.
server.duplicate.name= Server name provided is not unique in domain.  Please provide a unique server name.
node.duplicate.name=Node name provided is not unique in domain.  Please provide a unique node name.

cluster.reserved.name=Cluster name provided is a reserved word.  Please provide a cluster name that is not reserved.
config.reserved.name=Config name provided is a reserved word.  Please provide a config name that is not reserved.
node.reserved.name=Node name provided is a reserved word.  Please provide a node name that is not reserved.
server.reserved.name=Server name provided is a reserved word.  Please provide a server name that is not reserved.

port-pattern=must be between 1 and 65535, or reference a system property using the form ${SYSTEM_PROPERTY_NAME}
resourcepool.invalid.name.key=Invalid pool name. A pool name must start with a letter, number or underscore and may contain only letters, numbers and these special characters: hyphen, underscore, period, slash, semicolon, colon, hash. Pool name must not contain any spaces.
resourcename.invalid.character=resource name cannot contain ':' character

resource.invalid=Invalid pool name. Check whether the pool exists.
resourceref.invalid.poolname=Invalid pool name! Check whether the pool exists.


SecureAdminPrincipalResolver.configTypeNotNamed=Config type {0} must extend {1} but does not
SecureAdminPrincipalResolver.target_object_not_found=Cannot find a {0} with a name {1}
SecureAdmin.running.old.config=This server seems to be running with a configuration from an older release or a corrupted configuration. Please run the enable-secure-admin command as described in the release notes to update the secure admin configuration.

instanceCreationNotAllowed=Instance creation is disabled on node {0}. No new instances may be created on this node.
nodeCreationNotAllowed=Node creation is disabled. No new nodes may be created.

resourceref.invalid.configref=Invalid reference to config! Check whether the config exists.

invalid.time.period.specified=Invalid time period has been specified.Please specify as h, m or s. Eg: 1h , 60m 0r 3600s.

contextroot.duplicate=Virtual server already has an application loaded at this context path therefore this application cannot be loaded at this context path on this virtual server
