###############################################################################
# Copyright (c) 2006, 2010 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
###############################################################################
# ====================================================================
# To code developer:
#   Do NOT change the properties between this line and the
#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
#   Make a new property name, append to the end of the file and change
#   the code to use the new property.
# ====================================================================

# ====================================================================
# %%% END OF TRANSLATED PROPERTIES %%%
# ====================================================================

pluginName = Dali Java Persistence Tools - Core
providerName = Eclipse Web Tools Platform

JPA_PLATFORM=JPA Platform
RESOURCE_LOCATORS=Resource Locators
JPA_RESOURCE_MODEL_PROVIDERS=JPA Resource Model Providers
JPA_PROBLEM_MARKER=JPA Problem Marker
JPA_FILE_CONTENT=JPA File Content

BASE_JPA_CONTENT = Base content for JPA XML files
PERSISTENCE_XML_CONTENT = JPA persistence.xml files
MAPPING_FILE_CONTENT = Base content for JPA XML mapping files
ORM_XML_CONTENT = JPA orm.xml mapping files
JAR_CONTENT = JAR Content

GENERIC_1_0_PLATFORM_LABEL=Generic 1.0
GENERIC_2_0_PLATFORM_LABEL=Generic 2.0

NO_OP_LIBRARY_PROVIDER_WARNING = Library configuration is disabled. The user may need to configure further classpath changes later.
NO_OP_LIBRARY_PROVIDER_MESSAGE = The JPA facet requires a JPA implementation library to be present on the project classpath. By disabling library configuration, the user takes on the responsibility of ensuring that the classpath is configured appropriately via alternate means.
JPA_WTP_LIBRARY_PROVIDER_LABEL=User Library for EE Project

JPA_PREREQ_GROUP_LABEL="JPA prerequisite facets"
JPA_FACET_LABEL=JPA
JPA_FACET_DESCRIPTION=Adds support for writing persistent meta-data using the Java Persistence API (JPA).
JPA_SE_TEMPLATE_LABEL=JPA SE Project
JPA_EE_TEMPLATE_LABEL=JPA EE Project
JPA_1.0_SE_PRESET_LABEL=Minimal JPA 1.0 Configuration
JPA_1.0_EE_PRESET_LABEL=Minimal JPA 1.0 EE Configuration
JPA_2.0_SE_PRESET_LABEL=Minimal JPA 2.0 Configuration
JPA_2.0_EE_PRESET_LABEL=Minimal JPA 2.0 EE Configuration
JPA_VALIDATOR=JPA Validator
JPA_PROBLEM=JPA Problem

JPA_DELETE_TYPE_PARTICIPANT_NAME=JPA Delete Type Participant
JPA_DELETE_PACKAGE_OR_FOLDER_PARTICIPANT_NAME=JPA Delete Package or Folder Participant
JPA_DELETE_MAPPING_FILE_PARTICIPANT_NAME=JPA Delete Mapping File Participant
JPA_RENAME_TYPE_PARTICIPANT_NAME=JPA Rename Type Participant
JPA_RENAME_PACKAGE_PARTICIPANT_NAME=JPA Rename Package Participant
JPA_RENAME_FOLDER_PARTICIPANT_NAME=JPA Rename Folder Participant
JPA_RENAME_MAPPING_FILE_PARTICIPANT_NAME=JPA Rename Mapping File Participant
JPA_MOVE_TYPE_PARTICIPANT_NAME=JPA Move Type Participant
JPA_MOVE_MAPPING_FILE_PARTICIPANT_NAME=JPA Move Mapping File Participant
 