/*******************************************************************************
 * Copyright (c) 2003, 2008 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
 * Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
 *******************************************************************************/
/*
 * Created on Jan 13, 2004
 *
 * To change the template for this generated file go to
 * Window - Preferences - Java - Code Generation - Code and Comments
 */
package org.eclipse.jst.j2ee.internal.web.operations;

import org.eclipse.osgi.util.NLS;


/**
 * @author jialin
 * 
 * To change the template for this generated type comment go to Window - Preferences - Java - Code
 * Generation - Code and Comments
 */
public class WebMessages extends NLS {
	private static final String BUNDLE_NAME = "web";//$NON-NLS-1$

	private WebMessages() {
		// Do not instantiate
	}

	public static String ERR_JAR_NAME_EMPTY;
	public static String ERR_JAR_NAME_EXIST;
	public static String ERR_JAVA_PROJECT_NAME_EMPTY;
	public static String ERR_JAVA_PROJECT_NAME_EXIST;
	public static String ERR_DUPLICATED_INIT_PARAMETER;
	public static String ERR_DUPLICATED_URL_MAPPING;

	public static String ERR_SERVLET_MAPPING_URL_PATTERN_EXIST;
	public static String KEY_3;
	public static String KEY_4;
	public static String KEY_5;
	public static String KEY_6;
	public static String ERR_FILTER_PARAMETER_NAME_EXIST;
	public static String ERR_FILTER_MAPPING_SERVLET_EXIST;
	public static String ERR_FILTER_MAPPING_SERVLET_DISPATCHER_TYPES_EMPTY;
	public static String ERR_SERVLET_MAPPING_URL_PATTERN_EMPTY;
	public static String ERR_URL_MAPPING_LIST_EMPTY;
	public static String ERR_URL_PATTERN_INVALID;
	public static String ERR_FILTER_MAPPING_EMPTY;
	public static String ERR_DISPLAY_NAME_EMPTY;
	public static String ERR_SERVLET_CLASS_NAME_USED;
	public static String ERR_SERVLET_JAVA_CLASS_NAME_INVALID;
	public static String ERR_SERVLET_MAPPING_SERVLET_NOT_EXIST;
	public static String ERR_SERVLET_NAME_EXIST;
	public static String ERR_SERVLET_DISPLAY_NAME_EXIST;
	public static String ERR_SERVLET_PARAMETER_NAME_EMPTY;
	public static String ERR_SERVLET_PARAMETER_NAME_EXIST;
	public static String ERR_SERVLET_PARAMETER_VALUE_EMPTY;
	public static String ERR_SERVLET_PARAMETER_VALUE_EXIST;
	public static String ERR_SERVLET_ROLE_REF_NAME_EMPTY;
	public static String ERR_SERVLET_ROLE_REF_NAME_EXIST;
	public static String ERR_SERVLET_ROLE_LINK_EMPTY;
	public static String ERR_SERVLET_INTERFACE;

	public static String ERR_FILTER_DISPLAY_NAME_EXIST;
	public static String ERR_FILTER_NAME_EXIST;
	public static String ERR_FILTER_CLASS_NAME_USED;
	public static String ERR_FILTER_CLASS_NAME_INVALID;
	public static String ERR_LISTENER_DISPLAY_NAME_EXIST;
	public static String ERR_LISTENER_CLASS_NAME_USED;
	public static String ERR_LISTENER_CLASS_NAME_INVALID;

	public static String ERR_PAGE_ENCODING_EMPTY;
	public static String ERR_PAGE_ENCODING_EXIST;
	public static String ERR_URL_PATTERN_EXIST;
	public static String ERR_INCLUDE_PRELUDES_EXIST;
	public static String ERR_INCLUDE_CODAS_EXIST;
	public static String ERR_SECURITY_CONSTRAINT_NAME_EMPTY;
	public static String ERR_SECURITY_CONSTRAINT_NAME_EXIST;
	public static String ERR_CONTEXT_PARAMETER_NAME_EMPTY;
	public static String ERR_CONTEXT_PARAMETER_NAME_EXIST;
	public static String ERR_RESOURCE_NAME_EMPTY;
	public static String ERR_RESOURCE_NAME_EXIST;
	public static String ERR_URL_PATTERNS_EMPTY;
	public static String ERR_MIME_MAPPING_EXTENSION_EMPTY;
	public static String ERR_MIME_MAPPING_EXTENSION_EXIST;
	public static String ERR_WELCOME_PAGE_EMPTY;
	public static String ERR_WELCOME_PAGE_EXIST;
	public static String ERR_ENV_ENTRY_NAME_EMPTY;
	public static String ERR_ENV_ENTRY_NAME_EXIST;
	public static String ERR_ERROR_CODE_EMPTY;
	public static String ERR_ERROR_CODE_MUST_BE_3_DIGITS;
	public static String ERR_ERROR_PAGE_LOCATION_EMPTY;
	public static String ERR_ERROR_PAGE_LOCATION_EXIST;
	public static String ERR_ERROR_PAGE_LOCATION_MUST_START_WITH_SLASH;
	public static String ERR_EXCEPTION_TYPE_EMPTY;
	public static String ERR_EXCEPTION_SECURITY_ID_NO_BEANS;
	public static String ERR_EXCEPTION_ROLE_NAME_EMPTY;
	public static String ERR_LOCALE_NAME_EMPTY;
	public static String ERR_LOCALE_NAME_EXIST;
	public static String ERR_TAGLIBREF_URL_EMPTY;
	public static String ERR_TAGLIBREF_URL_EXIST;
	public static String ERR_MESSAGE_DESTINATION_NAME_EMPTY;
	public static String ERR_MESSAGE_DESTINATION_NAME_EXIST;
	public static String ERR_EXCEPTION_METHOD_ELEMENT_EMPTY;
	public static String ERR_EXCEPTION_METHOD_TRANSACTION_ATTRIBUTES_EMPTY;
	public static String ERR_SERVLET_LIST_EMPTY;
	public static String ERR_FILTER_LIST_EMPTY;
	public static String ERR_LISTENER_LIST_EMPTY;
	public static String ERR_NO_LISTENER_SELECTED;

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

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