blob: bf8b67bd5440cbe01d70ab831bba7c25e9cac5ea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012-2014 SAP SE.
* 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:
* SAP SE - initial API and implementation and/or initial documentation
*
*******************************************************************************/
package org.eclipse.ogee.navigation.tree;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.ogee.model.edit.odata.provider.OdataItemProviderAdapterFactory;
import org.eclipse.ogee.utils.logger.Logger;
import org.eclipse.swt.graphics.Image;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
public class MNViewLabelProvider extends AdapterFactoryLabelProvider implements
ILightweightLabelDecorator {
public MNViewLabelProvider() {
super(new OdataItemProviderAdapterFactory());
}
public Image getImage(Object element) {
if (element instanceof ReferencedSchemasFolder)
return ReferencedSchemasFolder.getImage();
IItemLabelProvider labelProvider = (IItemLabelProvider) this.adapterFactory
.adapt(element, IItemLabelProvider.class);
if ((labelProvider != null)
&& (labelProvider.getImage(element) != null)) {
URL url = (URL) labelProvider.getImage(element);
Image image = this.getImage(url);
return image;
}
return super.getImage(element);
}
public String getText(Object element) {
if (element instanceof ReferencedSchemasFolder) {
return ((ReferencedSchemasFolder) element).getLabel();
}
IItemLabelProvider labelProvider = (IItemLabelProvider) this.adapterFactory
.adapt(element, IItemLabelProvider.class);
if (labelProvider != null) {
String ret = labelProvider.getText(element);
return ret;
}
return super.getText(element);
}
private Image getImage(URL imageURL) {
Image image = null;
ImageRegistry registry = Activator.getDefault().getImageRegistry();
image = registry.get(imageURL.getPath());
if (image != null) {
return image;
}
ImageDescriptor desc = ImageDescriptor.createFromURL(imageURL);
registry.put(imageURL.getPath(), desc);
image = registry.get(imageURL.getPath());
return image;
}
@Override
public void decorate(Object element, IDecoration decoration) {
IMarker[] problems = null;
EObject eObject = (EObject) element;
String eObjectURI = EcoreUtil.getURI(eObject).toString();
List<String> eObjectURIs = new LinkedList<String>();
eObjectURIs.add(eObjectURI);
// in case a child element has error markers, its parent displays error
// markers as well
TreeIterator<EObject> iterator = eObject.eAllContents();
while (iterator.hasNext()) {
eObjectURI = EcoreUtil.getURI(iterator.next()).toString();
eObjectURIs.add(eObjectURI);
}
int markerPriority = 0;
IResource res = getResourceFromEObject(eObject);
if (res != null) {
int depth = IResource.DEPTH_INFINITE;
try {
problems = res.findMarkers(IMarker.PROBLEM, true, depth);
} catch (CoreException e) {
Logger.getFrameworkLogger()
.logError(
Messages.MNViewLabelProvider_ProblemMarkers_RetrievalException,
e);
}
if (problems == null) {
return;
}
String markerSourceId = ""; //$NON-NLS-1$
for (int i = 0; i < problems.length; i++) {
try {
markerSourceId = (String) problems[i]
.getAttribute(IMarker.SOURCE_ID);
} catch (CoreException e) {
Logger.getFrameworkLogger()
.logError(
Messages.MNViewLabelProvider_ProblemMarkers_SourceRetrievalException,
e);
}
if (eObjectURIs.contains(markerSourceId)) {
ImageDescriptor descriptor = null;
try {
markerPriority = (Integer) problems[i]
.getAttribute(IMarker.PRIORITY);
} catch (CoreException e) {
Logger.getFrameworkLogger()
.logError(
Messages.MNViewLabelProvider_ProblemMarkers_PriorityRetrievalException,
e);
}
if (markerPriority == IMarker.PRIORITY_HIGH) {
Bundle bundle = FrameworkUtil
.getBundle(this.getClass());
URL url = FileLocator.find(bundle, new Path(
"icons/error_co.gif"), null); //$NON-NLS-1$
descriptor = ImageDescriptor.createFromURL(url);
}
if (markerPriority == IMarker.PRIORITY_NORMAL) {
Bundle bundle = FrameworkUtil
.getBundle(this.getClass());
URL url = FileLocator.find(bundle, new Path(
"icons/warning_co.gif"), null); //$NON-NLS-1$
descriptor = ImageDescriptor.createFromURL(url);
}
if (descriptor != null)
decoration.addOverlay(descriptor,
IDecoration.BOTTOM_LEFT);
}
}
}
}
private IResource getResourceFromEObject(EObject eObject) {
IResource res = null;
Resource eResource = eObject.eResource();
if (eResource != null) {
URI eUri = eResource.getURI();
if (eUri.isPlatformResource()) {
String platformString = eUri.toPlatformString(true);
res = ResourcesPlugin.getWorkspace().getRoot()
.findMember(platformString);
}
}
return res;
}
}