/**
 *                                                                            
 * 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 v1.0       
 * which accompanies this distribution, and is available at                  
 * http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.utils.entitymock;

/**
 * Interface, that each Entity import initialization provider should call regularly,
 * that may be called on startup via the entity mock generator.
 * <br>
 * 
 */
public interface IEntityImportInitializationListener {
	/**
	 * Notify initialization step.
	 *
	 * @param stepTitle the step title
	 * @param addSteps the add steps
	 * @param progressOfStep the initial progress of step
	 * @param count count of actual - sub - step
	 * @param total total count of actual - sub - step
	 */
	public void notifyInitializationStep(String stepTitle, double progressOfStep, double sizeOfSubProgress, int count, int total);
	
	/**
	 * @return the size of count, after which a new notification should be sent
	 */
	public int getInitializationSubStepNotifySize();
}
