| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2007 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.library.ui.views; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; |
| import org.eclipse.epf.library.LibraryServiceUtil; |
| import org.eclipse.epf.library.edit.LibraryEditPlugin; |
| import org.eclipse.epf.library.edit.util.TngUtil; |
| import org.eclipse.epf.library.ui.LibraryUIResources; |
| import org.eclipse.epf.uma.CapabilityPattern; |
| import org.eclipse.epf.uma.DeliveryProcess; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.Process; |
| import org.eclipse.epf.uma.util.UmaUtil; |
| import org.eclipse.jface.viewers.ITreeContentProvider; |
| import org.eclipse.jface.viewers.Viewer; |
| |
| /** |
| * The content provider for a process tree. |
| * <p> |
| * Displays the tree in the following hierarchy: |
| * <ul> |
| * <li>method_plugin_1</li> |
| * <ul> |
| * <li>"Capability Patterns" UI folder</li> |
| * <ul> |
| * <li>capability_pattern_1</li> |
| * <li>capability_pattern_2</li> |
| * </ul> |
| * </li> |
| * <li>"Delivery Processes" UI folder</li> |
| * <ul> |
| * <li>delivery_process_1</li> |
| * <li>delivery_process_2</li> |
| * </ul> |
| * </li> |
| * </ul> |
| * </li> |
| * <li>method_plugin_2</li> |
| * <ul> |
| * <li>"Capability Patterns" UI folder</li> |
| * </li> |
| * <li>"Delivery Processes" UI folder</li> |
| * </li> |
| * </ul> |
| * </li> |
| * </ul> |
| * |
| * @author Kelvin Low |
| * @since 1.2 |
| */ |
| public class ProcessTreeContentProvider implements ITreeContentProvider { |
| |
| protected static final String CAPABILITY_PATTERNS = LibraryUIResources.capabilityPattern_text_plural; |
| |
| protected static final String DELIVERY_PROCESSES = LibraryUIResources.deliveryProcess_text_plural; |
| |
| protected static final Object[] EMPTY_LIST = new Object[0]; |
| |
| protected Map<MethodPlugin, ProcessTreeUIFolder> capabilityPatternUIFolders = new HashMap<MethodPlugin, ProcessTreeUIFolder>(); |
| |
| protected Map<MethodPlugin, ProcessTreeUIFolder> deliveryProcessUIFolders = new HashMap<MethodPlugin, ProcessTreeUIFolder>(); |
| |
| /** |
| * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(Object) |
| */ |
| public Object[] getChildren(Object parentElement) { |
| if (parentElement instanceof MethodLibrary) { |
| List<Object> children = new ArrayList<Object>(); |
| List<MethodPlugin> plugins = ((MethodLibrary) parentElement) |
| .getMethodPlugins(); |
| for (Iterator<MethodPlugin> it = plugins.iterator(); it.hasNext();) { |
| MethodPlugin plugin = it.next(); |
| List<Process> processes = TngUtil.getAllProcesses(plugin); |
| if (processes.size() > 0) { |
| children.add(plugin); |
| } |
| } |
| return children.toArray(); |
| } else if (parentElement instanceof MethodPlugin) { |
| MethodPlugin plugin = (MethodPlugin) parentElement; |
| |
| ProcessTreeUIFolder capabilityPatternUIFolder = capabilityPatternUIFolders |
| .get(plugin); |
| if (capabilityPatternUIFolder == null) { |
| capabilityPatternUIFolder = new ProcessTreeUIFolder( |
| CAPABILITY_PATTERNS, |
| ExtendedImageRegistry.getInstance().getImage(LibraryEditPlugin.INSTANCE |
| .getImage("full/obj16/CapabilityPatterns")), parentElement); //$NON-NLS-1$ |
| capabilityPatternUIFolders.put(plugin, |
| capabilityPatternUIFolder); |
| } |
| |
| ProcessTreeUIFolder deliveryProcessUIFolder = deliveryProcessUIFolders |
| .get(plugin); |
| if (deliveryProcessUIFolder == null) { |
| deliveryProcessUIFolder = new ProcessTreeUIFolder( |
| DELIVERY_PROCESSES, |
| ExtendedImageRegistry.getInstance().getImage(LibraryEditPlugin.INSTANCE |
| .getImage("full/obj16/DeliveryProcesses")), parentElement); //$NON-NLS-1$ |
| deliveryProcessUIFolders.put(plugin, deliveryProcessUIFolder); |
| } |
| |
| return new Object[] { capabilityPatternUIFolder, |
| deliveryProcessUIFolder }; |
| } else if (parentElement instanceof ProcessTreeUIFolder) { |
| ProcessTreeUIFolder uiFolder = (ProcessTreeUIFolder) parentElement; |
| MethodPlugin plugin = (MethodPlugin) uiFolder.getParent(); |
| if (uiFolder.getName() == CAPABILITY_PATTERNS) { |
| return LibraryServiceUtil.getCapabilityPatterns(plugin) |
| .toArray(); |
| } else { |
| return LibraryServiceUtil.getDeliveryProcesses(plugin) |
| .toArray(); |
| } |
| } |
| return EMPTY_LIST; |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(Object) |
| */ |
| public Object getParent(Object element) { |
| if (element instanceof ProcessTreeUIFolder) { |
| return ((ProcessTreeUIFolder) element).getParent(); |
| } else if (element instanceof CapabilityPattern) { |
| MethodPlugin plugin = UmaUtil |
| .getMethodPlugin((CapabilityPattern) element); |
| return capabilityPatternUIFolders.get(plugin); |
| } else if (element instanceof DeliveryProcess) { |
| MethodPlugin plugin = UmaUtil |
| .getMethodPlugin((DeliveryProcess) element); |
| return deliveryProcessUIFolders.get(plugin); |
| } |
| return null; |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(Object) |
| */ |
| public boolean hasChildren(Object element) { |
| return getChildren(element).length > 0; |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(Object) |
| */ |
| public Object[] getElements(Object inputElement) { |
| return getChildren(inputElement); |
| } |
| |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| capabilityPatternUIFolders.clear(); |
| deliveryProcessUIFolders.clear(); |
| } |
| |
| public void dispose() { |
| } |
| |
| } |