/*******************************************************************************
 * Copyright (c) 2000, 2005 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.epf.authoring.ui.properties;

import org.eclipse.osgi.util.NLS;
/**
 * Properties resources
 * 
 * @author Shilpa Toraskar
 * @since 1.0
 */
public final class PropertiesResources extends NLS {

	private static final String BUNDLE_NAME = PropertiesResources.class.getPackage().getName()
								+ ".Resources"; //$NON-NLS-1$
	
	private PropertiesResources() {
		// Do not instantiate
	}

	public static String Process_generalInformationTitle;
	public static String Process_DocumentInformationTitle;
	public static String Activity_guidanceInformationTitle;
	public static String BreakdownElement_optionInformationTitle;
	public static String TaskDescriptor_stepInformationTitle;
	public static String Process_generalInformationDescription;
	public static String Process_documentInformationDescription;
	public static String Descriptor_generalInformationDescription;
	public static String Descriptor_detailInformationDescription;
	public static String Milestone_generalInformationDescription;
	public static String Milestone_detailInformationDescription;
	public static String TaskDescriptor_stepInformationDescription;
	public static String BreakdownElement_generalInformationDescription;
	public static String WorkBreakdownElement_generalInformationDescription;
	public static String Descriptor_generalInformationDescripton;
	public static String Activity_generalInformationDescription;
	public static String BreakdownElement_DocumentInformationDescription;
	public static String Activity_DocumentInformationDescription;
	public static String Descriptor_documentInformationDescription;
	public static String Process_None;
	public static String Process_name;
	public static String Process_PresentationName;
	public static String Process_briefDescription;
	public static String Process_mainDescription;
	public static String Process_purpose;
	public static String Process_prefix;
	public static String BreakdownElement_Type_Name;
	public static String Process_Type_Task;
	public static String Process_Type_Role;
	public static String Process_Type_WorkProduct;
	public static String WorkProduct_Type;
	public static String Activity_ModelInfo;
	public static String Activity_Type;
	public static String Activity_presentationName;
	public static String Activity_alternatives;
	public static String Activity_howToStaff;
	public static String BreakdownElement_keyConsiderations;
	public static String Process_usageGuidance;
	public static String Activity_RoadmapTitle;
	public static String Activity_RoadmapDescription;
	public static String Activity_GeneralGuidanceTitle;
	public static String Activity_GeneralGuidanceDescription;
	public static String Activity_CommunicationMaterialTitle;
	public static String Activity_CommunicationMaterialDescription;
	public static String Activity_EducationMaterialTitle;
	public static String Activity_EducationMaterialDescription;
	public static String Activity_Selected_Roadmap;
	public static String Activity_Selected_GeneralGuidance;
	public static String Activity_Selected_CommunicationMaterial;
	public static String Activity_Selected_EducationMaterial;
	public static String Activity_DiagramTitle;
	public static String Activity_DiagramDescription;
	public static String Activity_ADImage;
	public static String Activity_ADDImage;
	public static String Activity_WPDImage;
	public static String Activity_UseADImage;
	public static String Activity_UseADDImage;
	public static String Activity_UseWPDImage;
	public static String Activity_Assign;
	
