| //------------------------------------------------------------------------------ |
| // 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]); |
| } |
| } |
| } |