################################################################################
# Copyright (c) 2006, 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
################################################################################

# JptJpaCoreMessages

NONE=<None>

BUILD_JPA_PROJECT_JOB_NAME=Building JPA Project: {0}
DISPOSE_JPA_PROJECTS_JOB_NAME=Disposing JPA Projects
GET_JPA_PROJECTS_JOB_NAME=Retrieving JPA Projects
GET_JPA_PROJECT_JOB_NAME=Retrieving JPA Project: {0}
REBUILD_JPA_PROJECT_JOB_NAME=Rebuilding JPA Project: {0}
BUILD_VALIDATION_MESSAGES_JOB_NAME=JPA Validation: {0}
PROJECT_CHANGE_EVENT_HANDLER_JOB_NAME=JPA Project Change Event Handler
PROJECT_POST_CLEAN_BUILD_EVENT_HANDLER_JOB_NAME=JPA Project Post-Clean Build Event Handler: {0}
FACET_FILE_CHANGE_EVENT_HANDLER_JOB_NAME=JPA Facet File Change Event Handler: {0}
JAVA_CHANGE_EVENT_HANDLER_JOB_NAME=JPA Java Change Event Handler

VALIDATE_JOB=Validation
VALIDATE_PROJECT_NOT_JPA=Project does not have the JPA facet
VALIDATE_PROJECT_IMPROPER_PLATFORM=Project's JPA platform does not support this file type
VALIDATE_CONTAINER_QUESTIONABLE=Parent folder may not be acceptable for this project
VALIDATE_PERSISTENCE_UNIT_DOES_NOT_SPECIFIED=Persistence unit not specified
VALIDATE_PERSISTENCE_UNIT_NOT_IN_PROJECT=Persistence unit ''{0}'' not defined in project ''{1}''
VALIDATE_PLATFORM_NOT_SPECIFIED=Platform must be specified
VALIDATE_PLATFORM_DOES_NOT_SUPPORT_FACET_VERSION=Platform does not support the current JPA facet version
VALIDATE_LIBRARY_PROVIDER_INVALID=The currently selected library provider is invalid
VALIDATE_CONNECTION_INVALID=Connection profile ''{0}'' does not exist
VALIDATE_CONNECTION_NOT_CONNECTED=Connection must be active to get data source specific help and validation.
VALIDATE_DEFAULT_CATALOG_NOT_SPECIFIED=Default catalog is not specified
VALIDATE_CONNECTION_DOESNT_CONTAIN_CATALOG=Catalog ''{0}'' does not exist on the connection specified
VALIDATE_DEFAULT_SCHEMA_NOT_SPECIFIED=Default schema is not specified
VALIDATE_CONNECTION_DOESNT_CONTAIN_SCHEMA=Schema ''{0}'' does not exist on the connection specified
CONTEXT_MODEL_SYNC_JOB_NAME=Synchronize JPA project: ''{0}''
UPDATE_JOB_NAME=Update JPA project: ''{0}''
METAMODEL_SYNC_JOB_NAME=Synchronize JPA project metamodel: ''{0}''
INVALID_FACET=Invalid Facet: {0}

JAVA_METADATA_CONVERSION_IN_PROGRESS=Java metadata conversion in progress...
JAVA_METADATA_CONVERSION_CONVERT_GENERATOR=Converting Java generator ''{0}''
JAVA_METADATA_CONVERSION_CONVERT_QUERY=Converting Java query ''{0}''
JAVA_METADATA_CONVERSION_CANCELED=Java metadata conversion operation canceled. Check for inconsistent metadata.
JAVA_METADATA_CONVERSION_COMPLETE=Java metadata conversion complete. Open the mapping file...

MAKE_PERSISTENT_ADD_TO_XML_RESOURCE_MODEL=Adding to XML resource model
MAKE_PERSISTENT_BUILDING_PERSISTENT_TYPE=Building: {0}
MAKE_PERSISTENT_PROCESSING_MAPPED_SUPERCLASSES=Processing mapped superclasses...
MAKE_PERSISTENT_PROCESSING_ENTITIES=Processing entities...
MAKE_PERSISTENT_PROCESSING_EMBEDDABLES=Processing embeddables...
MAKE_PERSISTENT_UPDATING_JPA_MODEL=Updating JPA model
MAKE_PERSISTENT_PROCESSING_JAVA_CLASSES=Processing Java classes...
MAKE_PERSISTENT_ANNOTATING_CLASS=Annotating: {0}
MAKE_PERSISTENT_LISTING_IN_PERSISTENCE_XML=Listing in persistence.xml...
MAKE_PERSISTENT_ADD_TO_PERSISTENCE_XML_RESOURCE_MODEL=Adding to XML resource model

BASIC_JPA_SE_PRESET_CONFIG__LABEL=Basic JPA Configuration
BASIC_JPA_SE_PRESET_CONFIG__DESC=A general starting point for a JPA application.
BASIC_JPA_EE_PRESET_CONFIG__LABEL=Basic JPA EE Configuration
BASIC_JPA_EE_PRESET_CONFIG__DESC=A general starting point for a JPA application intended to be used as part of a Java EE deployment.

