/******************************************************************************* * Copyright (c) 2006-2013 The RCP Company and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * The RCP Company - initial API and implementation *******************************************************************************/ package com.rcpcompany.uibindings.internal.utils; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.ecore.EClass; import org.eclipse.swt.widgets.Composite; import com.rcpcompany.uibindings.IBindingContext; import com.rcpcompany.uibindings.IDisposable; import com.rcpcompany.uibindings.utils.IFormChooser; import com.rcpcompany.uibindings.utils.IFormChooser.IFormChooserTester; import com.rcpcompany.uibindings.utils.IFormChooserCreator; import com.rcpcompany.uibindings.utils.IFormCreator; import com.rcpcompany.uibindings.utils.IFormCreatorChooser; import com.rcpcompany.uibindings.utils.IFormCreatorChooserCreator; /** * The implementation of {@link IFormChooser}. * * @author Tonny Madsen, The RCP Company */ public class FormCreatorChooser implements IFormCreatorChooser, IDisposable { protected final IFormCreator myForm; protected final IFormChooser myChooser; /** * Constructs and returns a new chooser * * @param form the form * @param discriminant the discriminant * @param top the top composite for the children */ public FormCreatorChooser(IFormCreator form, IObservableValue discriminant, Composite top) { myForm = form; myChooser = IFormChooser.Factory.create(form.getContext(), discriminant, top); } private IFormChooserCreator createCreator(final IFormCreatorChooserCreator creator) { return new IFormChooserCreator() { @Override public void createForm(IBindingContext context, IObservableValue discriminant, Composite parent) { final IFormCreator subForm = myForm.subForm(parent); creator.createForm(discriminant, subForm); subForm.finish(); } }; } @Override public void addForm(IFormChooserTester tester, IFormCreatorChooserCreator creator) { myChooser.addForm(tester, createCreator(creator)); } @Override public void addFormEClass(EClass clz, IFormCreatorChooserCreator creator) { myChooser.addFormEClass(clz, createCreator(creator)); } @Override public void addFormExactEClass(EClass clz, IFormCreatorChooserCreator creator) { myChooser.addFormExactEClass(clz, createCreator(creator)); } @Override public void addFormInstanceof(Class<?> clz, IFormCreatorChooserCreator creator) { myChooser.addFormInstanceof(clz, createCreator(creator)); } @Override public void addFormValue(Object value, IFormCreatorChooserCreator creator) { myChooser.addFormValue(value, createCreator(creator)); } @Override public void dispose() { myChooser.dispose(); } }