/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
 *         Florian Pirchner - Initial implementation
 */

package org.eclipse.osbp.runtime.web.vaadin.osgi.common;

import com.vaadin.ui.UI;

// TODO: Auto-generated Javadoc
/**
 * Is used to prepare customer ui provider for a UI.class or a vaadin
 * application.
 */
public interface IOSGiUiProviderFactory {

	/**
	 * Returns a new instance of the OSGI UI provider. May return null.
	 *
	 * @param vaadinApplication
	 *            - the name of the UI provider
	 * @param uiClass
	 *            - the UI class that will be instantiated by the provider
	 * @return the custom os gi ui provider
	 */
	CustomOSGiUiProvider createUiProvider(String vaadinApplication,
			Class<? extends UI> uiClass);

}
