/**
 *                                                                            
 * 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 Mock Data DB Filler has to implement
 */
public interface IEntityMockDataDbFiller extends IEntityImportInitializationListener {

	/**
	 * Set a filter for Entity Mock Data Generators to be used.<br>
	 * comma separated and full canonical class names<br>
	 * Empty, null => no Entity Mock Data Generator is allowed
	 * "*" => every Entity Mock Data Generator is allowed
	 */
	public void setMockDataGeneratorFilter(String filter);
	
	/**
	 * Trigger filling of the DB with Entity Mock data
	 */
	public void triggerDbFill();
	
	/**
	 * Notify initialization step.
	 *
	 * @param stepTitle the step title
	 * @param addSteps the add steps
	 * @param progressOfStep the progress of step
	 */
	public void notifyInitializationStep(String stepTitle, int addSteps, double progressOfStep);
}
