/**
 *                                                                            
 * 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.api.contextfunction;

import com.vaadin.ui.Component;
import com.vaadin.ui.VerticalLayout;

// TODO: Auto-generated Javadoc
/**
 * The Interface IUserFilterDialogProvider. Used to inject a dialog to maintain user filters.
 */
public interface IUserFilterDialogProvider {
	
	/**
	 * Gets the dialog.
	 *
	 * @return the dialog
	 */
	Component getDialog();
	
	/**
	 * Creates the view.
	 *
	 * @param parent
	 *            the parent layout the view will be attached to.
	 */
	void createView(final VerticalLayout parent);
}
