/*******************************************************************************
 * Copyright (c) 2005, 2007 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.model.internal.validation;


import org.eclipse.osgi.util.NLS;

public class EARValidationMessageResourceHandler extends NLS {

	private static final String BUNDLE_NAME = "org.eclipse.jst.j2ee.model.internal.validation.earvalidation";//$NON-NLS-1$

	private EARValidationMessageResourceHandler() {
		// Do not instantiate
	}


	public static String ERROR_EAR_VALIDATION_FAILED;
	public static String ERROR_EAR_INVALID_EAR_FILE;
	public static String ERROR_EAR_DUPLICATE_ROLES;
	public static String MESSAGE_EAR_NO_MODULE_URI;
	public static String MESSAGE_EAR_MISSING_URI;
	public static String EAR_DD_PARSE_LINECOL;
	public static String EAR_DD_PARSE_LINE;
	public static String EAR_DD_PARSE_NOINFO;
	public static String EAR_DD_CANNOT_OPEN_DD;
	public static String URI_CONTAINS_SPACES_ERROR_;
	public static String MESSAGE_EAR_DUPLICATE_URI_ERROR_;
	public static String MESSAGE_EAR_DUPICATE_ROOTCONTEXT_ERROR_;
	public static String MESSAGE_EMPTY_ALT_DD_ERROR_;
	public static String DUPLICATE_UTILJAR_FOR_PROJECT_NAME_ERROR_;
	public static String DUPLICATE_MODULE_FOR_PROJECT_NAME_ERROR_;
	public static String MESSAGE_UTIL_URI_NAME_COLLISION_ERROR_;
	public static String MESSAGE_UTIL_PROJECT_NAME_COLLISION_ERROR_;
	public static String ERROR_READING_MANIFEST_ERROR_;
	public static String MANIFEST_LINE_END_ERROR_;
	public static String MANIFEST_LINE_EXCEEDS_LENGTH_ERROR_;
	public static String INVALID_URI_FOR_MODULE_ERROR_;
	public static String EAR_INVALID_DOC_TYPE_ERROR_;
	public static String MODULE_DD_PARSE_LINECOL_ERROR_;
	public static String MODULE_DD_PARSE_LINE_ERROR_;
	public static String MODULE_DD_PARSE_NOINFO_ERROR_;
	public static String EJB_BEAN_EJB_LINK_INTEFACE_MISMATCH_ERROR_;
	public static String WARNING_METAFOLDER_MISSING;
	public static String WARNING_FILE_MISSING;
	public static String MESSAGE_INVALID_ALT_DD_WARN_;
	public static String INVALID_MANIFEST_CLASSPATH_ONE_WARN_;
	public static String INVALID_MANIFEST_CLASSPATH_TWO_WARN_;
	public static String INVALID_MANIFEST_CLASSPATH_DEPENDENCY_WARN_;
	public static String PROJECT_IS_CLOSED_WARN_;
	public static String PROJECT_DOES_NOT_EXIST_WARN_;
	public static String MISSING_WEBNATURE_FORMODULE_WARN_;
	public static String DEPRECATED_ABSPATHS_WARN_;
	public static String INVALID_CONTEXTROOT_WEBMODULE_WARN_;
	public static String MISSING_CLIENTNATURE_FORMODULE_WARN_;
	public static String MISSING_EJBNATURE_FORMODULE_WARN_;
	public static String MISSING_PROJECT_FORMODULE_WARN_;
	public static String INVALID_CASE_FOR_MANIFEST_ERROR_;
	public static String URI_ALREADY_EXISTS_IN_EAR_WARN_;
	public static String MISSING_MODULE_EXTENSION_ERROR_;
	public static String PROJECT_SERVER_TARGET_DOES_NOT_MATCH_EAR;
	public static String NO_SERVER_TARGET_MODULE_IN_EAR_WITH_SERVER_TARGET;
	public static String NO_SERVER_TARGET_ON_EAR_WITH_MODULE_SERVER_TARGETS;
	public static String INVALID_EAR_SERVER_TARGET_FOR_14_SPEC_LEVEL;
	public static String INVALID_MODULE_SERVER_TARGET_FOR_14_SPEC_LEVEL;
	public static String MESSAGE_INCOMPATIBLE_SPEC_WARNING_;
	public static String MESSAGE_INCOMPATIBLE_13_SPEC_WARNING_;
	public static String MESSAGE_INCOMPATIBLE_14_SPEC_WARNING_;
	public static String EAR_VALIDATION_INTERNAL_ERROR_UI_;
	public static String CLASSPATH_COMPONENT_URI_MATCHES_ARCHIVE_URI;
	public static String DUPLICATE_CLASSPATH_COMPONENT_URI;
	public static String JEE5_PROJECT_REFERENCED_BY_PRE_JEE5_EAR;
	public static String EarValidator_Validating_Module_;
	public static String EarValidator_Validating_Ref_;
	public static String ValidationRuleUtility_invalid_parameter_javaClassName_;


	static {
		NLS.initializeMessages(BUNDLE_NAME, EARValidationMessageResourceHandler.class);
	}	
	
	/**
	 *   String message;
      ...
      // no args
      message = EARValidationMessageResourceHandler.key_one;
      ...
      // bind one arg
      message = NLS.bind(EARValidationMessageResourceHandler.key_two, "example usage"); //$NON-NLS-1$

	 */
}
