###############################################################################
# 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 Platforms
LIBRARY_VALIDATORS=Library Validators
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
JAVA_PACKAGE_INFO_CONTENT = package-info.java

GENERIC_PLATFORM_GROUP_LABEL=Generic
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.
DEPRECATED_USER_LIBRARY_PROVIDER_LABEL=User Library (deprecated)

JPA_FACET_LABEL=JPA
JPA_FACET_DESCRIPTION=Adds support for writing persistent meta-data using the Java Persistence API (JPA).
JPA_TEMPLATE_LABEL=JPA Project
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
 