/*******************************************************************************
 * Copyright (c) 2003, 2006 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_TITLE;
	public static String URL_MAPPINGS_LABEL;
	public static String SERVLET_MAPPINGS_LABEL;
	public static String FILTER_MAPPINGS_LABEL;
	public static String URL_SERVLET_LABEL;
	public static String DISPATCHERS_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 ADD_FILTER_WIZARD_WINDOW_TITLE;
    public static String ADD_FILTER_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_TITLE;
	public static String DESCRIPTION_LABEL;
	public static String USE_EXISTING_SERVLET_CLASS;
    public static String USE_EXISTING_FILTER_CLASS;
    public static String USE_EXISTING_LISTENER_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 ADD_FILTER_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_TITLE;
	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 ADD_BUTTON_LABEL_A; 
	public static String ADD_BUTTON_LABEL_D;
	public static String EDIT_BUTTON_LABEL;
	public static String EDIT_BUTTON_LABEL_E;
	public static String EDIT_BUTTON_LABEL_T;
	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 REMOVE_BUTTON_LABEL_R;
	public static String REMOVE_BUTTON_LABEL_V;
	public static String NEW_SERVLET_WIZARD_WINDOW_TITLE;
    public static String NEW_FILTER_WIZARD_WINDOW_TITLE;
    public static String NEW_LISTENER_WIZARD_WINDOW_TITLE;
	public static String INTERFACE_SELECTION_DIALOG_TITLE;
	public static String NAME_TITLE;
	public static String NAME_LABEL;
	public static String VALUE_TITLE;
	public static String VALUE_LABEL;
	public static String WEB_CONT_PAGE_COMP_LABEL;
	public static String CHOOSE_SERVLET_CLASS;
	public static String CHOOSE_FILTER_CLASS;
	public static String CHOOSE_LISTENER_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 SELECT_ALL_BUTTON;
	public static String CLEAR_BUTTON;
	
	public static String Compressed_Libraries;
	public static String Compressed_JavaResources;
	
	public static String ConvertToWebTitle;
	public static String SelectWebVersion;
	
	public static String ADD_LISTENER_WIZARD_WINDOW_TITLE;
	public static String ADD_LISTENER_WIZARD_PAGE_TITLE;
	public static String ADD_LISTENER_WIZARD_PAGE_DESC;
	public static String ADD_LISTENER_WIZARD_SERVLET_CONTEXT_EVENTS;
	public static String ADD_LISTENER_WIZARD_HTTP_SESSION_EVENTS;
	public static String ADD_LISTENER_WIZARD_SERVLET_REQUEST_EVENTS;
	public static String ADD_LISTENER_WIZARD_LIFECYCLE;
	public static String ADD_LISTENER_WIZARD_LIFECYCLE_L;
	public static String ADD_LISTENER_WIZARD_LIFECYCLE_I;
	public static String ADD_LISTENER_WIZARD_LIFECYCLE_Y;
	public static String ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES;
	public static String ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_C;
	public static String ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_H;
	public static String ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_G;
	public static String ADD_LISTENER_WIZARD_SESSION_MIGRATION;
	public static String ADD_LISTENER_WIZARD_OBJECT_BINDING;
	
	public static String DISPATCHER_REQUEST;
	public static String DISPATCHER_FORWARD;
	public static String DISPATCHER_INCLUDE;
	public static String DISPATCHER_ERROR;
	public static String _18;

	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 WEB_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;
	public static final String WEBFRAGMENT_MODULE_WIZ_TITLE = _18;
	
}
