###############################################################################
# Copyright (c) 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

#
# Sample messages
#
MSG_ERROR_JTS_PROXY_HAS_NO_METHODS=IWAB0179E Unable to create a sample to the proxy because the proxy does not contain methods.
MSG_ERROR_JTS_PROXY_HAS_NO_DEFAULT=IWAB0180E Unable to create a sample to the proxy because the proxy is not a bean (i.e.. the sample does not have public default constructor).
MSG_ERROR_JTS_NO_PROXY_METHODS_PROCESSED=IWAB0181E Unable to create a sample to the proxy because none of the methods in the proxy were processed.
MSG_WARN_JTS_UNSUPPORTED_TYPE=IWAB0182W The Sample JSP client does not support the following type:
MSG_WARN_JTS_UNSUPPORTED_INDEXED_PROPERTIES=IWAB0187W The Sample JSP client does not support Indexed properties.
MSG_WARN_JTS_UNSUPPORTED_PARAMETERS_ARRAYS=IWAB0237W The Sample JSP client does not support arrays:
MSG_WARN_JTS_UNSUPPORTED_PARAMETERS_INPUTS=IWAB0124W The Sample JSP client does not support input parameters that are not beans:
MSG_ERROR_JTS_CYCLIC_BEAN=IWAB0188E The Sample JSP client does not support beans containing attributes that reference the beans.
MSG_WARN_JTS_PROXY_METHODS_OMITTED=IWAB0189W The Sample JSP client omitted some methods because they contained unsupported types.
MSG_ERROR_SAMPLE_CREATION_CANCELED=IWAB0021E Sample creation was canceled
MSG_WARN_UNABLE_TO_FIND_PROXY=IWAB0022W The Proxy Resource cound not not be found.

MSG_ERROR_CANNOT_CREATE_COMPONENT=The Web service wizard cannot automatically create component "{0}". Cancel the wizard and create the component manually.

#
# Filters
#
FILTER_MSG_ERROR_NULL_OBJECT=IWAB0097E No object has been provided.
FILTER_MSG_ERROR_NOT_FILE=IWAB0098E The object "{0}" is not a file.
FILTER_MSG_ERROR_NOT_FOLDER=IWAB0137E The object "{0}" is not a folder.

JAVA_FILTER_NAME=Java files
JAVA_FILTER_DESC=Files with names ending in ".java" or ".class".
JAVA_FILTER_MSG_ERROR_WRONG_EXTENSION=IWAB0102E The file "{0}" does not end in ".java" or ".class".

WSDL_FILTER_NAME=WSDL files
WSDL_FILTER_DESC=Files with names ending in ".wsdl".
WSDL_FILTER_MSG_ERROR_WRONG_EXTENSION=IWAB0103E The file "{0}" does not end in ".wsdl".

ISD_FILTER_NAME=ISD files
ISD_FILTER_DESC=Files with names ending in ".isd".
ISD_FILTER_MSG_ERROR_WRONG_EXTENSION=IWAB0095E The file "{0}" does not end in ".isd".

FOLDER_FILTER_NAME=Folders
FOLDER_FILTER_DESC=Folders.


#
# Common messages
#


MSG_ERROR_PROJECT_NOT_FOUND=IWAB0069E Web project was not found.
MSG_ERROR_INSTANCE_NOT_FOUND=IWAB0070E Server was not found.

PROGRESS_INFO_PUBLISH_WEB_PROJECT=IWAB0072I Publishing Web project.

#
# Deployment status
#
PROGRESS_INFO_COPY_WEBSERVICE_UTILS=IWAB0023I Copying the webservice utilities.
PROGRESS_INFO_COPYING_FILE=IWAB0197I Copying SOAP run-time file.
PROGRESS_INFO_START_WEB_PROJECT=IWAB0198I Starting Web project.
PROGRESS_INFO_PUBLISHING_SERVER=IWAB0199I Publishing server.
PROGRESS_INFO_STARTING_SERVER=IWAB0200I Starting server.
PROGRESS_INFO_PUBLISH_WEB_PROJECT=IWAB0205I Publishing Web project.


#
# Deployment messages
#
MSG_ERROR_PROJECT_NOT_FOUND=IWAB0207E Web project was not found.
MSG_ERROR_FILECOPY_WEBSERVICE_UTILS=IWAB0024E Error in copying Webservice Utility file.
MSG_ERROR_INSTANCE_NOT_FOUND=IWAB0212E Server was not found.
MSG_ERROR_SERVER=IWAB0213E Error in starting server.
MSG_ERROR_PUBLISH=IWAB0217E Error in publishing Web project.
MSG_ERROR_ADD_MODULE=Error occured when adding the module, {0}, to the server

MSG_WARN_NO_DB_DRIVER=IWAB0221W Unable to locate db2java.zip, please ensure db2java.zip is added to the server class path.

