blob: 2512f17b812f7acfd0d19508f586ef2e9b99325e [file] [log] [blame]
//------------------------------------------------------------------------------
// 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.Iterator;
import java.util.List;
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.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* The content provider for the process tree viewer.
*
* @author Kelvin Low
* @since 1.2
*/
public class ProcessTreeContentProvider implements ITreeContentProvider {
private static final String CAPABILITY_PATTERNS = LibraryUIResources.capabilityPattern_text_plural;
private static final String DELIVERY_PROCESSES = LibraryUIResources.deliveryProcess_text_plural;
private static final Object[] EMPTY_LIST = new Object[0];
/**
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(Object)
*/
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof MethodLibrary) {
List children = new ArrayList();
List plugins = ((MethodLibrary) parentElement).getMethodPlugins();
for (Iterator it = plugins.iterator(); it.hasNext();) {
MethodPlugin plugin = (MethodPlugin) it.next();
List processes = TngUtil.getAllProcesses(plugin);
if (processes.size() > 0) {
children.add(plugin);
}
}
return children.toArray();
} else if (parentElement instanceof MethodPlugin) {
return new Object[] {
new ProcessTreeUIFolder(
CAPABILITY_PATTERNS,
LibraryEditPlugin.INSTANCE
.getImage("full/obj16/CapabilityPatterns"), parentElement), //$NON-NLS-1$
new ProcessTreeUIFolder(
DELIVERY_PROCESSES,
LibraryEditPlugin.INSTANCE
.getImage("full/obj16/DeliveryProcesses"), parentElement) //$NON-NLS-1$
};
} else if (parentElement instanceof ProcessTreeUIFolder) {
ProcessTreeUIFolder uiFolder = (ProcessTreeUIFolder) parentElement;
MethodPlugin plugin = (MethodPlugin) uiFolder.getParent();
if (uiFolder.getName() == CAPABILITY_PATTERNS) {
return getCapabilityPatterns(plugin).toArray();
} else {
return getDeliveryProcesses(plugin).toArray();
}
}
return EMPTY_LIST;
}
/**
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(Object)
*/
public Object getParent(Object element) {
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) {
}
public void dispose() {
}
private List getCapabilityPatterns(MethodPlugin plugin) {
List capabilityPatterns = new ArrayList();
List items = TngUtil.getAllProcesses(plugin);
for (Iterator it = items.iterator(); it.hasNext();) {
org.eclipse.epf.uma.Process p = (org.eclipse.epf.uma.Process) it
.next();
if (p instanceof CapabilityPattern) {
capabilityPatterns.add(p);
}
}
return capabilityPatterns;
}
private List getDeliveryProcesses(MethodPlugin plugin) {
List deliveryProcesses = new ArrayList();
List items = TngUtil.getAllProcesses(plugin);
for (Iterator it = items.iterator(); it.hasNext();) {
org.eclipse.epf.uma.Process p = (org.eclipse.epf.uma.Process) it
.next();
if (p instanceof DeliveryProcess) {
deliveryProcesses.add(p);
}
}
return deliveryProcesses;
}
}