/*******************************************************************************
 * Copyright (c) 2003, 2005 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.internal.project;


import org.eclipse.osgi.util.NLS;

public class J2EECreationResourceHandler extends NLS {
	private static final String BUNDLE_NAME = "j2eecreation";//$NON-NLS-1$

	private J2EECreationResourceHandler() {
		// Do not instantiate
	}

	public static String EJBReferenceDataModel_UI_12;
	public static String MIGRATE_J2EE_SPEC_UI_;
	public static String EJBReferenceDataModel_UI_11;
	public static String EJBReferenceDataModel_UI_10;
	public static String REQUIRED_CLIENT_VIEW_TITLE;
	public static String MIGRATION_COMPLETE;
	public static String NOT_NEEDED_DEPLOYMENT_DESC_MIG;
	public static String MIGRATION_WARNINGS_REPORT_UI_;
	public static String BACKEND_MIGRATION_FAILED;
	public static String REUSE_DELETED_CLIENT_VIEW_NAME_UI_;
	public static String EJB_PROJECTS_UI_;
	public static String NOT_NEEDED_BACKEND_MIG;
	public static String MIGRATION_NOT_POSSIBLE_REPORT;
	public static String PROJECT_MUST_BE_SELECTED_UI_;
	public static String JAR_11_IMPORT_20_UI_;
	public static String WEBCONTENT_FOLDER_RENAME_SKIPPED;
	public static String CONFIRM_MIGRATE_PROJECT_STRUCTURE;
	public static String WEBPROJECT_VERSION_MIGRATE_FAILED;
	public static String JdkJarFileDoesNotExist_UI;
	public static String Local_cannot_be_empty_UI_;
	public static String LOCAL_CLIENT_NOT_NEEDED;
	public static String REMOTE_CLIENT_VIEWS_NOT_EXIST_UI_;
	public static String MIGRATING_PROJECT_STRUCTURES_UI_;
	public static String ResourceEnvironmentReferenceDataModel_2;
	public static String J2EE_1_2_ONLY_HAVE_REMOTE;
	public static String OPEN_EDITORS_TITLE;
	public static String EJB_MUST_BE_SELECTED_UI_;
	public static String FAILED_MIGRATING_IMPORTED_CLASSES;
	public static String OPEN_J2EE_MIGRATION_WIZARD_UI_;
	public static String LOCAL_CLIENT_VIEWS_EXIST_UI_;
	public static String DELETING_REMOTE_CLIENT_VIEWS_UI_;
	public static String EJB_UI_;
	public static String CONFIRM_CLIENT_VIEW_REQUIRED;
	public static String MIGRATION_NOT_NEEDED;
	public static String ADDING_LOCAL_CLIENT_VIEWS_UI_;
	public static String WEB_UI_;
	public static String DeleteModuleOperation_UI_0;
	public static String Home_cannot_be_empty_UI_;
	public static String WEBCONTENT_LIBPATH_UPDATE_FAILED;
	public static String REMOTE_CLIENT_DELETE_SUCCESS_UI_;
	public static String ServerTargetDataModel_UI_9;
	public static String LOCAL_CLIENT_ADD_FAILED_UI_;
	public static String ServerTargetDataModel_UI_8;
	public static String OLD_PROJECT_STRUCTURE_UI_;
	public static String ServerTargetDataModel_UI_7;
	public static String INFORM_PROPER_SELECTION;
	public static String MIGRATE_MODULE_PROJECTS_UI_;
	public static String COMPLETED_LOCAL_CLIENT_CREATE;
	public static String IMPORTED_CLASSES_FILE_DELETED;
	public static String ADD_LOCAL_CLIENT_VIEWS_BAN_UI_;
	public static String USE_REMOTE_FOR_DIFFERENT_EAR;
	public static String APP_PROJECT_ERROR_EXC_;
	public static String InvalidCharsError;
	public static String ENTERPRISE_APPLICATIONS_UI_;
	public static String ResourceReferenceDataModel_UI_1;
	public static String ResourceReferenceDataModel_UI_0;
	public static String DELETE_REM_CLIENT_VIEWS_UI_;
	public static String Errors_occurred_renaming_module_dependencies_UI_;
	public static String MIGRATION_ERRORS_REPORT_UI_;
	public static String J2EE_VERSION_FAILED_UI_;
	public static String COMPLETED_DEPLOY_DELETE;
	public static String PROJECT_REFERENCES_UPDATED;
	public static String TARGET_ALSO_EXIST_IN_SAME_EAR;
	public static String WEBCONTENT_FOLDER_RENAME_FAILED;
	public static String MIGRATE_UI_;
	public static String Creating__UI_;
	public static String Error_creating_an_EAR_proj_UI_;
	public static String ReferenceDataModel_UI_6;
	public static String ReferenceDataModel_UI_5;
	public static String ReferenceDataModel_UI_3;
	public static String ENTERPRISE_BEANS_BAN_UI_;
	public static String ADD_LOCAL_CLIENT_VIEWS_CHECK_UI_;
	public static String Can_not_rename_module_dependency_from_project_UI_;
	public static String PROJECT_STRUCTURE_SUCCESS_UI_;
	public static String SOURCE_FOLDER_RENAME_SKIPPED;
	public static String UNKNOWN_UI_;
	public static String WIZ_BAN_DESC_UI_;
	public static String COMPLETED_CMP20_CODEGEN;
	public static String PROJECT_NOT_NEED_MIGRATION_UI_;
	public static String SELECT_EJB_CLIENT_VIEWS_UI_;
	public static String Creating_Java_Project_UI_;
	public static String REMOTE_CLIENT_DELETE_FAILED_UI_;
	public static String FILES_OUT_OF_SYNC;
	public static String MIGRATE_CMP_BEANS_UI_;
	public static String Remote_cannot_be_empty_UI_;
	public static String Errors_occurred_deleting_module_dependencies_UI_;
	public static String Can_not_remove_module_dependency_from_project_UI_;
	public static String INVALID_SELECTION_TITLE;
	public static String ABS_PATHS_APP_EXT_REMOVED;
	public static String Local_home_cannot_be_empty_UI_;
	public static String USE_LOCAL_FOR_DIFFERENT_EAR;
	public static String ENTERPRISE_APP_PROJECTS_UI_;
	public static String MIGRATE_J2EE_PROJECTS_UI_;
	public static String MIGRATION_SUCCESS_REPORT_UI_;
	public static String FAILED_DEPLOY_DELETE;
	public static String J2EE_VERSION_NOT_NEED_MIGRATION_UI_;
	public static String MIGRATING_J2EE_VERSION_UI_;
	public static String APPLICATION_CLIENTS_UI_;
	public static String ServiceReferenceDataModel_ERROR_8;
	public static String PROJECT_STRUCTURE_FAILED_UI_;
	public static String LOCAL_CLIENT_ADD_SUCCESS_UI_;
	public static String COMPONENT_ALREADYINEAR;
	public static String COMPLETED_BACKEND_MIG;
	public static String MIGRATE_EJB_SPEC_UI_;
	public static String RenameModuleOperation_UI_0;
	public static String CMP_11_IMPORT_20_UI_;
	public static String J2EE_PROJECT_MIGRATION_TITLE_UI_;
	public static String APP_CLIENT_ONLY_HAVE_REMOTE;
	public static String MIGRATION_NOT_NEEDED_REPORT;
	public static String LOCAL_CLIENT_VIEW_SCHEME_UI_;
	public static String BINARY_MIGRATION_FAILED;
	public static String ENTERPRISE_APPLICATION_UI_;
	public static String INFORM_OPEN_EDITORS;
	public static String EXTRACTED_IMPORTED_CLASSES;
	public static String J2EE_VERSION_SUCCESS_UI_;
	public static String SUFFIX_EXAMPLE_UI_;
	public static String CONFIRMATION_TITLE;
	public static String MIGRATION_ERRORS;
	public static String APPLICATION_CLIENT_UI_;
	public static String SPECIFY_SUFFIX_UI_;
	public static String CONFIRM_MIGRATE_J2EE_13;
	public static String PortComponentReferenceDataModel_ERROR_4;
	public static String FAILED_LOCAL_CLIENT_CREATE;
	public static String MessageDestReferenceDataModel_9;
	public static String APPLICATION_CLIENT_PROJECTS_UI_;
	public static String MessageDestReferenceDataModel_8;
	public static String SOURCE_FOLDER_RENAME_FAILED;
	public static String MessageDestReferenceDataModel_7;
	public static String ENTERPRISE_BEANS_LIST_UI_;
	public static String PROJECT_CLASSPATH_UPDATED;

	static {
		NLS.initializeMessages(BUNDLE_NAME, J2EECreationResourceHandler.class);
	}

	public static String getString(String key, Object[] args) {
		return NLS.bind(key, args);
	}
}
