/*******************************************************************************
 * 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.earcreation;



import org.eclipse.osgi.util.NLS;

public class EARCreationResourceHandler extends NLS {

	private static final String BUNDLE_NAME = "earcreation";//$NON-NLS-1$

	private EARCreationResourceHandler() {
		// Do not instantiate
	}

	public static String Error_occured_getting_appl_ERROR_;
	public static String Error_occured_getting_appl1_ERROR_;
	public static String Creating__UI_;
	public static String Creating_EAR_Project_UI_;
	public static String The_project_already_exist_ERROR_;
	public static String EARProjectCreationOperatio_ERROR_;
	public static String ABS_PATH_CHANGED_UI_;
	public static String UNSAVED_CHANGES_WARN_;
	public static String PROJECT_MAP_PROBLEMS_ERROR_;
	public static String MODULE_PROJECTS_CLOSED_WARN_;
	public static String Add_Module_Command_Label_UI_;
	public static String Remove_Module_Command_Label_UI_;

	public static String Set_project_UI_;
	public static String Add_Utility_JAR_UI;
	public static String REM_UTIL_JAR_UI;
	public static String PROJ_DESC_UPDATE_ERROR_UI_;
	public static String Not_an_ear_project_UI_;
	public static String EAR_PROJECT_MUST_BE_OPEN_UI_;
	public static String Updating_absolute_paths_UI_;
	public static String DuplicateModuleNames;
	public static String NoModulesSelected;

	public static String KEY_1;
	public static String KEY_2;
	public static String KEY_3;
	public static String KEY_4;
	public static String KEY_5;
	public static String KEY_6;
	public static String KEY_7;
	public static String KEY_8;
	public static String KEY_9;
	public static String KEY_10;
	public static String KEY_11;
	public static String KEY_12;
	public static String KEY_13;
	public static String KEY_14;
	public static String KEY_15;
	public static String KEY_16;
	
	public static String J2EEUtilityJarListImportOperation_UI_Import_Utility_Jars;
	public static String J2EEUtilityJarListImportOperation_UI_Preparing_to_import;
	public static String J2EEUtilityJarListImportOperation_UI_2;
	public static String J2EEUtilityJarListImportDataModel_0;
	public static String J2EEUtilityJarListImportDataModel_Specify_Valid_Project;
	public static String J2EEUtilityJarListImportDataModel_Select_Jar;
	public static String J2EEUtilityJarListImportDataModel_Specify_Linked_Path;
	public static String J2EEUtilityJarListImportOperation_There_were_no_utility_jars_selected;
	public static String J2EEUtilityJarListImportDataModel_Linked_Path_Exists;
	
	
	public static String CreateProjectWithExtractedJarOperation_Create_project_with_extracted_conte_;
	public static String CopyArchiveIntoProjectOperation_Copying_archive_into_selected_proje_;
	public static String CopyArchiveIntoProjectOperation_Found_existing_file_0_;
	public static String CreateProjectWithLinkedJarOperation_Creating_project_with_linked_archiv_;
	public static String CreateProjectWithLinkedJarOperation_Cannot_link_utility_jar_into_a_clos_;
	public static String CreateProjectWithLinkedJarOperation_File_already_exists_0_;
	public static String LinkArchiveIntoProjectOperation_Linking_archive_into_selected_proje_;
	
	public static String EARImportDataModel_UI_0;
	public static String EARImportDataModel_UI_1;
	public static String EARImportDataModel_UI_1a;
	public static String EARImportDataModel_UI_2;
	public static String EARImportDataModel_UI_2a;
	public static String EARImportDataModel_UI_3;
	public static String EARImportDataModel_UI_4;
	public static String ModuleMappingImpl_UI_0;
	public static String UtilityJARMappingImpl_UI_0;
	public static String importWrongType;
	public static String importWrongVersion;
	public static String EAR_PROJECTNAME_SAMEAS_MODULE;

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

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

	public static final String ADD_MODULE_MODULE_TYPE = KEY_1;
	public static final String ADD_MODULE_MODULE_EXISTS = KEY_2;
	public static final String ADD_MODULE_MODULE_CLOSED = KEY_3;
	public static final String ADD_MODULE_MODULE_NULL = KEY_4;
	public static final String ADD_PROJECT_URI_EXISTS = KEY_5;
	public static final String ADD_PROJECT_NOT_JAVA = KEY_6;
	public static final String ADD_PROJECT_UTIL_URI = KEY_7;
	public static final String ADD_PROJECT_UTIL_MAPPED = KEY_8;
	public static final String ADD_PROJECT_NOT_EAR = KEY_9;
	public static final String ADD_PROJECT_URI_EMPTY = KEY_10;
	public static final String NOT_AN_APP_CLIENT = KEY_11;
	public static final String NOT_AN_EAR = KEY_12;
	public static final String NOT_AN_EJB = KEY_13;
	public static final String NOT_A_RAR = KEY_14;
	public static final String NOT_A_WAR = KEY_15;
	public static final String SERVER_TARGET_NOT_SUPPORT_EAR = KEY_16;
}
