###############################################################################
# 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=Check 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.
