/*******************************************************************************
* Copyright (c) 2006-2012
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* 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:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
package org.reuseware.sokan.ui.internal.views;
import java.util.ArrayList;
import java.util.List;
import java.net.URL;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedImage;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.reuseware.sokan.ui.SokanUIPlugin;
import org.reuseware.sokan.ui.views.BasicRepositoryView;
/**
* An adapter factory label provider that marks images
* with warning icon if the marked object represents
* a file with warning/error markers.
*/
public class ErrorMarkingAdapterFactoryLabelProvider extends
AdapterFactoryLabelProvider {
/**
* ID of standard Eclipse marker type:
* <i>org.eclipse.core.resources.problemmarker</i>.
*/
public static final String STD_MARKER_TYPE =
"org.eclipse.core.resources.problemmarker";
private static ImageDescriptor warningImage;
static {
URL url = null;
url = SokanUIPlugin.getDefault().getBundle().getResource(
"icons/warning.gif");
warningImage = ImageDescriptor.createFromURL(url);
}
private BasicRepositoryView basicRepositoryView;
/**
* Constructs a new ErrorMarkingAdapterFactoryLabelProvider.
*
* @param view the repository view
* @param adapterFactory the adapter factory
*/
public ErrorMarkingAdapterFactoryLabelProvider(
BasicRepositoryView view,
ComposedAdapterFactory adapterFactory) {
super(adapterFactory);
this.basicRepositoryView = view;
}
/**
* @param object the object for which to obtain an image
*
* @return the image (overlayed with a warning icon if appropriate)
*/
public Image getImage(Object object) {
Image image = super.getImage(object);
if (!(object instanceof EObject) || image == null) {
return image;
}
IFile file = basicRepositoryView.getFileForElement((EObject) object);
if (file != null) {
IMarker[] markers;
try {
markers = file.findMarkers(STD_MARKER_TYPE, true, 0);
if (markers.length > 0) {
List<Object> images = new ArrayList<Object>(2);
images.add(image);
images.add(warningImage);
return ExtendedImageRegistry.getInstance().getImage(
new ComposedImage(images));
}
} catch (CoreException e) {
//ok
}
}
return image;
}
}