# 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.

OpenIDE-Module-Display-Category=Java Web and EE
OpenIDE-Module-Long-Description=\
    Plugin for servers based on the Payara Server codebase for the development of Java Web applications using Java Servlet-based technologies. \
    <p>For more information:<li> Payara Community: <a href="http://www.payara.fish/">http://www.payara.fish/</a></li> \
<li>Payara Server and production support: <a href="http://www.payara.fish/support">http://www.payara.fish/support</a> </li></p>
OpenIDE-Module-Name=Payara Jakarta EE

OpenIDE-Module-Short-Description=Payara Server support for Java EE / Jakarta EE projects.
TXT_FactoryDisplayName=Payara Server

MSG_START_SERVER_FAILED_FNF={0} Server can't start. The start jar was not found.
MSG_START_SERVER_FAILED_PD={0} Server start failed. Can't create start process.
MSG_START_SERVER_NOT_INITIALIZED= {0} Server is not initialized.
MSG_START_SERVER_IN_PROGRESS=Starting {0}
MSG_SERVER_STARTED={0} Server started
MSG_START_SERVER_FAILED={0} Start Failed

MSG_STOP_SERVER_FAILED_FNF={0} Server can not stop. 
MSG_STOP_SERVER_FAILED_PD={0} Server stop failed. Can't create stop process.
MSG_STOP_SERVER_IN_PROGRESS=Server {0} is stopping
MSG_SERVER_STOPPED={0} Server stopped
MSG_STOP_SERVER_FAILED={0} Stop Failed

MSG_SERVER_PROFILING_IN_PROGRESS=Server profiling in progress. Please restart the server to deploy an application in regular mode.

LBL_V1ServerLibraries=Unsupported Payara Server Libraries
LBL_V4ServerLibraries=Payara Server 4 Libraries
LBL_V5ServerLibraries=Payara Server 5 Libraries

MSG_V1ServerPlatform=Unsupported Payara Server Platform
MSG_V4ServerPlatform=Payara Server 4 Platform
MSG_V5ServerPlatform=Payara Server 5 Platform

LBL_RunTimeDDCatalog=Payara Server Catalog
DESC_RunTimeDDCatalog=List of all the runtime descriptors DTDs for Payara Server

ERR_NoResourceFolderForProject=Resource folder for {0} was not specified.
ERR_NoResourceFolderUnknown=Resource folder for unknown project was not specified.
ERR_NoJMSResource=JMS resource for {0} was not created.

ERR_WrongTarget=Target {0} is not an instance of Hk2Target.

TITLE_QueryDebugPort=Debug Port for {0}

MSG_SERVER_PROFILING_CLUSTER_NOT_SUPPORTED=Profiling a cluster or stand-alone instance is not supported.

DNAME_PF_ECLIPSELINK=EclipseLink from Payara {0}
DESC_PF_ECLIPSELINK=EclipseLink jars that are bundled with the most recently registered Payara installation

DNAME_PF_COMET=Comet from Payara {0}
DESC_PF_COMET=Comet jars that are bundled with the most recently registered Payara installation

DNAME_PF_JAVA_EE_IMPL=Java EE from Payara {0}
DESC_PF_JAVA_EE_IMPL=Java EE jars that are bundled with the most recently registered Payara installation
