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


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