/* * Copyright (c) 2011, grossmann * 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 jo-widgets.org 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.workbench.toolkit.impl; import java.util.Collection; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.jowidgets.api.model.item.IMenuBarModel; import org.jowidgets.api.model.item.IToolBarModel; import org.jowidgets.api.toolkit.Toolkit; import org.jowidgets.api.widgets.content.IContentCreator; import org.jowidgets.common.image.IImageConstant; import org.jowidgets.common.types.Dimension; import org.jowidgets.common.types.Position; import org.jowidgets.util.Assert; import org.jowidgets.workbench.api.ICloseCallback; import org.jowidgets.workbench.api.ILoginCallback; import org.jowidgets.workbench.api.IWorkbenchContext; import org.jowidgets.workbench.api.IWorkbenchDescriptor; import org.jowidgets.workbench.toolkit.api.IViewFactory; import org.jowidgets.workbench.toolkit.api.IWorkbenchApplicationModel; import org.jowidgets.workbench.toolkit.api.IWorkbenchApplicationModelBuilder; import org.jowidgets.workbench.toolkit.api.IWorkbenchInitializeCallback; import org.jowidgets.workbench.toolkit.api.IWorkbenchModel; import org.jowidgets.workbench.toolkit.api.IWorkbenchModelBuilder; import org.jowidgets.workbench.toolkit.api.WorkbenchToolkit; class WorkbenchModelBuilder extends WorkbenchPartBuilder<IWorkbenchModelBuilder> implements IWorkbenchModelBuilder { private Dimension initialDimension; private boolean initialMaximized; private boolean decorated; private Position initialPosition; private double initialSplitWeight; private boolean hasApplicationNavigator; private boolean applicationsCloseable; private IToolBarModel toolBar; private IMenuBarModel menuBar; private IContentCreator statusBarCreator; private ILoginCallback loginCallback; private ICloseCallback closeCallback; private IViewFactory viewFactory; private final Set<IWorkbenchInitializeCallback> initializeCallbacks; private final List<Runnable> shutdownHooks; private final List<IWorkbenchApplicationModel> applications; WorkbenchModelBuilder() { this.initializeCallbacks = new LinkedHashSet<IWorkbenchInitializeCallback>(); this.applications = new LinkedList<IWorkbenchApplicationModel>(); this.shutdownHooks = new LinkedList<Runnable>(); this.initialSplitWeight = 0.25; this.initialMaximized = false; this.decorated = true; this.hasApplicationNavigator = true; this.applicationsCloseable = false; this.toolBar = Toolkit.getModelFactoryProvider().getItemModelFactory().toolBar(); this.menuBar = Toolkit.getModelFactoryProvider().getItemModelFactory().menuBar(); this.viewFactory = new DummyViewFactory(); } @Override public IWorkbenchModelBuilder setDescriptor(final IWorkbenchDescriptor descriptor) { Assert.paramNotNull(descriptor, "descriptor"); setLabel(descriptor.getLabel()); setTooltip(descriptor.getTooltip()); setIcon(descriptor.getIcon()); setInitialDimension(descriptor.getInitialDimension()); setInitialMaximized(descriptor.isInitialMaximized()); setInitialPosition(descriptor.getInitialPosition()); setInitialSplitWeight(descriptor.getInitialSplitWeight()); setApplicationNavigator(descriptor.hasApplicationNavigator()); setApplicationsCloseable(descriptor.getApplicationsCloseable()); return this; } @Override public IWorkbenchModelBuilder setInitialDimension(final Dimension initialDimension) { this.initialDimension = initialDimension; return this; } @Override public IWorkbenchModelBuilder setInitialMaximized(final boolean maximized) { this.initialMaximized = maximized; return this; } @Override public IWorkbenchModelBuilder setDecorated(final boolean decorated) { this.decorated = decorated; return this; } @Override public IWorkbenchModelBuilder setInitialPosition(final Position initialPosition) { this.initialPosition = initialPosition; return this; } @Override public IWorkbenchModelBuilder setInitialSplitWeight(final double initialSplitWeigth) { this.initialSplitWeight = initialSplitWeigth; return this; } @Override public IWorkbenchModelBuilder setApplicationNavigator(final boolean hasApplicationNavigator) { this.hasApplicationNavigator = hasApplicationNavigator; return this; } @Override public IWorkbenchModelBuilder setApplicationsCloseable(final boolean applicationsCloseable) { this.applicationsCloseable = applicationsCloseable; return this; } @Override public IWorkbenchModelBuilder setToolBar(final IToolBarModel toolBarModel) { this.toolBar = toolBarModel; return this; } @Override public IWorkbenchModelBuilder setMenuBar(final IMenuBarModel menuBarModel) { this.menuBar = menuBarModel; return this; } @Override public IWorkbenchModelBuilder setStatusBarCreator(final IContentCreator statusBarContentCreator) { this.statusBarCreator = statusBarContentCreator; return this; } @Override public IWorkbenchModelBuilder setLoginCallback(final ILoginCallback loginCallback) { this.loginCallback = loginCallback; return this; } @Override public IWorkbenchModelBuilder setCloseCallback(final ICloseCallback closeCallback) { this.closeCallback = closeCallback; return this; } @Override public IWorkbenchModelBuilder setViewFactoy(final IViewFactory viewFactory) { Assert.paramNotNull(viewFactory, "viewFactory"); this.viewFactory = viewFactory; return this; } @Override public IWorkbenchModelBuilder setInitializeCallback(final IWorkbenchInitializeCallback initializeCallback) { initializeCallbacks.clear(); return addInitializeCallback(initializeCallback); } @Override public IWorkbenchModelBuilder addInitializeCallback(final IWorkbenchInitializeCallback initializeCallback) { Assert.paramNotNull(initializeCallback, "initializeCallback"); initializeCallbacks.add(initializeCallback); return this; } @Override public IWorkbenchModelBuilder addShutdownHook(final Runnable shutdownHook) { shutdownHooks.add(shutdownHook); return this; } @Override public IWorkbenchModelBuilder addApplication(final int index, final IWorkbenchApplicationModel applicationModel) { applications.add(index, applicationModel); return this; } @Override public IWorkbenchModelBuilder addApplication(final IWorkbenchApplicationModel applicationModel) { return addApplication(applications.size(), applicationModel); } @Override public IWorkbenchModelBuilder addApplication(final IWorkbenchApplicationModelBuilder applicationModelBuilder) { return addApplication(applicationModelBuilder.build()); } @Override public IWorkbenchModelBuilder addApplication(final int index, final IWorkbenchApplicationModelBuilder applicationModelBuilder) { return addApplication(index, applicationModelBuilder.build()); } @Override public IWorkbenchModelBuilder addApplication( final String id, final String label, final String tooltip, final IImageConstant icon) { return addApplication(applicationBuilder().setId(id).setLabel(label).setTooltip(tooltip).setIcon(icon)); } @Override public IWorkbenchModelBuilder addApplication(final String id, final String label, final IImageConstant icon) { return addApplication(applicationBuilder().setId(id).setLabel(label).setIcon(icon)); } @Override public IWorkbenchModelBuilder addApplication(final String id, final String label, final String tooltip) { return addApplication(applicationBuilder().setId(id).setLabel(label).setTooltip(tooltip)); } @Override public IWorkbenchModelBuilder addApplication(final String id, final String label) { return addApplication(applicationBuilder().setId(id).setLabel(label)); } @Override public IWorkbenchModelBuilder addApplication(final String id) { return addApplication(applicationBuilder().setId(id)); } @Override public IWorkbenchModel build() { return new WorkbenchModel( getLabel(), getTooltip(), getIcon(), initialDimension, initialMaximized, decorated, initialPosition, initialSplitWeight, hasApplicationNavigator, applicationsCloseable, toolBar, menuBar, statusBarCreator, loginCallback, closeCallback, new InitializeCallbackComposite(initializeCallbacks), viewFactory, applications, shutdownHooks); } private IWorkbenchApplicationModelBuilder applicationBuilder() { return WorkbenchToolkit.getWorkbenchPartBuilderFactory().application(); } private static final class InitializeCallbackComposite implements IWorkbenchInitializeCallback { private final List<IWorkbenchInitializeCallback> callbacks; private InitializeCallbackComposite(final Collection<? extends IWorkbenchInitializeCallback> callbacks) { this.callbacks = new LinkedList<IWorkbenchInitializeCallback>(callbacks); } @Override public void onContextInitialize(final IWorkbenchModel model, final IWorkbenchContext context) { for (final IWorkbenchInitializeCallback callback : callbacks) { callback.onContextInitialize(model, context); } } } }