blob: fcfb5f664d99b903d3994b930c652a4018f0aab5 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2009 Red Hat
* 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:
* Rob Stryker - initial implementation and ongoing maintenance
******************************************************************************/
package org.eclipse.wst.common.componentcore.ui.internal.propertypage;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.ui.ModuleCoreUIPlugin;
import org.eclipse.wst.common.componentcore.ui.propertypage.AddModuleDependenciesPropertiesPage;
import org.eclipse.wst.common.componentcore.ui.propertypage.AddModuleDependenciesPropertiesPage.ComponentResourceProxy;
/*
* The only valid elements this content provider (should) provide
* are IProject or IVirtualComponent objects. The runtime paths portion is
* shared with the preference page itself where they can both modify the data.
*
* This provider no longer "meddles" in to the content as it used to,
* but rather serves as only a view of it.
*/
public class ComponentDependencyContentProvider extends LabelProvider implements IStructuredContentProvider, ITableLabelProvider {
final static String PATH_SEPARATOR = String.valueOf(IPath.SEPARATOR);
private HashMap<IVirtualComponent, String> runtimePaths;
private ArrayList<ComponentResourceProxy> resourceMappings;
private DecoratingLabelProvider decProvider = new DecoratingLabelProvider(
new WorkbenchLabelProvider(), PlatformUI.getWorkbench().
getDecoratorManager().getLabelDecorator());
private IVirtualComponentLabelProvider[] delegates;
public ComponentDependencyContentProvider(AddModuleDependenciesPropertiesPage addModuleDependenciesPropertiesPage) {
super();
decProvider.addListener(addModuleDependenciesPropertiesPage);
delegates = DependencyPageExtensionManager.loadDelegates();
}
public void setRuntimePaths(HashMap<IVirtualComponent, String> paths) {
this.runtimePaths = paths;
}
public void setResourceMappings(ArrayList<ComponentResourceProxy> mappings) {
this.resourceMappings = mappings;
}
public Object[] getElements(Object inputElement) {
Object[] empty = new Object[0];
if( !(inputElement instanceof IWorkspaceRoot))
return empty;
ArrayList<Object> list = new ArrayList<Object>();
list.addAll(resourceMappings);
list.addAll(runtimePaths.keySet());
return list.toArray();
}
public Image getColumnImage(Object element, int columnIndex) {
if( element instanceof ComponentResourceProxy) {
return ModuleCoreUIPlugin.getInstance().getImage("folder");
}
if (element instanceof IVirtualComponent) {
if (columnIndex == 0)
return ModuleCoreUIPlugin.getInstance().getImage("jar_obj");
else
return handleSourceImage((IVirtualComponent)element);
}
if (element instanceof IProject){
return decProvider.getImage(element);
}
return null;
}
public String getColumnText(Object element, int columnIndex) {
if( element instanceof ComponentResourceProxy) {
if( columnIndex == 0 )
return ((ComponentResourceProxy)element).runtimePath.toString();
else if( columnIndex == 1 )
return ((ComponentResourceProxy)element).source.toString();
}
if (element instanceof IVirtualComponent) {
IVirtualComponent comp = (IVirtualComponent)element;
if (columnIndex == 0) {
if( runtimePaths == null || runtimePaths.get(element) == null) {
return new Path(PATH_SEPARATOR).toString();
}
return runtimePaths.get(element);
} else if (columnIndex == 1) {
return handleSourceText(comp);
}
} else if (element instanceof IProject){
if (columnIndex == 0) {
if( runtimePaths == null || runtimePaths.get(element) == null) {
return new Path(PATH_SEPARATOR).toString();
}
return runtimePaths.get(element);
}
return ((IProject)element).getName();
}
return null;
}
private String handleSourceText(IVirtualComponent component) {
if( delegates != null ) {
for( int i = 0; i < delegates.length; i++ )
if( delegates[i].canHandle(component))
return delegates[i].getSourceText(component);
}
// default impl
if( component.isBinary() && component instanceof VirtualArchiveComponent) {
IPath p = ((VirtualArchiveComponent)component).getWorkspaceRelativePath();
if( p == null )
p = new Path(((VirtualArchiveComponent)component).getUnderlyingDiskFile().getAbsolutePath());
return p.toString();
}
return component.getProject().getName();
}
private Image handleSourceImage(IVirtualComponent component) {
if( delegates != null ) {
for( int i = 0; i < delegates.length; i++ )
if( delegates[i].canHandle(component))
return delegates[i].getSourceImage(component);
}
// default impl
if(component.isBinary())
return ModuleCoreUIPlugin.getInstance().getImage("jar_obj");
else return decProvider.getImage(component.getProject());
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
}