/***************************************************************************************************
 * Copyright (c) 2003, 2004 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.servlet.ui.internal.plugin;

import org.eclipse.osgi.util.NLS;


public class WEBUIMessages extends NLS {

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

	private WEBUIMessages() {
		// Do not instantiate
	}

	public static String NEW_SERVLET_WIZARD_PAGE_TITLE;
	public static String FOLDER_LABEL;
	public static String URL_MAPPINGS_LABEL;
	public static String JAVA_CLASS_MODIFIERS_LABEL;
	public static String SUPERCLASS_LABEL;
	public static String WEB_CONT_PAGE_TITLE;
	public static String SERVLET_PACKAGE_LABEL;
	public static String PACKAGE_SELECTION_DIALOG_MSG_NONE;
	public static String JAVA_CLASS_ABSTRACT_CHECKBOX_LABEL;
	public static String ADD_SERVLET_WIZARD_WINDOW_TITLE;
	public static String ADD_SERVLET_WIZARD_PAGE_TITLE;
	public static String JAVA_CLASS_MAIN_CHECKBOX_LABEL;
	public static String EMPTY_LIST_MSG;
	public static String ExportWARAction_UI_;
	public static String NO_WEB_PROJECTS;
	public static String INTERFACE_SELECTION_DIALOG_MSG_NONE;
	public static String SUPERCLASS_SELECTION_DIALOG_TITLE;
	public static String PACKAGE_SELECTION_DIALOG_DESC;
	public static String JAVA_CLASS_BROWER_DIALOG_TITLE;
	public static String CONTAINER_SELECTION_DIALOG_DESC;
	public static String NEW_JAVA_CLASS_DESTINATION_WIZARD_PAGE_DESC;
	public static String JAVA_CLASS_PUBLIC_CHECKBOX_LABEL;
	public static String URL_PATTERN_LABEL;
	public static String CONTAINER_SELECTION_DIALOG_TITLE;
	public static String WEB_CONT_NAME;
	public static String URL_PATTERN_TITLE;
	public static String CONTAINER_SELECTION_DIALOG_VALIDATOR_MESG;
	public static String DESCRIPTION_LABEL;
	public static String USE_EXISTING_SERVLET_CLASS;
	public static String JAVA_CLASS_FINAL_CHECKBOX_LABEL;
	public static String INTERFACE_SELECTION_DIALOG_DESC;
	public static String ADD_LABEL;
	public static String ADD_SERVLET_WIZARD_PAGE_DESC;
	public static String SELECT_CLASS_TITLE;
	public static String JAVA_CLASS_BROWER_DIALOG_MESSAGE;
	public static String ImportWARAction_UI_;
	public static String _9;
	public static String JAVA_CLASS_METHOD_STUBS_LABEL;
	public static String _8;
	public static String JAVA_CLASS_CONSTRUCTOR_CHECKBOX_LABEL;
	public static String _7;
	public static String SERVLETS;
	public static String _6;
	public static String DEFAULT_PACKAGE;
	public static String _5;
	public static String MAP_CLASS_NAME_TO_CLASS_ERROR_MSG;
	public static String BROWSE_BUTTON_LABEL;
	public static String _4;
	public static String REMOVE_BUTTON;
	public static String _3;
	public static String _2;
	public static String _1;
	public static String INIT_PARAM_LABEL;
	public static String SERVLET_NAME_LABEL;
	public static String _0;
	public static String CLASS_NAME_LABEL;
	public static String _17;
	public static String _16;
	public static String JAVA_PACKAGE_LABEL;
	public static String _15;
	public static String _14;
	public static String _13;
	public static String PACKAGE_SELECTION_DIALOG_TITLE;
	public static String _12;
	public static String ADD_BUTTON_LABEL;
	public static String EDIT_BUTTON_LABEL;
	public static String _11;
	public static String _10;
	public static String SUPERCLASS_SELECTION_DIALOG_DESC;
	public static String NEW_JAVA_CLASS_OPTIONS_WIZARD_PAGE_DESC;
	public static String REMOVE_BUTTON_LABEL;
	public static String NEW_SERVLET_WIZARD_WINDOW_TITLE;
	public static String INTERFACE_SELECTION_DIALOG_TITLE;
	public static String NAME_LABEL;
	public static String VALUE_LABEL;
	public static String WEB_CONT_PAGE_COMP_LABEL;
	public static String CHOOSE_SERVLET_CLASS;
	public static String NEW_SERVLET_WIZARD_PAGE_DESC;
	public static String JAVA_CLASS_INHERIT_CHECKBOX_LABEL;
	public static String WEB_CONT_PAGE_DESCRIPTION;
	public static String JAVA_CLASS_INTERFACES_LABEL;
	public static String WEBCONTENT;
	
	public static String Compressed_Libraries;
	public static String Compressed_JavaResources;
	
	public static String ConvertToWebTitle;
	public static String SelectWebVersion;

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

	public static final String IMAGE_LOAD_ERROR = _0;
	public static final String WEB_MODULE_WIZ_TITLE = _1;
	public static final String WEB_VERSION_LBL = _2;
	public static final String WEB_PROJECT_MAIN_PG_TITLE = _3;
	public static final String WEB_PROJECT_MAIN_PG_DESC = _4;
	public static final String EJB_PROJECT_LBL = _5;
	public static final String WEB_FILE_LBL = _6;
	public static final String WEB_IMPORT_MAIN_PG_DESC = _7;
	public static final String WEB_IMPORT_MAIN_PG_TITLE = _8;
	public static final String WEB_EXPORT_MAIN_PG_TITLE = _9;
	public static final String WEB_EXPORT_MAIN_PG_DESC = _10;
	public static final String WEB_IMPORT_CONTEXT_ROOT = _11;
	public static final String WEB_CONVERT_MAIN_PG_DESC = _12;
	public static final String WEB_CONVERT_MAIN_PG_TITLE = _13;
	public static final String WEB_IMPORT_WEB_LIB_PG_TITLE = _14;
	public static final String WEB_IMPORT_WEB_LIB_PG_DESC = _15;
	public static final String WAR_IMPORT_SELECT_ALL_LIBS_BUTTON = _16;
	public static final String WAR_IMPORT_DESELECT_ALL_LIBS_BUTTON = _17;
	
	
}