###############################################################################
# Copyright (c) 2009 Shane Clarke
# 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:
# Shane Clarke - initial API and implementation
###############################################################################
ANNOTATION_ARRAY_CELL_EDITOR_ADD_LABEL=Add
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL=Browse...
ANNOTATION_ARRAY_CELL_EDITOR_DOWN_LABEL=Down
ANNOTATION_ARRAY_CELL_EDITOR_EDIT_ARRAY_VALUES_TITLE=Edit Array Values
ANNOTATION_ARRAY_CELL_EDITOR_REMOVE_LABEL=Remove
ANNOTATION_ARRAY_CELL_EDITOR_SELECT_CLASS_TITLE=Select Class
ANNOTATION_ARRAY_CELL_EDITOR_UP_LABEL=Up
ANNOTATION_ARRAY_CELL_EDITOR_NESTED_ARRAYS_NOT_SUPPORTED=Nested Arrays within Arrays not yet supported
ANNOTATION_EDITING_SUPPORT_NOT_VALID_MESSAGE_PREFIX=Not a valid 

ANNOTATIONS_VIEW_ANNOTATIONS_NOT_AVAILABLE_ON_SELECTION=Annotations not available for current selection
ANNOTATIONS_VIEW_ANNOTATIONS_VALUES_COLUMN_NAME=Values
ANNOTATIONS_VIEW_ANNOTATIONS_COLUMN_NAME=Annotations

ANNOTATIONS_VIEW_FILTER_ACTION_NAME=Filters...
ANNOTATIONS_VIEW_FILTER_ACTION_SELECT_CATEGORIES_MESSAGE=Select Annotation Categories to Filter

ANNOTATIONS_VIEW_NO_SUITABLE_LIBRARY_FOUND=No suitable {0} library can be found on the projects classpath.\n\n

ANNOTATIONS_VIEW_OTHER_ANNOTATION_LIBRARIES_USE=\n(For use with non JAX-WS libraries please setup the project with the required libraries.)\n\n

JAXWS_HANDLER_WIZARD_TITLE=New JAX-WS Handler
JAXWS_HANDLER_WIZARD_PAGE_TITLE=JAX-WS Handler
JAXWS_HANDLER_WIZARD_PAGE_DESCRIPTION=Create a new JAX-WS Handler.

JAXWS_HANDLER_TYPE=&Handler type:
JAXWS_LOGICAL_HANDLER=Logical Handler
JAXWS_SOAP_HANDLER=Protocol Handler (SOAP)
JAXWS_HANDLER_CONFIGURATION=Configuration
JAXWS_HANDLER_CONFIGURATION_ADD=Add this handler to a handler chain
JAXWS_HANDLER_CONFIGURATION_CREATE=Create a new handler chain file
JAXWS_HANDLER_CONFIGURATION_EDIT=Add this handler to an existing handler chain file
JAXWS_HANDLER_CONFIGURATION_ASSOCIATE=Associate this handler chain with a web service
JAXWS_HANDLER_CONFIGURATION_WEB_SERVICE=Web Service:
JAXWS_HANDLER_CONFIGURATION_FILE_PATH=File path:
JAXWS_HANDLER_CONFIGURATION_BROWSE=Browse...

JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_TITLE=Handler Chain Creation
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_DESCRIPTION=Select the parent folder:
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_FILE_NAME=File name:
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_ENTER_NAME=Handler chain file name cannot be empty.
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_CHOOSE_FOLDER=Choose parent folder.
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_INVALID_NAME=Invalid handler chain file name.
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_FILE_EXISTS=The {0} file already exists.
JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_FILE_PROJECT=The handler chain file must reside within a source folder in the {0} project.

JAXWS_HANDLER_CONFIGURATION_EDIT_DIALOG_TITLE=Handler Chain Selection
JAXWS_HANDLER_CONFIGURATION_EDIT_DIALOG_DESCRIPTION=Choose a handler chain:
JAXWS_HANDLER_CONFIGURATION_EDIT_DIALOG_INVALID=Not a valid handler chain file.
JAXWS_HANDLER_CONFIGURATION_EDIT_FILE_NOT_FOUND=Cannot find the {0} handler chain file.
JAXWS_HANDLER_CONFIGURATION_EDIT_FILE_NOT_FOUND_IN_PROJECT=Cannot find the {0} handler chain file in the {1} project.

JAXWS_HANDLER_CONFIGURATION_WS_DIALOG_TITLE=Web Service Selection
JAXWS_HANDLER_CONFIGURATION_WS_DIALOG_DESCRIPTION=Choose a web service:
JAXWS_HANDLER_CONFIGURATION_WS_DIALOG_INVALID=Not a Web Service.

JAXWS_HANDLER_CONFIGURATION_NEW_HANDLER_PATH_EMTPY=New handler chain path is empty.
JAXWS_HANDLER_CONFIGURATION_EXISTING_HANDLER_PATH_EMTPY=Exisitng handler chain path is empty.
JAXWS_HANDLER_CONFIGURATION_WS_PATH_EMTPY=Web service path is empty.
JAXWS_HANDLER_CONFIGURATION_WS_NOT_FOUND=Web service cannot be found.

JAXWS_HANDLER_EXTEND_IMPLEMENT_HANDLER=The handler class must implement or extend from a class that implements LogicalHandler or SOAPHandler.
JAXWS_HANDLER_LIBRARY_CLASSPATH=A JAX-WS library cannot be found on the projects classpath.

CONFIGURE_JAVA_1_6_LIBRARY=To select a 1.6 or above compliant JRE configure the <a href="1" >Installed JREs</a> or change the JRE on the <a href="2" >Java build path</a>.

ADD_ANNOTATION=Add annotation ''@{0}''
ADD_MISSING_METHOD=Add missing method
ADD_UNIMPLEMENTED_METHODS=Add unimplemented methods
CHANGE_METHOD_VISIBILITY=Change method visibility to ''{0}''
CHANGE_METHOD_RETURN_TYPE=Change method return type to match SEI method return type
CREATE_CONSTRUCTOR=Create constructor ''{0}()''
REMOVE_ANNOTATION=Remove annotation ''@{0}''
REMOVE_METHOD=Remove method ''{0}''
REMOVE_FINAL_MODIFIER=Remove ''final'' modifier of ''{0}''(..)
REMOVE_ILLEGAL_MODIFIER=Remove Illegal modifier
REMOVE_STATIC_MODIFIER=Remove ''static'' modifier of ''{0}''(..)
REMOVE_MEMBERVALUEPAIR=Remove member value pair ''{0}''
REMOVE_ALL_OTHER_MEMBERVALUEPAIRS=Remove all other member value pairs
