/*
 * Created on Jan 17, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.eclipse.jst.j2ee.internal;

import org.eclipse.jst.j2ee.internal.common.CommonEditResourceHandler;

/**
 * @author jialin
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public interface ICommonManifestUIConstants {
	String UP_BUTTON = ManifestUIResourceHandler.getString("Up_1"); //$NON-NLS-1$
	String DOWN_BUTTON = ManifestUIResourceHandler.getString("Down_2"); //$NON-NLS-1$
	String SELECT_ALL_BUTTON = ManifestUIResourceHandler.getString("Select_All_3"); //$NON-NLS-1$
	String DE_SELECT_ALL_BUTTON = ManifestUIResourceHandler.getString("Deselect_All_4"); //$NON-NLS-1$
	String ERROR_READING_MANIFEST_DIALOG_TITLE = ManifestUIResourceHandler.getString("ERROR_READING_MANIFEST_DIALOG_TITLE"); //$NON-NLS-1$
	String SAVE_MANIFEST_WITH_ERROR =ManifestUIResourceHandler.getString("SAVE_MANIFEST_WITH_ERROR"); //$NON-NLS-1$
	String ERROR_READING_MANIFEST_DIALOG_MESSAGE_EDITOR = ManifestUIResourceHandler.getString("ERROR_READING_MANIFEST_DIALOG_MESSAGE_EDITOR"); //$NON-NLS-1$
	String ERROR_READING_MANIFEST_DIALOG_MESSAGE_PROP_PAGE = ManifestUIResourceHandler.getString("ERROR_READING_MANIFEST_DIALOG_MESSAGE_PROP_PAGE"); //$NON-NLS-1$
	String MANIFEST_PROBLEM_1 = ManifestUIResourceHandler.getString("MANIFEST_PROBLEM_1"); //$NON-NLS-1$
	String MANIFEST_PROBLEM_2 = ManifestUIResourceHandler.getString("MANIFEST_PROBLEM_2"); //$NON-NLS-1$
	String MANIFEST_PROBLEM_3 = ManifestUIResourceHandler.getString("MANIFEST_PROBLEM_3"); //$NON-NLS-1$
	String MANIFEST_PROBLEM_4 = ManifestUIResourceHandler.getString("MANIFEST_PROBLEM_4"); //$NON-NLS-1$
	String REDIRECT_TEXT_EDITOR_UI_ = ManifestUIResourceHandler.getString("REDIRECT_TEXT_EDITOR_UI_"); //$NON-NLS-1$
	
	String EJB_CLIENT_RADIO_UI_		= CommonEditResourceHandler.getString("EJB_CLIENT_RADIO_UI_"); //$NON-NLS-1$
	String USE_EJB_SERVER_JARs_UI_ 	= CommonEditResourceHandler.getString("USE_EJB_SERVER_JARs_UI_"); //$NON-NLS-1$
	String USE_EJB_CLIENT_JARs_UI_ 	= CommonEditResourceHandler.getString("USE_EJB_CLIENT_JARs_UI_"); //$NON-NLS-1$
	String USE_BOTH_UI_				= CommonEditResourceHandler.getString("USE_BOTH_UI_"); //$NON-NLS-1$
}
