###############################################################################
# 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_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 existing handler chain file
JAXWS_HANDLER_CONFIGURATION_CHOOSE=Choose 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_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
