//------------------------------------------------------------------------------
// 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 implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.ui;

import org.eclipse.osgi.util.NLS;

/**
 * The Library UI resources.
 * 
 * @author Kelvin Low
 * @since 1.0
 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=177500
 */
public class LibraryUIResources extends NLS {

	private static String BUNDLE_NAME = LibraryUIResources.class.getPackage()
			.getName()
			+ ".Resources"; //$NON-NLS-1$

	public static String activity_text;

	public static String artifact_text;

	public static String capabilityPattern_text;

	public static String checklist_text;

	public static String checkItem_text;

	public static String compositeRole_text;

	public static String concept_text;

	public static String contentPackage_text;

	public static String customCategory_text;

	public static String deliverable_text;

	public static String deliveryProcess_text;

	public static String descriptor_text;

	public static String discipline_text;

	public static String disciplineGrouping_text;

	public static String domain_text;

	public static String estimate_text;

	public static String estimatingMetric_text;

	public static String estimationConsiderations_text;

	public static String example_text;

	public static String guidance_text;

	public static String guideline_text;

	public static String iteration_text;

	public static String methodConfiguration_text;

	public static String methodContent_text;

	public static String methodLibrary_text;

	public static String methodPackage_text;

	public static String methodPlugin_text;

	public static String milestone_text;

	public static String outcome_text;

	public static String overrideCurrentLibraryError_msg0;

	public static String phase_text;

	public static String practice_text;

	public static String process_text;

	public static String processContribution_text;

	public static String processFamily_text;

	public static String processPackage_text;

	public static String report_text;

	public static String reusableAsset_text;

	public static String roadmap_text;

	public static String roleDescriptor_text;

	public static String role_text;

	public static String roleSet_text;

	public static String roleSetGrouping_text;

	public static String standardCategory_text;

	public static String step_text;

	public static String supportingMaterial_text;

	public static String task_text;

	public static String taskDescriptor_text;

	public static String teamProfile_text;

	public static String template_text;

	public static String termDefinition_text;

	public static String tool_text;

	public static String toolMentor_text;

	public static String whitepaper_text;

	public static String workProduct_text;

	public static String workProductDescriptor_text;

	public static String workProductElement_text;

	public static String workProductType_text;

	public static String activity_text_plural;

	public static String artifact_text_plural;

	public static String capabilityPattern_text_plural;

	public static String checklist_text_plural;

	public static String checkItem_text_plural;

	public static String compositeRole_text_plural;

	public static String concept_text_plural;

	public static String contentPackage_text_plural;

	public static String customCategory_text_plural;

	public static String deliverable_text_plural;

	public static String deliveryProcess_text_plural;

	public static String descriptor_text_plural;

	public static String discipline_text_plural;

	public static String disciplineGrouping_text_plural;

	public static String domain_text_plural;

	public static String estimate_text_plural;

	public static String estimatingMetric_text_plural;

	public static String estimationConsiderations_text_plural;

	public static String example_text_plural;

	public static String guidance_text_plural;

	public static String guideline_text_plural;

	public static String iteration_text_plural;

	public static String methodConfiguration_text_plural;

	public static String methodContent_text_plural;

	public static String methodLibrary_text_plural;

	public static String methodPackage_text_plural;

	public static String methodPlugin_text_plural;

	public static String milestone_text_plural;

	public static String outcome_text_plural;

	public static String phase_text_plural;

	public static String practice_text_plural;

	public static String process_text_plural;

	public static String processContribution_text_plural;

	public static String processFamily_text_plural;

	public static String processPackage_text_plural;

	public static String report_text_plural;

	public static String reusableAsset_text_plural;

	public static String roadmap_text_plural;

	public static String roleDescriptor_text_plural;

	public static String role_text_plural;

	public static String roleSet_text_plural;

	public static String roleSetGrouping_text_plural;

	public static String standardCategory_text_plural;

	public static String step_text_plural;

	public static String supportingMaterial_text_plural;

	public static String task_text_plural;

	public static String taskDescriptor_text_plural;

	public static String teamProfile_text_plural;

	public static String template_text_plural;

	public static String termDefinition_text_plural;

	public static String tool_text_plural;

	public static String toolMentor_text_plural;

	public static String whitepaper_text_plural;

	public static String workProduct_text_plural;

	public static String workProductDescriptor_text_plural;

	public static String workProductElement_text_plural;

