###############################################################################
# Copyright (c) 2005 Eteration A.S. 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:
# Eteration A.S. - initial API and implementation
###############################################################################
_0=Failed to find the image "{0}".
_1=New Ejb
_2=Ejb version:
_3=Ejb Project
_4=Create an EJB Project
_5=Ejb project:
_6=Jar file:
_7=Import a JAR file from the file system
_8=JAR Import
_9=JAR Export
_10=Export Ejb project to the local file system.

ADD_EJB_WIZARD_WINDOW_TITLE=Create EnterpriseJavaBean
ADD_EJB_WIZARD_PAGE_TITLE=EnterpriseJavaBean
ADD_EJB_WIZARD_PAGE_DESC=Create an EnterpriseJavaBean
SELECT_CLASS_TITLE=SELECT_CLASS_TITLE
NO_EJB_PROJECTS=NO_EJB_PROJECTS
ERR_TRANSACTION_VALUE=ERR_TRANSACTION_VALUE

ERR_NO_ATTRIBUTES = Entity bean has no attributes
ERR_DUPLICATE_ATTRIBUTES  = Entity bean has attributes with the same name
ERR_NO_KEY = Entity bean has no key attributes

ERR_EJB_CLASS_NAME_USED= There is already another EJB with same class name
ERR_EJB_NAME_EMPTY=You must provide an EJB name;
ERR_EJB_TYPE_EMPTY=You must provide an EJB type;
ERR_EJB_TYPE_EXISTS=A java type with this name already exists
ERR_MUST_ENTER_A_PACKAGE_NAME= EJB must not be in the default package
ERR_CLASS_NAME_MUSTEND_WITH_BEAN= You must use Bean as a suffix to the class name
ERR_EJB_NAME_ENDS_WITH_BEAN= You must not use Bean as a suffix to the EJB name
ERR_DISPLAY_NAME_EMPTY= You must provide a display name for the EJB
ERR_EJB_DISPLAY_NAME_USED= There is already another EJB with same display name
ERR_STATELESS_EMPTY= You must provide a state type for the SessionBean
ERR_STATELESS_VALUE= State value must be one of Stateless or Stateful
ERR_TRANSACTION_EMPTY= You must provide a transaction type for the EJB
ERR_JNDI_NAME_VALUE=You must provide a valid jndi name for the EJB
ERR_JNDI_NAME_EMPTY=You must provide a jndi name for the EJB
ERR_DESTINATIONTYPE_VALUE=Destination value must be one of Queue or Topic
ERR_DESTINATIONTYPE_EMPTY=You must provide a destination type
ERR_EJB_TYPE_VALUE=Ejb type must be one of SessionBean, MessageDrivenBean or EntityBean
DEFAULT_PACKAGE=(default package)
EMPTY_LIST_MSG=Empty List
ADD_LABEL=Add


ADD_BUTTON_LABEL=Add...
REMOVE_BUTTON_LABEL=Remove
URL_PATTERN_TITLE=URL Patterns
URL_PATTERN_LABEL=Pattern:
FOLDER_LABEL=Folder:
JAVA_PACKAGE_LABEL=Java package:
CLASS_NAME_LABEL=Class name:
SUPERCLASS_LABEL=Superclass:
CONTAINER_SELECTION_DIALOG_TITLE=Container Selection
CONTAINER_SELECTION_DIALOG_DESC=Choose a Container:
CONTAINER_SELECTION_DIALOG_VALIDATOR_MESG=Choose the Ejb Jar Folder or its subfolder
PACKAGE_SELECTION_DIALOG_TITLE=Package Selection
PACKAGE_SELECTION_DIALOG_DESC=Choose a package:
PACKAGE_SELECTION_DIALOG_MSG_NONE=No packages to choose from
SUPERCLASS_SELECTION_DIALOG_TITLE=Superclass Selection
SUPERCLASS_SELECTION_DIALOG_DESC=Choose a superclass:
INTERFACE_SELECTION_DIALOG_TITLE=Interface Selection
INTERFACE_SELECTION_DIALOG_DESC=Choose interfaces:
INTERFACE_SELECTION_DIALOG_MSG_NONE=''{0}'' added.
JAVA_CLASS_MODIFIERS_LABEL=Modifiers:
JAVA_CLASS_PUBLIC_CHECKBOX_LABEL=Public
JAVA_CLASS_ABSTRACT_CHECKBOX_LABEL=Abstract
JAVA_CLASS_FINAL_CHECKBOX_LABEL=Final
JAVA_CLASS_INTERFACES_LABEL=Interfaces:
JAVA_CLASS_METHOD_STUBS_LABEL=Which method stubs would you like to create?
JAVA_CLASS_MAIN_CHECKBOX_LABEL=public static void main(String[] args)
JAVA_CLASS_CONSTRUCTOR_CHECKBOX_LABEL=Constructors from superclass
JAVA_CLASS_INHERIT_CHECKBOX_LABEL=Inherited abstract methods
JAVA_CLASS_BROWER_DIALOG_TITLE=Java Class Browser
JAVA_CLASS_BROWER_DIALOG_MESSAGE=Browse for a Java class

