# 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-Name=Enterprise JavaBeans (EJB) Module Projects
OpenIDE-Module-Display-Category=Java EE
OpenIDE-Module-Short-Description=Support for Enterprise JavaBeans (EJB) Module Projects.
OpenIDE-Module-Long-Description=Support for Enterprise JavaBeans (EJB) Module Projects.

MSG_SessionRunning={0} cannot be executed when a debugging session is running. Do you want to close the current debugging session and execute the {0}?

MSG_FinishSession=EJB debugging is not available right now because another remote debugging session is currently active. The IDE will close the active session and start a new session.

MSG_MetaInfCorrupted={0}:\n\
    Cannot find the configuration files folder "{1}".\n\
    Open the project properties and in the Sources category browse to the correct configuration files folder.
LBL_CannotDetermineEJB=Cannot determine enterprise bean for this class
MSG_Unable_WRITE_EJB_DD=Unable to write to the ejb-jar deployment descriptor.
MSG_ErrorSavingOnWSRemove=Error saving the project when removing web service.

NAME_src.dir=Source Packages
NAME_test.src.dir=Test Packages

MSG_Unable_Add_EJB_Infrastructure=Unable to add the session EJB infrastructure methods to the implementation bean.
MSG_ErrorSavingOnWSClientAdd=Error saving the project after adding web service client ''{0}''.\nMessage: {1}\n
MSG_ErrorSavingOnWSClientRemove=Error saving the project after removing web service client ''{0}''.\nMessage: {1}\n
MSG_ErrorSavingGlobalProperties=Error saving global properties after adding wscompile.tools.classpath for service ''{0}''\nMessage: {1}\n
MSG_MetaInfNotFoundForWsdlFolder=META-INF directory not found during call to getWsdlFolder() with create set to true.

LBL_JSR109ClientStub=Java EE Container-generated static stub
LBL_JAXRPCStaticClientStub=IDE-generated static stub
LBL_SEIServiceStub=SEI Service Stub
LBL_WSDLServiceStub=WSDL Service Stub

MSG_No_Server_Selected=<html>The target server has not been set or has been removed.<br>Right-click the project in the Projects window and choose<br> <b>Resolve Missing Server Problem</b> \
    to set the target server.</html>

#UpdateHelper
TXT_ProjectUpdate=<html><b>Project Needs Upgrading</b></html>\n\
    This project was created in an earlier version of NetBeans IDE. If you edit the project properties\n\
    in NetBeans IDE {0}, the project will be upgraded and\n\
    <html><b>will no longer work in earlier versions of the IDE.</b></html>\n\n\
    Do you want to upgrade your project to current version?
TXT_ProjectUpdateTitle=Change Project Properties
CTL_UpdateOption=Upgrade Project

LBL_No_Main_Classs_Found=Class "{0}" does not have a main method.

#EjbJarActionProvider
ACTION_run=Run Project
ACTION_run.single=Run File
ACTION_debug=Debug Project
ACTION_debug.single=Debug File
ACTION_debug.stepinto=Debug Project

LBL_No_Build_XML_Found=The project has no build script.

MSG_MissingMetadata=Writing to deployment descriptor was unsuccessful due to missing metadata from deployment descriptor or annotations.

# UI Logging
#{0} server type id
UI_EJB_PROJECT_OPENED=An EJB application was opened. Target server: {0}.

# Usage Logging
# {0} server name
# {1} JavaEE version
USG_PROJECT_OPEN_EJB=New EJB Application was opened [Target server: {0}, JavaEE version: {1}].