	public static String workProductType_text_plural;

	public static String application_title;

	public static String openLibraryWizard_title;
	
	public static String convertToSynProcessLib_msg;

	public static String openLibraryMainWizardPage_title;

	public static String openLibraryMainWizardPage_title_2;

	public static String openLibraryMainWizardPage_text;

	public static String pathLabel_text;

	public static String nameLabel_text;

	public static String uriLabel_text;

	public static String openUnlistedLibraryCheckbox_text;

	public static String libraryTypeLabel_text;

	public static String libraryLabel_text;

	public static String browseButton_text;

	public static String promptForLibraryCheckbox_text;

	public static String openLibraryDialog_newLibrary_text;

	public static String selectLibraryFolderDialog_title;

	public static String selectLibraryFolderDialog_text;

	public static String openingLibraryTask_name;

	public static String openLibraryError_msg;

	public static String openLibraryInternlError_reason;

	public static String openLibraryError_reason1;

	public static String openLibraryError_reason2;

	public static String openLibraryError_reason3;

	public static String openLibraryError_reason4;

	public static String openLibraryError_advice;

	public static String invalidLibraryPath_msg;

	public static String invalidLibraryPath_reason;

	public static String readOnlyProjectFile_text;

	public static String retryButton_text;

	public static String cancelButton_text;

	public static String upgradeLibraryDialog_title;

	public static String upgradeLibraryDialog_text;

	public static String upgradingLibraryTask_name;

	public static String upgradeLibraryError_msg;

	public static String switchConfigDialog_title;

	public static String switchConfigDialog_text;

	public static String currentConfigLabel_text;

	public static String selectConfigLabel_text;

	public static String deleteFilesConfirmation_msg;

	public static String deleteFilesError_reason;

	public static String createPathError_reason;

	public static String invalidPath_msg;

	public static String backupLibraryDialog_title;

	public static String backupLibraryDialog_text;

	public static String backingUpLibraryTask_name;

	public static String pathSelectionError_msg;

	public static String okButton_text;

	public static String skipButton_text;

	public static String alwaysButton_text;

	public static String neverButton_text;

	public static String promptButton_text;

	public static String linkToURL_name;

	public static String linkToFile_name;

	public static String elementLink_name;

	public static String elementLinkWithType_name;

	public static String elementLinkWithUserText_name;

	public static String convertActivityDialog_title;

	public static String convertActivityDialog_text;

	public static String unsupportedActivityType_msg;

	public static String unsupportedActivityType_reason;

	public static String versionMismatchDialog_text;

	public static String versionMismatchDialog_text_unknown;

	public static String selectProcessWizardPage_title;

	public static String selectProcessWizardPage_text;

	public static String processesLabel_text;

	public static String briefDescriptionLabel_text;

	public static String noOpenLibraryWarning_msg;

	public static String errorDialog_title;

	public static String MethodElementDeleteAction_deleteconfirm_text;

	public static String confirmDeleteDialog_title;

	public static String confirmDeleteDialog_msg;

	public static String confirmDeleteDialog_msgWithReference;

	public static String ProcessDeleteAction_deletecofirm_text;
	
	public static String saveLibraryDialog_title;
	
	public static String saveLibraryDialog_text;
	
	public static String saveLibraryError_msg;
	
	public static String error_reason;
	
	public static String copyLibraryDialog_title;
	
	public static String copyLibraryDialog_text_readOnlyLib;
	
	public static String copyLibraryTask_name;
	
	public static String copyLibraryDialog_copyButton_text;

	public static String elementTCProvider_methodContent;

	public static String elementTCProvider_contentPackages;

	public static String elementTCProvider_standardCategories;

	public static String elementTCProvider_disciplines;

	public static String elementTCProvider_domains;

	public static String elementTCProvider_workProductTypes;

	public static String elementTCProvider_roleSets;

	public static String elementTCProvider_tools;

	public static String elementTCProvider_customCategories;

	public static String elementTCProvider_processes;

	public static String elementTCProvider_capabilityPatterns;

	public static String elementTCProvider_deliveryProcesses;

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

	/**
	 * Returns the localized string associated with a resource key and formatted
	 * with a given object.
	 * 
	 * @param key
	 *            A resource key.
	 * @param data
	 *            An object.
	 * @return A formatted localized string.
	 */
	public static String bind(String key, Object data) {
		return NLS.bind(key, new Object[] { data });
	}

}