/*******************************************************************************
 * 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
 ******************************************************************************/
package org.eclipse.jpt.jpa.core.internal;

import org.eclipse.osgi.util.NLS;

/**
 * Localized messages used by Dali core.
 */
// TODO bjv rename...
public class JptCoreMessages {

	public static String NONE;

	public static String BUILD_JPA_PROJECTS_JOB_NAME;
	public static String GET_JPA_PROJECTS_JOB_NAME;
	public static String GET_JPA_PROJECT_JOB_NAME;
	public static String REBUILD_JPA_PROJECT_JOB_NAME;
	public static String BUILD_VALIDATION_MESSAGES_JOB_NAME;
	public static String PROJECT_CHANGE_EVENT_HANDLER_JOB_NAME;
	public static String PROJECT_POST_CLEAN_BUILD_EVENT_HANDLER_JOB_NAME;
	public static String FACET_FILE_CHANGE_EVENT_HANDLER_JOB_NAME;
	public static String JAVA_CHANGE_EVENT_HANDLER_JOB_NAME;

	public static String VALIDATE_JOB;
	public static String VALIDATE_PROJECT_NOT_JPA;
	public static String VALIDATE_PROJECT_IMPROPER_PLATFORM;
	public static String VALIDATE_CONTAINER_QUESTIONABLE;
	public static String VALIDATE_FILE_VERSION_NOT_SUPPORTED;
	public static String VALIDATE_FILE_VERSION_NOT_SUPPORTED_FOR_FACET_VERSION;
	public static String VALIDATE_PERSISTENCE_UNIT_DOES_NOT_SPECIFIED;
	public static String VALIDATE_PERSISTENCE_UNIT_NOT_IN_PROJECT;
	public static String VALIDATE_PLATFORM_NOT_SPECIFIED;
	public static String VALIDATE_PLATFORM_DOES_NOT_SUPPORT_FACET_VERSION;
	public static String VALIDATE_LIBRARY_PROVIDER_INVALID;
	public static String VALIDATE_CONNECTION_NOT_SPECIFIED;
	public static String VALIDATE_CONNECTION_INVALID;
	public static String VALIDATE_CONNECTION_NOT_CONNECTED;
	public static String VALIDATE_DEFAULT_CATALOG_NOT_SPECIFIED;
	public static String VALIDATE_CONNECTION_DOESNT_CONTAIN_CATALOG;
	public static String VALIDATE_DEFAULT_SCHEMA_NOT_SPECIFIED;
	public static String VALIDATE_CONNECTION_DOESNT_CONTAIN_SCHEMA;
	public static String VALIDATE_RUNTIME_NOT_SPECIFIED;
	public static String VALIDATE_RUNTIME_DOES_NOT_SUPPORT_EJB_30;
	public static String VALIDATE_LIBRARY_NOT_SPECIFIED;
	public static String INVALID_PERSISTENCE_XML_CONTENT;
	public static String ERROR_SYNCHRONIZING_CLASSES_COULD_NOT_VALIDATE;
	public static String ERROR_WRITING_FILE;
	public static String REGISTRY_MISSING_ATTRIBUTE;
	public static String REGISTRY_INVALID_VALUE;
	public static String REGISTRY_DUPLICATE;
	public static String REGISTRY_FAILED_CLASS_LOAD;
	public static String REGISTRY_FAILED_INTERFACE_ASSIGNMENT;
	public static String REGISTRY_FAILED_INSTANTIATION;
	public static String CONTEXT_MODEL_SYNC_JOB_NAME;
	public static String UPDATE_JOB_NAME;
	public static String METAMODEL_SYNC_JOB_NAME;
	public static String PLATFORM_ID_DOES_NOT_EXIST;
	public static String PREFERENCES_FLUSH_JOB_NAME;
	public static String OSGI_BUNDLES_LIBRARY_VALIDATOR__BUNDLE_NOT_FOUND;
	public static String OSGI_BUNDLES_LIBRARY_VALIDATOR__IMPROPER_BUNDLE_VERSION;
	public static String JPA_METADATA_CONVERSION_CONVERTING;
	public static String JPA_METADATA_CONVERSION_CONVERT_GENERATOR;
	public static String JPA_METADATA_CONVERSION_CONVERT_QUERY;
	public static String JPA_METADATA_CONVERSION_OPERATION_CANCELED;
	public static String JPA_METADATA_CONVERSION_OPERATION_COMPLETE;
	
	private static final String BUNDLE_NAME = "jpa_core"; //$NON-NLS-1$
	private static final Class<?> BUNDLE_CLASS = JptCoreMessages.class;
	static {
		NLS.initializeMessages(BUNDLE_NAME, BUNDLE_CLASS);
	}
	
	private JptCoreMessages() {
		throw new UnsupportedOperationException();
	}
}
