################################################################################
# Copyright (c) 2013 Oracle. 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:
#     Oracle - initial API and implementation
################################################################################

ADD=&Add
REMOVE=&Remove
BROWSE=B&rowse...
CASCADE=&Cascade:
CHOOSE_TYPE=Choose Type

CLASS_MAPPING_PAGE_TYPE_TABLE_COLUMN=Java Class
CLASS_MAPPING_PAGE_MAPPING_TABLE_COLUMN=Table
CLASS_MAPPING_PAGE_PRIMARY_KEY_PROPERTY_COLUMN=Primary Key Attribute
CLASS_MAPPING_PAGE_TITLE=Class Mapping Properties
CLASS_MAPPING_PAGE_DESC=Specify the mapping database table, and the Java attribute used as primary key.
SELECT_TABLE_DLG_TITLE=Table Selection
SELECT_TABLE_DLG_DESC=&Select a table

PROPS_MAPPING_PAGE_TITLE=Attribute Mapping
PROPS_MAPPING_PAGE_DESC=Map Java bean attributes to database columns using the Edit button. \
Use the Remove button to unmap an attribute.
PROPS_MAPPING_PAGE_LABEL=Attribute mappings:
PROPS_MAPPING_PAGE_JAVA_CLASS_LABEL=Java Class
PROPS_MAPPING_PAGE_PROPERTY_NAME_LABEL=Attribute Name
PROPS_MAPPING_PAGE_PROPERTY_TYPE_LABEL=Attribute Type
PROPS_MAPPING_PAGE_DATABASE_COLUMN=Database Column/Join
PROPS_MAPPING_PAGE_COLUMN_TYPE=Column Type
PROPS_MAPPING_PAGE_COLUMN_TYPE_NA=N/A
PROPS_MAPPING_PAGE_EDIT=Edit...
PROPS_MAPPING_PAGE_REMOVE=Remove
PROPS_MAPPING_PAGE_UNSPECIFIED=(unspecified)
MAPPED_BY_DESC=Mapped by 
PK_JOIN_COLUMN_DESC=Primary key join columns 
JOIN_TABLE_DESC=join table
PROPS_MAPPING_PAGE_JOIN_AND=Join %s and %s
PROPERTY_NAME_LABEL=&Attribute name:
PROPERTY_TYPE_LABEL=Attribute &type:
ID_ANNOTATION_DLG_TITLE=Id Annotation
ID_ANNOTATION_GROUP_DESC=Id attributes
GENERATION_STRATEGY=&Generation strategy:
COL_ANNOTATION_GROUP_DESC=Database column
COLUMN_NAME=&Column name:
REF_COLUMN_NAME=&Referenced column name:
UNIQUE=&Unique:
NULLABLE=&Nullable:
LENGTH=&Length:
PRECISION=Pr&ecision:
SCALE=&Scale:
INSERTABLE=&Insertable:
UPDATABLE=Up&datable:
SELECT_COLUMN_DLG_TITLE=Select Column
SELECT_COLUMN_DLG_DESC=Select a column for attribute \"%s\":
SELECT_CASCADE_DLG_TITLE=Choose Cascade Values
BASIC_ANNOTATION_DLG_TITLE=Basic Annotation
BASIC_ANNOTATION_GROUP_DESC=Basic attributes
TEMPORAL=&Temporal type:
FETCH_TYPE=&Fetch type:
TOMANY_ANNOTATION_DLG_TITLE=Collection Mapping
TARGET_ENTITY_GROUP_DESC=Target entity
TARGET_ENTITY_GROUP_LABEL=&Target entity:
ORDER_BY_TITLE=Order By
ORDER_BY_LABEL=&Order by:
ORDER_BY_DESC=Choose the properties from the \"%s\" entity to be used for sorting:
PROPS_MAPPING_PAGE_MAPPEDBY=&Mapped by:
PROPS_MAPPING_PAGE_JOIN_TABLE=&Join table:
MANY_TO_MANY_PROP_DESC=Many to many attributes
ONE_TO_MANY_PROP_DESC=One to many attributes
MANY_TO_ONE_PROP_DESC=Many to one attributes
ONE_TO_ONE_PROP_DESC=One to one attributes
JOIN_PROPS=Join Attributes
REF_TABLE_NOT_SPECIFIED=The referenced table is not specified!
ADD_JOIN_COLUMN=Add join column
JOIN_COLUMN_TABLE_DESC=%s - %s Join:
NO_JOIN_COLUMN_LABEL=No %s - %s Join.
ADD_JOIN_COLUMN_DLG_TITLE=Add Join Column
ASSOCIATION_WIZARD_TITLE=Collection Mapping
ASSOCIATION_WIZARD_ERROR=Error
ASSOCIATION_WIZARD_NO_TARGET_ENTITY=A target entity is not specified for the \"%s\" attribute.
CARDINALITY_PAGE_TITLE=Cardinality
CARDINALITY_PAGE_DESC=Specify the mapping cardinality.
MAPPING_PAGE_TITLE=Collection Mapping
MAPPING_PAGE_DESC=Specify the mapping attributes.
JOIN_PROPS_PAGE_TITLE=Join Strategy
JOIN_PROPS_PAGE_DESC=Specify the join strategy.
CHOOSE_PROPERTY_TITLE=Choose Attribute
CHOOSE_PROPERTY_DESC=Choose a field from the \"%s\" entity for the \"%s\" attribute:
PK_JOIN_COLUMNS_LABEL=Primary key join columns:
JOIN_COLUMNS_LABEL=Join columns:
EDIT_JOIN_COLUMNS=Edit Join Columns
EDIT_JOIN_COLUMNS_DESC=Edit the join columns between %s and %s tables:
SELECT_ORDERBY_DIALOG_PROPERTY=Attribute
SELECT_ORDERBY_DIALOG_ORDER=Order