MSG_ERROR_BAD_SERVER_CONFIG=IWAB0534E Unable to add EAR project to Server Configuration.
MSG_ERROR_CREATE_SERVER=IWAB0025E Unable to create server.
MSG_ERROR_STUB_ONLY=Unable to create server because only stub runtimes are available for the {0} server type. Go to Window > Preferences. Select Server > Installed Runtimes to install a non-stub runtime.



#
# EJB messages
#
TASK_LABEL_CREATE_EJB_PROJECT=CreateEJBProjectTask
TASK_DESC_CREATE_EJB_PROJECT=Create an EJB Project.
MSG_ERROR_CANNOT_CREATE_EJB_PROJECT=IWAB0432E Unable to create EJB project.
MSG_ERROR_CANNOT_CREATE_APP_CLIENT_PROJECT=IWAB0026E Unable to create application client project {0}.
MSG_ERROR_CANNOT_CREATE_JAVA_PROJECT=IWAB0027E Unable to create Java project {0}.
MSG_ERROR_CANNOT_CREATE_EAR_PROJECT=IWAB0062E Unable to create EAR project {0}.

#
# WebServiceMappingPage Messages
#

#
# Validator task descriptions
#
TASK_LABEL_WEBSERVICE_DISABLE_VALIDATION=Disable validators.
TASK_DESC_WEBSERVICE_DISABLE_VALIDATION=Temporarily disabling validators.
TASK_LABEL_WEBSERVICE_RESTORE_VALIDATION=Restore validators.
TASK_DESC_WEBSERVICE_RESTORE_VALIDATION=Restoring states of validators.
TASK_LABEL_WEBSERVICE_DISABLE_BUILD=Disable auto build.
TASK_DESC_WEBSERVICE_DISABLE_BUILD=Temporarily disabling auto build.
TASK_LABEL_WEBSERVICE_RESTORE_BUILD=Restore auto build.
TASK_DESC_WEBSERVICE_RESTORE_BUILD=Restoring state of auto build.
TASK_LABEL_WEBSERVICE_BUILD_PROJECT=Build project.
TASK_DESC_WEBSERVICE_BUILD_PROJECT=Building project.

#
# MISC
#
TASK_DESC_CREATE_WEB_PROJECT=Create Web Project
TASK_LABEL_CREATE_WEB_PROJECT=Create Web Project
MSG_ERROR_WEB_PROJECT_CREATE=IWAB0310E An error occurred during creation of the Web Project.
MSG_ERROR_SERVER_VIEW_OPEN=IWAB0126E The server configuration editor is open for {0}.  Close it and restart the wizard.

#
# Default Proxy project messages
#


#
#	DetectNonJavaCharsCommand
#
MSG_WARN_JAVA_METHOD_START_WITH_UPPER_CASE=IWAB0129W Java method {0} in class {1} starts with an upper case letter. Method names should begin with lower case letters.
MSG_WARN_METHOD_NAME_INVALID=IWAB0131W Java method {0} name contains underscore or numeric digits followed by a lower case letter.\
Method names should not contain lower case letters after a numeric or underscore.
MSG_WARN_BOOLEAN_PROPERTY_ACCESSORS=IWAB0132W Boolean property accessor {0} in bean {1} begins with "get". Boolean getter methods should begin wth "is".
MSG_WARN_PACKAGE_NAME_HAS_UPPER_CASE=IWAB0133W The package name {0} of class {1} includes upper case letters. Package names should consist of lower case letters only.

#
# JavaToModelCommand
#
LABEL_OK=OK
DESCRIPTION_OK=Select OK to continue

LABEL_CANCEL=Cancel
DESCRIPTION_CANCEL=Select Cancel to cancel

#
# CreateMonitorCommand
#
MSG_ERROR_UNABLE_TO_START_MONITOR=IWAB0001E Unable to monitor port {0} of {1}.
MSG_INFO_MONITORING_NOT_SUPPORTED=IWAB0002I {0} does not support port monitoring.

#
# CopyWSDLCommand
#
COMMAND_LABEL_COPY_WSDL=Copying WSDL
COMMAND_DESC_COPY_WSDL=Copying WSDL into the workspace for Web service deployment
MSG_ERROR_COPY_WSDL=IWAB0028E Failed to copy WSDL {0} to {1}

#
# AssociateModuleWithEARCommand
#
MSG_ERROR_UNABLE_TO_ASSOCIATE=Unable to associate component {0} to ear component {1}.

#
# CreateModuleCommand
#
MSG_ERROR_CREATE_FLEX_PROJET=An error occured during creation of flexible project {0}.
MSG_ERROR_CREATE_WEB_COMPONENT=An error occured during creation of Web component {0}.
MSG_ERROR_CREATE_EJB_COMPONENT=An error occured during creation of EJB component {0}.
MSG_ERROR_CREATE_APPCLIENT_COMPONENT=An error occured during creation of Application Client component {0}.
MSG_ERROR_CREATE_EAR_COMPONENT=An error occured during creation of EAR component {0}. 
MSG_ERROR_COMPONENT_CREATION=Unable to create project {0} and/or component {1}.