NAME_LABEL=Name
EJB_NAME_LABEL=&EJB name:
JNDI_NAME_LABEL=&JNDI name:
STATELESS_LABEL=&State type:
TRANSACTION_LABEL=&Transaction type:
DESTINATION_NAME_LABEL=Destination &JNDI name:
DESTINATION_LABEL=De&stination:
DISPLAY_NAME_LABEL=&Display name:
DESCRIPTION_LABEL=Des&cription:
VALUE_LABEL=Value
BROWSE_BUTTON_LABEL=Browse...
REMOVE_BUTTON=Remove

NEW_JAVA_CLASS_DESTINATION_WIZARD_PAGE_DESC=Specifiy class file destination.
NEW_JAVA_CLASS_OPTIONS_WIZARD_PAGE_DESC=Specify modifiers, interfaces to implement, and method stubs to generate.


NO_WEB_PROJECTS=No EJB Projects
ENTITY_USECASE_LABEL=&Use case:
DATASOURCE_NAME_LABEL=Datasource:
SCHEMA_NAME_LABEL=&Schema:

ADD_EJB_CMPWIZARD_PAGE_DESC=ContainerManagedPersistence Entity Bean Wizard
ADD_EJB_CMPWIZARD_PAGE_TITLE=CMP Entity Bean
CMP_FROM_TABLE=Import attributes from table
CMP_FROM_BEAN=Define new attributes
ERR_CMP_CONNECTION_SUCCESS=Successfully connected
ERR_CMP_NO_CONNECTION=There is no connection to database
ERR_CMP_INVALID_TABLE=Not a valid table name
ERR_CMP_INVALID_VERSION=Not a valid CMP version
CMP_CONNECTION_VALUE=Value
CMP_CONNECTION_PROPERTY=Property
CMP_CONNECTION_PROPERTIES=&Properties:
CMP_CONNECTION_AVAILABLE=&Available connection definitions
CMP_CONNECTION_NEW_BUTTON=Ne&w...
CMP_CONNECTION_PAGE_DESC=Create a new JDBC connection definition
CMP_CONNECTION_PAGE_TITLE=New JDBC Connection
CMP_CONNECTION_RECONNECT_BUTTON=&Reconnect
CMP_CONNECTION_VALUE_BUTTON=&Value...
ADD_CMP_TABLE_WIZARD_PAGE_DESC=Define CMP attributes
ADD_CMP_TABLE_WIZARD_PAGE_TITLE=CMP Attributes
CMP_TABLE_CHOOSE_TABLE=&Table:
CANNOT_CONNECT=Cannot connect to database
CHECK_PROPERTIES=Check JDBC connection properties and password.
CMP_MANAGED_FIELDS=&Managed attributes
ATTRIBUTE_NAME=Name
ATTRIBUTE_COLUMN=Column
ATTRIBUTE_TYPE=Type
ATTRIBUTE_JDBCTYPE=JDBC Type
ATTRIBUTE_SQLTYPE=SQL Type
ATTRIBUTE_COLUMNSIZE=Size
ATTRIBUTE_DECIMALDIGITS=Digits
ATTRIBUTE_READONLY=Read Only
ATTRIBUTE_ISKEY=Primary Key
ATTRIBUTE_ADD=&Add...
ATTRIBUTE_REMOVE=&Remove

ENTITY_VERSION_LABEL=CMP &version:

