blob: a1c597d19c5a766c63b144a24d3e3c54dbe01ae0 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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();
}