################################################################################
# Copyright (c) 2006, 2013 SAP AG, Walldorf. All rights reserved.
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0, which accompanies this distribution
# and is available at https://www.eclipse.org/legal/epl-2.0/.
# 
# Contributors:
#     SAP AG - initial API and implementation
################################################################################

# JptJpaUiWizardsEntityMessages

ENTITY_WIZARD_TITLE=New JPA Entity
ENTITY_WIZARD_PAGE_TITLE=Entity class
ENTITY_WIZARD_PAGE_DESCRIPTION=Create a new JPA entity. Only JPA enabled projects may be selected.
DEFAULT_PACKAGE_WARNING=The usage of the default package is not recommended.
ENTITY_PROPERTIES_TITLE=Entity Properties
ENTITY_PROPERTIES_DESCRIPTION=Set entity name, table name, fields, and access type.
ENTITY=Entit&y
MAPPED_AS_SUPERCLASS=Mapped super&class
INHERITANCE_GROUP=Inheritance
INHERITANCE_CHECK_BOX=&Inheritance:
XML_STORAGE_GROUP=XML entity mappings
XML_SUPPORT=Add to entity mappings in &XML
CHOOSE_XML=M&apping file:
MAPPING_XML_TITLE=Mapping File
XML_NAME_TITLE=XML name:
CHOOSE_MAPPING_XML_MESSAGE=Choose mapping XML
INVALID_XML_NAME=The mapping file does not exist
MAPPING_FILE_NOT_LISTED_ERROR=The selected mapping file has not been added to the persistence unit.
TYPE_DIALOG_TITLE=Choose Type
TYPE_DIALOG_DESCRIPTION=Choose the type of the entity field.
ENTITY_NAME=Entity na&me:
TABLE_NAME_GROUP=Table name
TABLE_NAME=&Table name:
USE_DEFAULT=&Use default
ENTITY_FIELDS_GROUP=Entity field&s
ENTITY_FIELDS_DIALOG_TITLE=Entity Fields
KEY=Key
NAME_COLUMN=Name
TYPE_COLUMN=Type
NAME_TEXT_FIELD=Na&me:
TYPE_TEXT_FIELD=&Type:
BROWSE_BUTTON_LABEL=B&rowse...
ADD_BUTTON_LABEL=&Add...
EDIT_BUTTON_LABEL=&Edit...
REMOVE_BUTTON_LABEL=&Remove
DUPLICATED_ENTITY_NAMES_MESSAGE=There are duplicate names on created entity fields. Please resolve the duplication.
ACCESS_TYPE=Access type
FIELD_BASED=Fiel&d
PROPERTY_BASED=&Property
NO_JPA_PROJECTS=No JPA projects in the workspace
APPLY_CHANGES_TO_PERSISTENCE_XML=Apply changes to persistence XML
ADD_MAPPED_SUPERCLASS_TO_XML=Add mapped superclass to XML
ADD_ENTITY_TO_XML=Add entity to XML
ENTITY_DATA_MODEL_PROVIDER_TYPE_NOT_IN_PROJECT_CLASSPATH=''{0}'' does not exist on the project classpath
ENTITY_DATA_MODEL_PROVIDER_INVALID_PK_TYPE=''{0}'' is not a valid simple primary key type
ENTITY_DATA_MODEL_PROVIDER_INVALID_ARGUMENT=Invalid argument ''{0}''
