###############################################################################
# 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
###############################################################################

#
# Messages in plugin.xml.
#
PLUGIN_NAME=Web Services Graphical User Interface
PLUGIN_VENDOR=Eclipse.org
PLUGIN_DESC=\
The Web services GUI plugin delivers the graphical \
user interface to the Web services function of the \
Web services plugin.

PLUGIN_NEW_CATEGORY_NAME_WS=Web Services

#
#	Web Services Preferance Pages
#
# Categories
PREFERENCE_CATEGORY_RESOURCE_MANAGEMENT=Resource Management
PREFERENCE_CATEGORY_CODE_GENERATION=Code Generation
PREFERENCE_CATEGORY_SCENARIO_DEFAULTS=Scenario Defaults
PREFERENCE_CATEGORY_PROJECT_TOPOLOGY=Project Topology
PREFERENCE_CATEGORY_DRIVER_JARS=JDBC drivers

#
#Scenario Defaults
BUTTON_LAUNCH_SAMPLE=&Launch the sample when generated
LABEL_MOVE_UP=Move &up
LABEL_MOVE_DOWN=Move &down

#
# Preferences Tooltips
#

#Scenario Defaults
TOOLTIP_PPSD_PAGE=Set the defaults for the Web service scenarios.
TOOLTIP_PPSD_CHECKBOX_LAUNCH_SAMPLE=Launch the sample application after generation.
TOOLTIP_CLIENT_TYPE_TABLE_VIEWER=Preferred order of the list of client types
TOOLTIP_MOVE_UP=Move the selected client type up the list
TOOLTIP_MOVE_DOWN=Move the selected client type down the list

#
# Resource Managment
TOOLTIP_PPRM_PAGE=Set preferences that control resources used/generated by the Web service.
TOOLTIP_PPRM_CHECKBOX_OVERWRITE_FILES=Overwrite files without warning.
TOOLTIP_PPRM_CHECKBOX_CREATE_FOLDERS=Create folders when necessary.
TOOLTIP_PPRM_CHECKBOX_CHECK_OUT=Check out files without warning.
BUTTON_CREATE_FOLDERS=&Create folders when necessary
BUTTON_OVERWRITE_FILES=&Overwrite files without warning
BUTTON_CHECKOUT_FILES=C&heck out files without warning

#
# General messages.
#
ISTATUS_WITHOUT_EXCEPTION={0}
ISTATUS_WITH_EXCEPTION={0}\nException: {1}
MSG_INFO_SAVED_STATUS=IWAB0297I Press the Details button to see informational messages.

#
# TypeSelectionDialog
#
DIALOG_TITLE_CLASS_BROWSE=Browse Classes
DIALOG_TITLE_INTERFACE_BROWSE=Browse Interfaces

#
# Common wizard strings.
#
LABEL_SAMPLE_TYPES=Java proxy sample

#
# ResourceSelectionDialog
#
DIALOG_TITLE_RESOURCE_BROWSE=Browse Files
LABEL_RESOURCE_FILTER=Filter:

#
# Tooltips for dialog.ResourceSelectionDialog
# DRES=Dialog/RESources
#
TOOLTIP_DRES_COMBO_RESOURCE_TYPE=Type of resources to browse.
TOOLTIP_DRES_TREE_RESOURCE=Resources available for selection.

#
# Messages for project topology preference page
#
TOOLTIP_PTPP_PAGE=Preference that control the project topology of your Web service and client scenarios.
TOOLTIP_ENABLE_TWO_EARS=Enable this option if you want to generate your Web service and Web service client in different EAR projects.

LABEL_ENABLE_TWO_EARS=&Generate Web service and Web service client in different EAR projects
LABEL_CLIENT_TYPE_NAME=Client type:

#
# Resource Browser
#
DIALOG_TITLE_RESOURCE_BROWSER=Resource browser
TOOLTIP_RESOURCE_TREE=Choose a resource.
