blob: 44f64089f8f460b3b906e83bb5c0e500163da0a6 [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.importing.wizards;
import org.eclipse.epf.importing.ImportResources;
import org.eclipse.epf.importing.services.ConfigurationImportData;
import org.eclipse.epf.library.util.LibraryUtil;
import org.eclipse.epf.uma.MethodLibrary;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
/**
* Displays the before and after method library differences for an import
* operation.
*
* @author Jinhua Xi
* @author Kelvin Low
* @since 1.0
*/
public class DiffReportViewer {
protected Composite parent;
protected CheckboxTreeViewer treeViewer;
ConfigurationImportData data;
/**
* Creates a new instance.
*/
DiffReportViewer(Composite parent, ConfigurationImportData data) {
this.parent = parent;
this.data = data;
treeViewer = new CheckboxTreeViewer(parent);
treeViewer.getControl()
.setLayoutData(new GridData(GridData.FILL_BOTH));
treeViewer.setContentProvider(new DiffReportContentProvider());
treeViewer.setLabelProvider(new DiffReportLabelProvider());
createTableColumns();
addListeners();
}
/**
* Creates the table columns.
*/
private void createTableColumns() {
Tree tree = treeViewer.getTree();
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
TreeColumn column = new TreeColumn(tree, SWT.NONE, 0);
column.setText(ImportResources.DiffReportViewer_content);
column.setWidth(200);
column = new TreeColumn(tree, SWT.NONE, 1);
column.setText(ImportResources.DiffReportViewer_type);
column.setWidth(150);
column = new TreeColumn(tree, SWT.NONE, 2);
column.setText(ImportResources.DiffReportViewer_in_import);
column.setWidth(75);
column = new TreeColumn(tree, SWT.NONE, 3);
column.setText(ImportResources.DiffReportViewer_in_lib);
column.setWidth(75);
column = new TreeColumn(tree, SWT.NONE, 4);
column.setText(ImportResources.DiffReportViewer_status);
column.setWidth(100);
}
/**
* Displays the reviw.
*/
public void showReport(Object input) {
treeViewer.getTree().setVisible(false);
treeViewer.setInput(input);
setCheckStates();
treeViewer.expandAll();
treeViewer.getTree().setVisible(true);
}
private void addListeners() {
// add a check state change listener
treeViewer.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
boolean checked = event.getChecked();
updateCheckStates(event.getElement(), checked);
}
});
}
private void updateCheckStates(Object element, boolean checked) {
// Object element = event.getElement();
if (checked == true) {
ITreeContentProvider cp = (ITreeContentProvider) treeViewer
.getContentProvider();
checkParent(cp, element);
// treeViewer.setChecked(element, true);
}
else
treeViewer.setChecked(element, false);
selectionChildren(element, checked);
setData(treeViewer.getCheckedElements());
}
/**
* @param element
* @param checked
*/
public void selectionChildren(Object element, boolean checked) {
ITreeContentProvider cp = (ITreeContentProvider) treeViewer
.getContentProvider();
Object[] childs = cp.getChildren(element);
for (int i = 0; i < childs.length; i++) {
treeViewer.setChecked(childs[i], checked);
selectionChildren(childs[i], checked);
}
}
private void checkParent(ITreeContentProvider cp, Object element) {
if (element == null || element instanceof MethodLibrary /*
* || element ==
* currentRootNode
*/) {
return;
}
Object parent = LibraryUtil.unwrap(cp.getParent(element));
if (parent != null) {
treeViewer.setChecked(parent, true);
// configFactory.getCurrentConfiguration().add((EObject)parent,
// false);
checkParent(cp, parent);
}
}
private void setCheckStates() {
treeViewer.getTree().setVisible(false);
try {
Object element = treeViewer.getInput();
selectionChildren(element, true);
} finally {
treeViewer.getTree().setVisible(true);
}
setData(treeViewer.getCheckedElements());
}
private void setData(Object[] sels) {
if ( sels == null ) {
return;
}
data.importList.clear();
for ( int i = 0; i < sels.length; i++ ) {
data.importList.add(sels[i]);
}
}
}