| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 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 implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.authoring.ui.properties; |
| |
| import java.util.ArrayList; |
| |
| import org.eclipse.emf.edit.provider.ItemProviderAdapter; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| import org.eclipse.epf.authoring.ui.filters.DescriptorConfigurationFilter; |
| import org.eclipse.epf.authoring.ui.filters.ProcessRoleFilter; |
| import org.eclipse.epf.library.edit.IFilter; |
| import org.eclipse.epf.library.edit.TngAdapterFactory; |
| import org.eclipse.epf.library.edit.command.IActionManager; |
| import org.eclipse.epf.library.edit.itemsfilter.FilterConstants; |
| import org.eclipse.epf.library.edit.process.IBSItemProvider; |
| import org.eclipse.epf.uma.BreakdownElement; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredContentProvider; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.swt.events.FocusAdapter; |
| import org.eclipse.swt.events.FocusEvent; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.Section; |
| import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; |
| |
| |
| /** |
| * The base OBS relation section |
| * |
| * @author Shilpa Toraskar |
| * @since 1.0 |
| * |
| */ |
| public class OBSRelationSection extends AbstractSection { |
| protected IStructuredContentProvider contentProvider = null; |
| |
| protected ILabelProvider labelProvider = new AdapterFactoryLabelProvider( |
| TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory()); |
| |
| private FormToolkit toolkit; |
| |
| private Button ctrl_add_1, ctrl_add_2, ctrl_remove; |
| |
| private Table ctrl_selected; |
| |
| protected TableViewer viewer; |
| |
| private String title; |
| |
| private String desc; |
| |
| private String table1; |
| |
| // element |
| protected BreakdownElement element; |
| |
| // action manager |
| protected IActionManager actionMgr; |
| |
| // by default this button is false |
| protected boolean showAddFromProcessButton = false; |
| |
| // filter |
| private IFilter filter = null; |
| |
| public IFilter getFilter() { |
| if (filter == null) { |
| filter = new ProcessRoleFilter(getConfiguration(), null, |
| FilterConstants.ROLES); |
| } else if (filter instanceof DescriptorConfigurationFilter) { |
| ((DescriptorConfigurationFilter) filter).setMethodConfiguration(getConfiguration()); |
| } |
| return filter; |
| } |
| |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.properties.AbstractSection#createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage) |
| */ |
| public void createControls(Composite parent, |
| TabbedPropertySheetPage tabbedPropertySheetPage) { |
| |
| super.createControls(parent, tabbedPropertySheetPage); |
| init(); |
| |
| parent.setLayout(new GridLayout()); |
| parent.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| // create section |
| createSection(parent); |
| |
| // add listeners |
| addListeners(); |
| |
| // update controls |
| updateControls(); |
| |
| } |
| |
| /** |
| * Initialize |
| */ |
| protected void init() { |
| // get breakdownelement object |
| element = (BreakdownElement) getElement(); |
| |
| // get toolkit |
| toolkit = getWidgetFactory(); |
| |
| // get action manager |
| actionMgr = EPFPropertySheetPage.getActionManager(); |
| } |
| |
| protected void setTabData(String title, String desc, String table1) { |
| this.title = title; |
| this.desc = desc; |
| this.table1 = table1; |
| } |
| |
| private void createSection(Composite parent) { |
| // create section |
| Section aSection = FormUI.createSection(toolkit, parent, |
| title, desc); |
| |
| // create general composite |
| Composite composite = FormUI.createComposite(toolkit, aSection, 2, |
| false); |
| |
| // create table composite |
| Composite pane1 = FormUI.createComposite(toolkit, composite, |
| GridData.FILL_BOTH); |
| FormUI.createLabel(toolkit, pane1, table1); |
| |
| ctrl_selected = FormUI.createTable(toolkit, pane1); |
| viewer = new TableViewer(ctrl_selected); |
| |
| initContentProvider(); |
| |
| viewer.setLabelProvider(labelProvider); |
| viewer.setInput(element); |
| |
| // create button composite |
| Composite pane2 = FormUI.createComposite(toolkit, composite, |
| GridData.VERTICAL_ALIGN_CENTER |
| | GridData.HORIZONTAL_ALIGN_CENTER); |
| |
| // create buttons |
| ctrl_add_1 = FormUI.createButton(toolkit, pane2, PropertiesResources.Process_Add); |
| if (showAddFromProcessButton) { |
| ctrl_add_2 = FormUI.createButton(toolkit, pane2, |
| PropertiesResources.Process_AddFromProcess); |
| } |
| ctrl_remove = FormUI.createButton(toolkit, pane2, PropertiesResources.Process_Remove); |
| |
| toolkit.paintBordersFor(composite); |
| toolkit.paintBordersFor(pane1); |
| toolkit.paintBordersFor(pane2); |
| |
| } |
| |
| /** |
| * Get Default configuration |
| * |
| * @return MethodConfiguration |
| */ |
| protected MethodConfiguration getDefaultConfiguration() { |
| ItemProviderAdapter adapter = (ItemProviderAdapter) getAdapter(); |
| Object parent = null; |
| if (adapter instanceof IBSItemProvider) { |
| IBSItemProvider bsItemProvider = (IBSItemProvider) adapter; |
| parent = bsItemProvider.getTopItem(); |
| MethodConfiguration config = ((org.eclipse.epf.uma.Process) parent) |
| .getDefaultContext(); |
| return config; |
| } else { |
| logger |
| .logError("OBSRelationSection::getDefaultConfiguration - IBSItemProvider is null"); //$NON-NLS-1$ |
| return null; |
| } |
| } |
| |
| /** |
| * Add listeners |
| * |
| */ |
| private void addListeners() { |
| // Add focus listener on primary tasks list |
| ctrl_selected.addFocusListener(new FocusAdapter() { |
| public void focusGained(FocusEvent e) { |
| IStructuredSelection selection = (IStructuredSelection) viewer |
| .getSelection(); |
| if ((selection.size() > 0) && editable) |
| ctrl_remove.setEnabled(true); |
| } |
| }); |
| |
| viewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| |
| public void selectionChanged(SelectionChangedEvent event) { |
| IStructuredSelection selection = (IStructuredSelection) viewer |
| .getSelection(); |
| if ((selection.size() > 0) && editable) |
| ctrl_remove.setEnabled(true); |
| } |
| }); |
| |
| ctrl_add_1.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| openAddDialog(); |
| viewer.refresh(); |
| } |
| }); |
| |
| if (showAddFromProcessButton) { |
| ctrl_add_2.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| openAddFromProcessDialog(); |
| viewer.refresh(); |
| } |
| }); |
| } |
| |
| ctrl_remove.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| IStructuredSelection selection = (IStructuredSelection) viewer |
| .getSelection(); |
| if (selection.size() > 0) { |
| // update the model |
| ArrayList rmItems = new ArrayList(); |
| rmItems.addAll(selection.toList()); |
| remove(rmItems); |
| viewer.refresh(); |
| |
| // clear the selection |
| viewer.setSelection(null, true); |
| } |
| ctrl_remove.setEnabled(false); |
| } |
| }); |
| } |
| |
| public void updateControls() { |
| // System.out.println("Element "+element.getName() + |
| // "Editable-"+editable); |
| if (ctrl_add_1 != null) |
| ctrl_add_1.setEnabled(editable); |
| if (ctrl_add_2 != null) |
| ctrl_add_2.setEnabled(editable); |
| |
| IStructuredSelection selection = (IStructuredSelection) viewer |
| .getSelection(); |
| if (selection.size() > 0 && editable) { |
| if (ctrl_remove != null) |
| ctrl_remove.setEnabled(true); |
| } else { |
| if (ctrl_remove != null) |
| ctrl_remove.setEnabled(false); |
| } |
| |
| } |
| |
| /** |
| * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#refresh() |
| */ |
| public void refresh() { |
| updateControls(); |
| |
| super.refresh(); |
| } |
| |
| /** |
| * Get parent activity |
| * |
| * @param element |
| * @return |
| */ |
| // protected Activity getParentActivity(BreakdownElement element) |
| // { |
| // Activity activity = null; |
| // AdapterFactory aFactory = |
| // TngAdapterFactory.INSTANCE.getOBS_ComposedAdapterFactory(); |
| // ItemProviderAdapter adapter = (ItemProviderAdapter) |
| // aFactory.adapt(element, ITreeItemContentProvider.class); |
| // Object parent = adapter.getParent(element); |
| // if (parent instanceof Activity) |
| // { |
| // activity = (Activity) parent; |
| // } |
| // |
| // return activity; |
| // } |
| |
| /** |
| * Initialize content provider |
| */ |
| protected void initContentProvider() { |
| } |
| |
| /** |
| * Open UI Dialog to add method elements |
| * |
| */ |
| protected void openAddDialog() { |
| } |
| |
| /** |
| * Open UI Dialog to add descriptor elements |
| * |
| */ |
| protected void openAddFromProcessDialog() { |
| } |
| |
| // protected void add(Object[] items) {} |
| protected void remove(ArrayList rmItems) { |
| } |
| |
| /** |
| * Dispose |
| * |
| */ |
| public void disose() { |
| super.dispose(); |
| if (labelProvider != null) { |
| labelProvider.dispose(); |
| } |
| if (contentProvider != null) { |
| contentProvider.dispose(); |
| } |
| } |
| |
| } |