/******************************************************************************* * Copyright (c) 2005, 2012 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.bpel.ui.properties; import org.eclipse.bpel.common.ui.details.viewers.CComboViewer; import org.eclipse.bpel.common.ui.flatui.FlatFormAttachment; import org.eclipse.bpel.common.ui.flatui.FlatFormData; import org.eclipse.bpel.model.Activity; import org.eclipse.bpel.model.CompensateScope; import org.eclipse.bpel.ui.IHelpContextIds; import org.eclipse.bpel.ui.Messages; import org.eclipse.bpel.ui.commands.CompoundCommand; import org.eclipse.bpel.ui.commands.SetCompensateCommand; import org.eclipse.bpel.ui.details.providers.AddNullFilter; import org.eclipse.bpel.ui.details.providers.AddSelectedObjectFilter; import org.eclipse.bpel.ui.details.providers.CompensableActivityContentProvider; import org.eclipse.bpel.ui.details.providers.ModelLabelProvider; import org.eclipse.bpel.ui.util.BPELUtil; import org.eclipse.bpel.ui.util.MultiObjectAdapter; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.commands.Command; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.PlatformUI; /** * Details section for the Compensate properties of a * Compensate activity. */ public class CompensateScopeSection extends BPELPropertySection { protected Composite parentComposite; protected Composite activityComposite; protected Label activityLabel; protected CComboViewer activityViewer; protected AddSelectedObjectFilter addSelectedObjectFilter; /** * Brand new shiny compensate scope section. */ public CompensateScopeSection(){ super(); } @Override protected MultiObjectAdapter[] createAdapters() { return new MultiObjectAdapter[] { new MultiObjectAdapter(){ @Override public void notify(Notification n) { // TODO: isCompensateAffected() ? refresh(); } }, }; } protected void createActivityWidgets(Composite parent) { FlatFormData data; final Composite composite = activityComposite = createFlatFormComposite(parent); data = new FlatFormData(); data.top = new FlatFormAttachment(0, 0); data.left = new FlatFormAttachment(0, 0); composite.setLayoutData(data); activityLabel = fWidgetFactory.createLabel(composite, Messages.CompensateImplDetails_Activity__10); CCombo activityCombo = fWidgetFactory.createCCombo(composite); data = new FlatFormData(); data.left = new FlatFormAttachment(0, BPELUtil.calculateLabelWidth(activityLabel, STANDARD_LABEL_WIDTH_SM)); activityCombo.setLayoutData(data); activityViewer = new CComboViewer(activityCombo); activityViewer.addFilter(AddNullFilter.getInstance()); activityViewer.setLabelProvider(new ModelLabelProvider()); activityViewer.setContentProvider(new CompensableActivityContentProvider()); // TODO: should this have a sorter? Probably not? addSelectedObjectFilter = new AddSelectedObjectFilter(); activityViewer.addFilter(addSelectedObjectFilter); activityViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection sel = (IStructuredSelection)activityViewer.getSelection(); EObject compensate = (EObject) sel.getFirstElement(); CompensateScope compensateScope = getInput(); if (compensate instanceof Activity) { compensateScope.setTarget( (Activity) compensate); CompoundCommand cmd = new CompoundCommand(); Command child = new SetCompensateCommand(compensateScope, (Activity) compensate); if (child.canExecute()) { cmd.add(child); } } } }); activityViewer.setInput(getInput()); } @Override protected void createClient(Composite parent) { Composite composite = parentComposite = createFlatFormComposite(parent); createActivityWidgets(composite); PlatformUI.getWorkbench().getHelpSystem().setHelp( parentComposite, IHelpContextIds.PROPERTY_PAGE_COMPENSATE_IMPLEMENTATION); } /** * @see org.eclipse.bpel.ui.properties.BPELPropertySection#refresh() */ @Override public void refresh() { super.refresh(); CompensateScope compensateScope = getInput(); Activity targetActivity = compensateScope.getTarget(); addSelectedObjectFilter.setSelectedObject( targetActivity ); activityViewer.setInput(getInput()); refreshCCombo(activityViewer, targetActivity); } /** * @see org.eclipse.bpel.ui.properties.BPELPropertySection#getUserContext() */ @Override public Object getUserContext() { return null; } /** * @see org.eclipse.bpel.ui.properties.BPELPropertySection#getUserContext() */ @Override public void restoreUserContext(Object userContext) { activityViewer.getCCombo().setFocus(); } }