/*
* Copyright (c) 2010, Michael Grossmann, Lukas Gross
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the jo-widgets.org nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.jowidgets.impl.widgets.basic.factory;
import org.jowidgets.api.widgets.descriptor.IButtonDescriptor;
import org.jowidgets.api.widgets.descriptor.ICalendarDescriptor;
import org.jowidgets.api.widgets.descriptor.ICanvasDescriptor;
import org.jowidgets.api.widgets.descriptor.ICheckBoxDescriptor;
import org.jowidgets.api.widgets.descriptor.IComboBoxDescriptor;
import org.jowidgets.api.widgets.descriptor.IComboBoxSelectionDescriptor;
import org.jowidgets.api.widgets.descriptor.ICompositeDescriptor;
import org.jowidgets.api.widgets.descriptor.IDialogDescriptor;
import org.jowidgets.api.widgets.descriptor.IDirectoryChooserDescriptor;
import org.jowidgets.api.widgets.descriptor.IFileChooserDescriptor;
import org.jowidgets.api.widgets.descriptor.IFrameDescriptor;
import org.jowidgets.api.widgets.descriptor.IIconDescriptor;
import org.jowidgets.api.widgets.descriptor.IPopupDialogDescriptor;
import org.jowidgets.api.widgets.descriptor.IScrollCompositeDescriptor;
import org.jowidgets.api.widgets.descriptor.ISeparatorDescriptor;
import org.jowidgets.api.widgets.descriptor.ISliderDescriptor;
import org.jowidgets.api.widgets.descriptor.ISplitCompositeDescriptor;
import org.jowidgets.api.widgets.descriptor.ITabFolderDescriptor;
import org.jowidgets.api.widgets.descriptor.ITableDescriptor;
import org.jowidgets.api.widgets.descriptor.ITextAreaDescriptor;
import org.jowidgets.api.widgets.descriptor.ITextFieldDescriptor;
import org.jowidgets.api.widgets.descriptor.ITextLabelDescriptor;
import org.jowidgets.api.widgets.descriptor.IToggleButtonDescriptor;
import org.jowidgets.api.widgets.descriptor.IToolBarDescriptor;
import org.jowidgets.api.widgets.descriptor.ITreeDescriptor;
import org.jowidgets.impl.base.factory.DefaultGenericWidgetFactory;
import org.jowidgets.impl.base.factory.GenericWidgetFactoryWrapper;
import org.jowidgets.impl.spi.ISpiBluePrintFactory;
import org.jowidgets.impl.spi.SpiBluePrintFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.ButtonFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.CalendarFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.CanvasFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.CheckBoxFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.ComboBoxFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.ComboBoxSelectionFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.CompositeFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.DialogFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.DirectoryChooserFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.FileChooserFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.FrameFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.IconFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.PopupDialogFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.ScrollCompositeFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.SeparatorFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.SliderFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.SplitCompositeFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.TabFolderFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.TableFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.TextAreaFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.TextFieldFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.TextLabelFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.ToggleButtonFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.ToolBarFactory;
import org.jowidgets.impl.widgets.basic.factory.internal.TreeFactory;
import org.jowidgets.spi.IOptionalWidgetsFactorySpi;
import org.jowidgets.spi.IWidgetFactorySpi;
import org.jowidgets.spi.IWidgetsServiceProvider;
public class BasicGenericWidgetFactory extends GenericWidgetFactoryWrapper {
private final IWidgetsServiceProvider widgetsServiceProvider;
private final IOptionalWidgetsFactorySpi optionalWidgetsFactorySpi;
public BasicGenericWidgetFactory(final IWidgetsServiceProvider widgetsServiceProvider) {
super(new DefaultGenericWidgetFactory());
this.widgetsServiceProvider = widgetsServiceProvider;
final SpiBluePrintFactory spiBbf = new SpiBluePrintFactory();
registerBaseWidgets(widgetsServiceProvider, spiBbf);
final IOptionalWidgetsFactorySpi optionalFactorySpi = widgetsServiceProvider.getOptionalWidgetFactory();
if (optionalFactorySpi == null) {
this.optionalWidgetsFactorySpi = new DefaultOptionalWidgetsFactorySpi();
}
else {
this.optionalWidgetsFactorySpi = optionalFactorySpi;
}
registerOptionalWidgets(widgetsServiceProvider, spiBbf);
}
@SuppressWarnings({"unchecked"})
private void registerBaseWidgets(final IWidgetsServiceProvider widgetsServiceProvider, final ISpiBluePrintFactory bpF) {
register(IFrameDescriptor.class, new FrameFactory(this, widgetsServiceProvider, bpF));
register(IDialogDescriptor.class, new DialogFactory(this, widgetsServiceProvider, bpF));
register(IPopupDialogDescriptor.class, new PopupDialogFactory(this, widgetsServiceProvider, bpF));
register(ICompositeDescriptor.class, new CompositeFactory(this, widgetsServiceProvider, bpF));
register(IScrollCompositeDescriptor.class, new ScrollCompositeFactory(this, widgetsServiceProvider, bpF));
register(ISplitCompositeDescriptor.class, new SplitCompositeFactory(this, widgetsServiceProvider, bpF));
register(ITextFieldDescriptor.class, new TextFieldFactory(this, widgetsServiceProvider, bpF));
register(ITextAreaDescriptor.class, new TextAreaFactory(this, widgetsServiceProvider, bpF));
register(IIconDescriptor.class, new IconFactory(this, widgetsServiceProvider, bpF));
register(ITextLabelDescriptor.class, new TextLabelFactory(this, widgetsServiceProvider, bpF));
register(IButtonDescriptor.class, new ButtonFactory(this, widgetsServiceProvider, bpF));
register(ISeparatorDescriptor.class, new SeparatorFactory(this, widgetsServiceProvider, bpF));
register(IToggleButtonDescriptor.class, new ToggleButtonFactory(this, widgetsServiceProvider, bpF));
register(ICheckBoxDescriptor.class, new CheckBoxFactory(this, widgetsServiceProvider, bpF));
register(IComboBoxSelectionDescriptor.class, new ComboBoxSelectionFactory<Object>(this, widgetsServiceProvider, bpF));
register(IComboBoxDescriptor.class, new ComboBoxFactory<Object>(this, widgetsServiceProvider, bpF));
register(IToolBarDescriptor.class, new ToolBarFactory(this, widgetsServiceProvider, bpF));
register(ITabFolderDescriptor.class, new TabFolderFactory(this, widgetsServiceProvider, bpF));
register(ITreeDescriptor.class, new TreeFactory(this, widgetsServiceProvider, bpF));
register(ITableDescriptor.class, new TableFactory(this, widgetsServiceProvider, bpF));
register(ISliderDescriptor.class, new SliderFactory(this, widgetsServiceProvider, bpF));
register(ICanvasDescriptor.class, new CanvasFactory(this, widgetsServiceProvider, bpF));
}
private void registerOptionalWidgets(final IWidgetsServiceProvider widgetsServiceProvider, final ISpiBluePrintFactory bpF) {
if (optionalWidgetsFactorySpi.hasFileChooser()) {
register(IFileChooserDescriptor.class, new FileChooserFactory(this, widgetsServiceProvider, bpF));
}
if (optionalWidgetsFactorySpi.hasDirectoryChooser()) {
register(IDirectoryChooserDescriptor.class, new DirectoryChooserFactory(this, widgetsServiceProvider, bpF));
}
if (optionalWidgetsFactorySpi.hasCalendar()) {
register(ICalendarDescriptor.class, new CalendarFactory(this, widgetsServiceProvider, bpF));
}
}
protected IWidgetFactorySpi getSpiWidgetFactory() {
return widgetsServiceProvider.getWidgetFactory();
}
protected IWidgetsServiceProvider getWidgetsServiceProvider() {
return widgetsServiceProvider;
}
}