/**
 *                                                                            
 * 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.xtext.entitymock.common;

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