/* AWE - Amanzi Wireless Explorer
* http://awe.amanzi.org
* (C) 2008-2009, AmanziTel AB
*
* This library is provided under the terms of the Eclipse Public License
* as described at http://www.eclipse.org/legal/epl-v10.html. Any use,
* reproduction or distribution of the library constitutes recipient's
* acceptance of this agreement.
*
* This library is distributed WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.amanzi.neo.loader.ui.page.widgets.impl;
import java.util.List;
import org.amanzi.neo.loader.core.ILoader;
import org.amanzi.neo.loader.core.internal.IConfiguration;
import org.amanzi.neo.loader.core.internal.LoaderCorePlugin;
import org.amanzi.neo.loader.ui.page.widgets.impl.SelectDriveNameWidget.ISelectDriveListener;
import org.amanzi.neo.loader.ui.page.widgets.impl.SelectDriveResourcesWidget.ISelectDriveResourceListener;
import org.amanzi.neo.loader.ui.page.widgets.impl.SelectLoaderWidget.ISelectLoaderListener;
import org.amanzi.neo.loader.ui.page.widgets.impl.SelectNetworkNameWidget.ISelectNetworkListener;
import org.amanzi.neo.loader.ui.page.widgets.impl.internal.DriveDataFileSelector;
import org.amanzi.neo.loader.ui.page.widgets.internal.AbstractPageWidget;
import org.amanzi.neo.providers.IDriveModelProvider;
import org.amanzi.neo.providers.INetworkModelProvider;
import org.amanzi.neo.providers.IProjectModelProvider;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.eclipse.swt.widgets.Composite;
/**
* TODO Purpose of
* <p>
* </p>
*
* @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com)
* @since 1.0.0
*/
// TODO: LN: 10.10.2012, refactor to use widgets from org.amanzi.awe.ui
public final class WizardFactory {
private static class WizardFactoryHolder {
private static volatile WizardFactory instance = new WizardFactory();
}
public static WizardFactory getInstance() {
return WizardFactoryHolder.instance;
}
protected static <T extends AbstractPageWidget< ? , ? >> T initializeWidget(final T widget) {
widget.initializeWidget();
return widget;
}
private final IProjectModelProvider projectModelProvider;
private final INetworkModelProvider networkModelProvider;
private final IDriveModelProvider driveModelProvider;
private WizardFactory() {
projectModelProvider = LoaderCorePlugin.getInstance().getProjectModelProvider();
networkModelProvider = LoaderCorePlugin.getInstance().getNetworkModelProvider();
driveModelProvider = LoaderCorePlugin.getInstance().getDriveModelProvider();
}
public SelectDriveNameWidget addDatasetNameSelectorForDrive(final Composite parent, final ISelectDriveListener listener) {
return initializeWidget(new SelectDriveNameWidget(parent, listener, projectModelProvider, driveModelProvider));
}
public SelectNetworkNameWidget addDatasetNameSelectorForNetwork(final Composite parent, final ISelectNetworkListener listener,
final boolean isEditable, final boolean isEnabled) {
return initializeWidget(new SelectNetworkNameWidget(parent, listener, isEditable, isEnabled, projectModelProvider,
networkModelProvider));
}
public DriveDataFileSelector addDriveDataFileSelector(final Composite parent, final ISelectDriveResourceListener listener) {
return initializeWidget(new DriveDataFileSelector(parent, listener));
}
public SelectDriveResourcesWidget addDriveResourceSelector(final Composite parent, final ISelectDriveResourceListener listener,
final IOFileFilter filter) {
return initializeWidget(new SelectDriveResourcesWidget(parent, listener, filter));
}
@SuppressWarnings({"unchecked", "rawtypes"})
public <T extends IConfiguration> SelectLoaderWidget<T> addLoaderSelector(final Composite parent,
final ISelectLoaderListener listener, final List<ILoader<T, ? >> loaders) {
return initializeWidget(new SelectLoaderWidget(true, parent, listener, loaders, projectModelProvider));
}
}