	public static String Activity_WorkRollup;
	public static String Activity_TeamRollup;
	public static String Activity_WorkProductsRollup;
	public static String Activity_WorkRollupDescription;
	public static String Activity_TeamRollupDescription;
	public static String Activity_WorkProductsRollupDescription;
	public static String BreakdownElement_Option_MultipleOcurrance;
	public static String BreakdownElement_Option_Optional;
	public static String BreakdownElement_Option_Planned;
	public static String BreakdownElement_Option_Supressed;
	public static String WorkBreakdownElement_EventDriven;
	public static String WorkBreakdownElement_Ongoing;
	public static String WorkBreakdownElement_Repeatable;
	public static String WorkBreakdownElement_Predecessors;
	public static String WorkBreakdownElement_Dependency;
	public static String WorkBreakdownElement_Dependency_COL_ID_TEXT;
	public static String WorkBreakdownElement_Dependency_COL_PRESENTATION_NAME_TEXT;
	public static String WorkBreakdownElement_Dependency_COL_DEPENDENCY_TEXT;
	public static String WorkBreakdownElement_Dependency_Add;
	public static String WorkBreakdownElement_Dependency_Edit;
	public static String WorkBreakdownElement_Dependency_Remove;
	public static String WorkOrderType_FINISH_TO_START;
	public static String WorkOrderType_FINISH_TO_FINISH;
	public static String WorkOrderType_START_TO_FINISH;
	public static String WorkOrderType_START_TO_START;
	public static String BreakdownElement_Option_Synchronized;
	public static String Descriptor_RefinedDescription;
	public static String TaskDescriptor_Roles_SectionTitle;
	public static String TaskDescriptor_Roles_SectionDescription;
	public static String TaskDescriptor_Roles_Table1;
	public static String TaskDescriptor_Roles_Table2;
	public static String TaskDescriptor_Roles_Table3;
	public static String TaskDescriptor_Selected_Steps;
	public static String TaskDescriptor_StepDialogTitle;
	public static String TaskDescriptor_StepDialogMessage;
	public static String TaskDescriptor_WorkProducts_SectionTitle;
	public static String TaskDescriptor_WorkProducts_SectionDescription;
	public static String TaskDescriptor_WorkProducts_Table1;
	public static String TaskDescriptor_WorkProducts_Table2;
	public static String TaskDescriptor_WorkProducts_Table3;
	public static String TaskDescriptor_WorkProducts_Table4;
	public static String RoleDescriptor_Tasks_SectionTitle;
	public static String RoleDescriptor_Tasks_SectionDescription;
	public static String RoleDescriptor_Tasks_Table1;
	public static String RoleDescriptor_Tasks_Table2;
	public static String RoleDescriptor_Tasks_Table3;
	public static String RoleDescriptor_WorkProducts_SectionTitle;
	public static String RoleDescriptor_WorkProducts_SectionDescription;
	public static String RoleDescriptor_WorkProducts_Table1;
	public static String RoleDescriptor_WorkProducts_Table2;
	public static String WorkProductDescriptor_Roles_SectionTitle;
	public static String WorkProductDescriptor_Roles_SectionDescription;
	public static String WorkProductDescriptor_Roles_Table1;
	public static String WorkProductDescriptor_Roles_Table2;
	public static String WorkProductDescriptor_Type;
	public static String WorkProductDescriptor_ActivityEntryState;
	public static String WorkProductDescriptor_ActivityExitState;
	public static String WPDescriptor_DeliverablePart_SectionTitle;
	public static String WPDescriptor_DeliverablePart_SectionDescription;
	public static String WPDescriptor_DeliverablePart_Table1;
	public static String RoleDescriptor_Team_SectionTitle;
	public static String RoleDescriptor_Team_SectionDescription;
	public static String RoleDescriptor_Team_Table1;
	public static String CompositeRole_Role_SectionTitle;
	public static String CompositeRole_Role_SectionDescription;
	public static String CompositeRole_Role_Table1;
	public static String TeamProfile_Role_SectionTitle;
	public static String TeamProfile_Role_SectionDescription;
	public static String TeamProfile_Role_Table1;
	public static String Process_RichText_CollapseImage;
	public static String Process_RichText_ExpandImage;
	public static String Process_Add;
	public static String Process_AddFromProcess;
	public static String Process_Rename_Message;
	public static String Process_Remove;
	public static String Process_Up;
	public static String Process_Down;
	public static String Process_MultipleSelection;
	public static String Process_Button_LinkMethodElement;
	public static String Process_Button_ClearMethodElement;
	public static String Process_InvalidNameTitle;
	public static String Process_InvalidName;
	public static String Process_Rename_Title;
	public static String Process_InvalidPresentationName;
	public static String Process_LinkMethodElementTitle;
	public static String Process_InvalidLinkMethodElement;
	public static String Process_AssignmentInfoTitle;
	public static String Process_TeamAssignError;
	public static String Process_TeamDialogMessage;
	public static String Process_TeamDialogTitle;
	public static String Process_DeliverableAssignError;
	public static String Process_CompositeRoleAssignError;
	public static String Process_predecessors_validNumberMessage;
	public static String Process_predecessors_validNumberTitle;
	public static String Process_NoItems;
	public static String Process_ItemsSelected;
	public static String Process_NoPropertiesAvailable;
	public static String PredecessorDialog_Title;
	public static String PredecessorDialog_HeaderMessage;
	public static String PredecessorDialog_Index;
	public static String PredecessorDialog_PresentationName;
	public static String PredecessorDialog_Dependency;
	public static String PredecessorDialog_PredecessorErrorDialogTitle;
	public static String PredecessorDialog_PredecessorErrorMessage;
	public static String ProcessEditorFormProperties_textEditCell_problem_msg;
	public static String ProcessEditorFormProperties_cellEditor_invalidPredcessor_problem_msg;

	static {
		NLS.initializeMessages(BUNDLE_NAME, PropertiesResources.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 });
	}
}