###############################################################################
# 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_LABEL0=&Browse...
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL1=B&rowse...
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL2=Br&owse...
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL3=Bro&wse...
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL4=Brow&se...
ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL5=Brows&e...
ANNOTATION_ARRAY_CELL_EDITOR_DOWN_LABEL=&Down
ANNOTATION_ARRAY_CELL_EDITOR_EDIT_ARRAY_VALUES_TITLE=Edit Array Values
ANNOTATION_ARRAY_CELL_EDITOR_REMOVE_LABEL=Re&move
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_ADD_HANDLER_WIZARD_PAGE_TITLE=Configure Handler Chain
JAXWS_ADD_HANDLER_WIZARD_PAGE_DESCRIPTION=Create or select a handler chain file to associate with the web service.

JAXWS_ORDER_HANDLER_WIZARD_PAGE_TITLE=Configure Handler Chain
JAXWS_ORDER_HANDLER_WIZARD_PAGE_DESCRIPTION=Configure the position of the handlers in the handler chain file.

JAXWS_CONFIGURE_HANDLER_WIZARD_TITLE=Configure JAX-WS Handler Chain

JAXWS_HANDLER_ADD=&Add...
JAXWS_HANDLER_REMOVE=&Remove...
JAXWS_HANDLER_MOVE_UP=Move &Up
JAXWS_HANDLER_MOVE_DOWN=Move &Down

JAXWS_HANDLER_NAME_COLUMN=Name
JAXWS_HANDLER_CLASS_COLUMN=Class
JAXWS_HANDLER_TYPE_COLUMN=Type

JAXWS_LOGICAL=Logical
JAXWS_PROTOCOL=Protocol

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 e&xisting handler chain file
JAXWS_HANDLER_CONFIGURATION_CHOOSE=Choose an e&xisting handler chain file
JAXWS_HANDLER_CONFIGURATION_ASSOCIATE=Associate this ha&ndler chain with a web service
JAXWS_HANDLER_CONFIGURATION_WEB_SERVICE=Web Service:
JAXWS_HANDLER_CONFIGURATION_FILE_PATH1=F&ile path:
JAXWS_HANDLER_CONFIGURATION_FILE_PATH2=File& path:
JAXWS_HANDLER_CONFIGURATION_FILE_PATH3=File &path:
JAXWS_HANDLER_CONFIGURATION_BROWSE1=&Browse...
JAXWS_HANDLER_CONFIGURATION_BROWSE2=B&rowse...
JAXWS_HANDLER_CONFIGURATION_BROWSE3=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_CREATE_DIALOG_EMPTY_FILE_NAME=Handler chain file name cannot be empty

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_HANDLER_DIALOG_TITLE=Handler Selection
JAXWS_HANDLER_CONFIGURATION_HANDLER_DIALOG_DESCRIPTION=Choose a logical or soap handler:
JAXWS_HANDLER_CONFIGURATION_HANDLER_DIALOG_INVALID=Not a logical or soap handler.

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
