/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * All rights reserved. This program and the accompanying materials           
 * are made available under the terms of the Eclipse Public License 2.0        
 * which accompanies this distribution, and is available at                  
 * https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 * SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.ui.initialization;

public interface IInitializationNotification {

	public abstract IInitializationProvider getInitializationProvider();

	/**
	 * Gets the recommended progress value.
	 * 
	 * It's calculated by the actual steps number, total count of steps and optional the progress of the actual step 
	 *
	 * @return the recommended progress value
	 */
	public abstract double getRecommendedProgressValue();

	/**
	 * Gets the recommended progress title.
	 *
	 * @param withPercent the with percent
	 * @return the recommended progress title
	 */
	public abstract String getRecommendedProgressTitle(boolean withPercent);

}
