###############################################################################
# Copyright (c) 2009 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
# yyyymmdd bug      Email and other contact information
# -------- -------- -----------------------------------------------------------
# 20091021   291954 ericdp@ca.ibm.com - Eric D. Peters, JAX-RS: Implement JAX-RS Facet
###############################################################################
JAXRSLibraryRegistry_ErrorCreatingURL=Error creating URL for JAX-RS Library Registry
JAXRSLibraryRegistry_ErrorSaving=Error saving JAX-RS Library Registry
JAXRSLibraryRegistry_DEFAULT_IMPL_LABEL=<Default>
JAXRSLibraryConfigModel_Null_Data_Source=Data Source is not provided.
JAXRSLibraryRegistry_ErrorLoadingFromExtPt=Error while loading JAX-RS Libraries from extension points
JAXRSSharedLibraryConfigurator_ErrorLoadingFromExtPt=Error while loading JAX-RS Shared Library Configurators from extension points
JAXRSLibraryClasspathContainer_IMPL_LIBRARY=[JAX-RS Library]

JAXRSFacetInstallDataModelProvider_ValidateServletName=Specify a servlet name to use
JAXRSLibraryConfigPersistData_SAVED_IMPLLIB_NOT_FOUND=Saved JAX-RS implementation library in {0} is unavailable in JAX-RS Library Registry
JAXRSLibraryConfigPersistData_SAVED_COMPLIB_NOT_FOUND=Saved JAX-RS component library in {0} is unavailable in JAX-RS Library Registry
JAXRSLibrariesContainerInitializer_missing_library=[missing JAX-RS Library]
JAXRSFacetInstallDataModelProvider_ValidateJAXRSImpl=A JAX-RS implementation library has not been chosen
JAXRSFacetInstallDataModelProvider_DupeJarValidation=Duplicated jar on classpath: {0}
JAXRSFacetInstallDataModelProvider_ClientImplValidationMsg=JAX-RS Implementation library must be specified.

JAXRSFacetInstallDelegate_InternalErr=Internal Error creating JAX-RS Facet.  Missing configuration.
JAXRSFacetInstallDelegate_ConfigErr=''{0}'' : unable to configure web module for JAX-RS 
JAXRSFacetInstallDelegate_NonUpdateableWebXML=JAX-RS Facet was not installed on ''{0}''.  The web.xml file needs to be updateable.
JAXRSFacetUninstallDelegate_ConfigErr=''{0}'' : unable to de-configure web module for JAX-RS
JAXRSFacetUninstallDelegate_NonUpdateableWebXML=JAX-RS Facet was not un-installed from ''{0}''.  The web.xml file needs to be updateable.

ArchiveFileImpl_CannotCopyFile=Cannot copy file
ArchiveFileImpl_CannotCloseFile=Cannot close file
ArchiveFileImpl_CannotLocatePluginRelativeFile=Cannot locate plugin-relative file "{0}"

PluginProvidedJAXRSLibraryCreationHelper_ErrorCreating=Unable to create JAX-RS Library: {0}
PluginProvidedSharedLibraryConfiguratorCreationHelper_ErrorCreating=Unable to create JAX-RS Shared Library Configurator: {0}
PluginProvidedJAXRSLibraryCreationHelper_ErrorMultipleDefinition={0} defined multiple times in {1}
