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

NONE=<None>

BUILD_JPA_PROJECTS_JOB_NAME=Building JPA Projects
GET_JPA_PROJECTS_JOB_NAME=Retrieving JPA Projects
GET_JPA_PROJECT_JOB_NAME=Retrieving JPA Project
REBUILD_JPA_PROJECT_JOB_NAME=Rebuilding JPA Project
BUILD_VALIDATION_MESSAGES_JOB_NAME=JPA Validation
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
FACET_FILE_CHANGE_EVENT_HANDLER_JOB_NAME=JPA Facet File Change Event Handler
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_FILE_VERSION_NOT_SUPPORTED=File version not supported
VALIDATE_FILE_VERSION_NOT_SUPPORTED_FOR_FACET_VERSION=File version not supported for JPA facet version
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}''
PREFERENCES_FLUSH_JOB_NAME=Flush Preferences: {0}
OSGI_BUNDLES_LIBRARY_VALIDATOR__BUNDLE_NOT_FOUND=The bundle ''{0}'' could not be found.
OSGI_BUNDLES_LIBRARY_VALIDATOR__IMPROPER_BUNDLE_VERSION=The version of bundle ''{0}'' does not meet platform requirements.
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
