//------------------------------------------------------------------------------ // 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.HashMap; import java.util.Map; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.epf.authoring.ui.editors.ColumnDescriptor; import org.eclipse.epf.authoring.ui.providers.ExposedAdapterFactoryContentProvider; import org.eclipse.epf.authoring.ui.views.ProcessViewer; import org.eclipse.epf.common.preferences.IPreferenceStoreWrapper; import org.eclipse.epf.library.LibraryPlugin; import org.eclipse.epf.library.edit.process.IBSItemProvider; import org.eclipse.epf.library.edit.process.IColumnAware; import org.eclipse.epf.uma.Activity; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; /** * The rollup section for activity * * @author Shilpa Toraskar * @since 1.0 * */ public abstract class ActivityRollupSection extends AbstractSection { // controls private FormToolkit toolkit; protected Section section; private Composite rollupComposite; private ProcessViewer viewer; // private TabbedPropertySheetPage tabbedPropertySheetPage; // element private Activity element; // action manager // protected IActionManager actionMgr; protected IPreferenceStoreWrapper store; protected ColumnDescriptor[] columnDescriptors; protected ComposedAdapterFactory adapterFactory; private RollupLabelProvider labelProvider; private IContentProvider contentProvider; private class RollupLabelProvider extends AdapterFactoryLabelProvider { public RollupLabelProvider(AdapterFactory factory) { super(factory); } public String getColumnText(Object object, int columnIndex) { ColumnDescriptor columnDesc = columnDescriptors[columnIndex]; String columnText = super.getColumnText(object, columnIndex); if (columnDesc.id == IBSItemProvider.COL_IS_EVENT_DRIVEN || columnDesc.id == IBSItemProvider.COL_IS_ONGOING || columnDesc.id == IBSItemProvider.COL_IS_OPTIONAL || columnDesc.id == IBSItemProvider.COL_IS_PLANNED || columnDesc.id == IBSItemProvider.COL_IS_REPEATABLE || columnDesc.id == IBSItemProvider.COL_HAS_MULTIPLE_OCCURRENCES) { if (columnText.trim().equals(new Boolean(true).toString())) { return PropertiesResources.true_text; } else if (columnText.trim().equals( new Boolean(false).toString())) { return PropertiesResources.false_text; } } return columnText; } }; /** * Initialize * */ private void init() { // get Activity object element = (Activity) getElement(); // get toolkit toolkit = getWidgetFactory(); // get preference store store = LibraryPlugin.getDefault().getPreferenceStore(); } /** * @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 rollup section createRollupSection(parent); } /** * Create rollup section on the composite * @param composite */ private void createRollupSection(Composite composite) { // create section section = FormUI .createSection(toolkit, composite, PropertiesResources.Activity_WorkRollup, PropertiesResources.Activity_WorkRollupDescription); // create rollup composite rollupComposite = FormUI.createComposite(toolkit, section, 2, false); // set section labels setSectionLabels(); // create viewer viewer = new ProcessViewer(rollupComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); gridData.verticalIndent = 10; // gridData.heightHint = 600; viewer.getControl().setLayoutData(gridData); // initAdapterFactory initAdapterFactory(); // set up columns viewer.setupColumns(columnDescriptors); setColumnIndexToNameMap(adapterFactory, columnDescriptors); // set up providers contentProvider = new ExposedAdapterFactoryContentProvider(adapterFactory); labelProvider = new RollupLabelProvider(adapterFactory); viewer.setContentProvider(contentProvider); viewer.setLabelProvider(labelProvider); // do roll up rollUp(); } private void rollUp() { // set up columns viewer.setInput(element); IBSItemProvider adapter = (IBSItemProvider) adapterFactory.adapt( element, ITreeItemContentProvider.class); adapter.setRolledUp(true); viewer.refresh(); } private static void setColumnIndexToNameMap(AdapterFactory factory, ColumnDescriptor[] columnDescriptors) { Map columnIndexToNameMap = new HashMap(); for (int i = 0; i < columnDescriptors.length; i++) { columnIndexToNameMap.put(new Integer(i), columnDescriptors[i].id); } ((IColumnAware) factory).setColumnIndexToNameMap(columnIndexToNameMap); } /** * @see org.eclipse.epf.authoring.ui.properties.AbstractSection#dispose() */ public void dispose() { super.dispose(); if (adapterFactory != null) { adapterFactory.dispose(); } if (labelProvider != null) { labelProvider.dispose(); } if (contentProvider != null) { contentProvider.dispose(); } } /** * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#refresh() */ public void refresh() { try { // get Activity object if (getElement() instanceof Activity) { element = (Activity) getElement(); rollUp(); } } catch (Exception ex) { logger.logError( "Error refreshing activity work roll up section", ex); //$NON-NLS-1$ } } /** * Initialize adapter factory * */ protected abstract void initAdapterFactory(); /** * Set label for the section * */ protected abstract void setSectionLabels(); }