//------------------------------------------------------------------------------
// 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 UDT_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 });
	}

}