/*******************************************************************************
 * 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
 *******************************************************************************/
/*
 * Created on Dec 3, 2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package org.eclipse.jst.j2ee.internal.common;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.wst.common.frameworks.internal.Messages;


/**
 * @author DABERG
 * 
 * To change the template for this generated type comment go to Window>Preferences>Java>Code
 * Generation>Code and Comments
 */
public class J2EECommonMessages extends Messages {
	public static final String ERR_SECURITY_ROLE_EMPTY = "ERR_SECURITY_ROLE_EMPTY"; //$NON-NLS-1$
	public static final String ERR_SECURITY_ROLE_EXIST = "ERR_SECURITY_ROLE_EXIST"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_NAME_EMPTY = "ERR_JAVA_CLASS_NAME_EMPTY"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_NAME_EXIST = "ERR_JAVA_CLASS_NAME_EXIST"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_FILE_NAME_EXIST = "ERR_JAVA_CLASS_FILE_NAME_EXIST"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_FOLDER_NAME_EMPTY = "ERR_JAVA_CLASS_FOLDER_NAME_EMPTY"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_FOLDER_PROJECT_NOT_OPEN = "ERR_JAVA_CLASS_FOLDER_PROJECT_NOT_OPEN"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_FOLDER_NOT_EXIST = "ERR_JAVA_CLASS_FOLDER_NOT_EXIST"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_NOT_JAVA_PROJECT = "ERR_JAVA_CLASS_NOT_JAVA_PROJECT"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_FOLDER_STATIC_PROJECT = "ERR_JAVA_CLASS_FOLDER_STATIC_PROJECT"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_FOLDER_NOT_SOURCE = "ERR_JAVA_CLASS_FOLDER_NOT_SOURCE"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_NAME_QUALIFIED = "ERR_JAVA_CLASS_NAME_QUALIFIED"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_NAME_INVALID = "ERR_JAVA_CLASS_NAME_INVALID"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_NAME_WARNING = "ERR_JAVA_CLASS_NAME_WARNING"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_SUPERCLASS_NOT_EXIST = "ERR_JAVA_CLASS_SUPERCLASS_NOT_EXIST"; //$NON-NLS-1$
	public static final String ERR_JAVA_CLASS_SUPERCLASS_FINAL = "ERR_JAVA_CLASS_SUPERCLASS_FINAL"; //$NON-NLS-1$
	public static final String ERR_JAVA_PACAKGE_NAME_INVALID = "ERR_JAVA_PACAKGE_NAME_INVALID"; //$NON-NLS-1$
	public static final String ERR_JAVA_PACKAGE_NAME_WARNING = "ERR_JAVA_PACKAGE_NAME_WARNING"; //$NON-NLS-1$
	public static final String ERR_BOTH_FINAL_AND_ABSTRACT = "ERR_BOTH_FINAL_AND_ABSTRACT"; //$NON-NLS-1$
	public static final String ERR_SECURITY_ROLE_LIST_EMPTY = "ERR_SECURITY_ROLE_LIST_EMPTY"; //$NON-NLS-1$


	private static final J2EECommonMessages INSTANCE = new J2EECommonMessages();

	/**
	 * Returns the string from the resource bundle, or 'key' if not found.
	 */
	public static String getResourceString(String key) {
		return INSTANCE.doGetResourceString(key);
	}

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

	protected J2EECommonMessages() {
		super();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.wst.common.frameworks.internal.Messages#initializeBundle()
	 */
	protected void initializeBundle() {
		try {
			resourceBundle = ResourceBundle.getBundle("j2ee_common"); //$NON-NLS-1$
		} catch (MissingResourceException x) {
		}
	}
}