blob: ff432345324f77642edb1864906d3c46b517bfb3 [file] [log] [blame]
/**
* Copyright (c) 2011, 2015 Mia-Software, and Soft-Maint.
*
* 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:
* Gregoire Dupe (Mia-Software) - Bug 361794 - [Restructuring] EMF Facet customization meta-model
* Gregoire Dupe (Mia-Software) - Bug 369987 - [Restructuring][Table] Switch to the new customization and facet framework
* Nicolas Bros (Mia-Software) - Bug 379683 - customizable Tree content provider
* Gregoire Dupe (Mia-Software) - Bug 424122 - [Table] Images, fonts and colors are not shared between the instances of table
* Jonathan Pepin (Soft-Maint) - Bug 469177 - IResolvingCustomizedLabelProviderFactory display no default Image
* Grégoire Dupé (Mia-Software) - Bug 469177 - IResolvingCustomizedLabelProviderFactory display no default Image
*/
package org.eclipse.emf.facet.custom.ui.internal.query;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.ETypedElement;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
import org.eclipse.emf.facet.custom.metamodel.custompt.IImage;
import org.eclipse.emf.facet.custom.ui.internal.Activator;
import org.eclipse.emf.facet.custom.ui.internal.ImageProvider;
import org.eclipse.emf.facet.custom.ui.internal.custompt.ImageWrapper;
import org.eclipse.emf.facet.efacet.core.IFacetManager;
import org.eclipse.emf.facet.efacet.core.exception.DerivedTypedElementException;
import org.eclipse.emf.facet.efacet.metamodel.v0_2_0.efacet.FacetAttribute;
import org.eclipse.emf.facet.efacet.metamodel.v0_2_0.efacet.FacetReference;
import org.eclipse.emf.facet.query.java.core.IJavaQuery2;
import org.eclipse.emf.facet.query.java.core.IParameterValueList2;
import org.eclipse.emf.facet.util.swt.imageprovider.IImageProvider;
import org.eclipse.emf.facet.util.swt.imageprovider.IImageProviderFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
public class ImageQuery implements IJavaQuery2<EObject, IImage> {
public IImage evaluate(final EObject source,
final IParameterValueList2 parameterValues,
final IFacetManager facetManager)
throws DerivedTypedElementException {
IImage result = null;
ETypedElement sfParam = null;
if (parameterValues != null) {
sfParam = (ETypedElement) parameterValues
.getParameterValueByName("eStructuralFeature").getValue(); //$NON-NLS-1$
}
if (sfParam == null) {
result = getEObjectImage(source);
} else {
result = getLinkImage(sfParam);
}
return result;
}
protected static IImage getEObjectImage(final EObject source) {
IImage result = null;
final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory
.adapt(source, IItemLabelProvider.class);
if (itemLabelProvider != null) {
final Object imageObj = itemLabelProvider.getImage(source);
final ImageDescriptor imgDescriptor = ExtendedImageRegistry
.getInstance().getImageDescriptor(imageObj);
final IImageProvider imgProvider = IImageProviderFactory.DEFAULT
.createIImageProvider(Activator.getDefault());
if (imgDescriptor != null) {
final Image image = imgProvider.getImage(imgDescriptor);
result = new ImageWrapper(image);
}
}
return result;
}
/**
* Returns the image for an attribute or reference link.
*
* @param sfParam
* the attribute or reference
* @param source
* the EObject under which the attribute or reference appears
* @return the image
*/
private static IImage getLinkImage(final ETypedElement sfParam) {
Image image = null;
if (sfParam instanceof FacetReference) {
image = ImageProvider.getInstance().getFacetLinkIcon();
} else if (sfParam instanceof EReference) {
image = getReferenceImage((EReference) sfParam);
} else if (sfParam instanceof FacetAttribute) {
image = ImageProvider.getInstance().getFacetAttributeIcon();
} else if (sfParam instanceof EAttribute) {
image = getAttributeImage();
} else {
image = ImageProvider.getInstance().getFeatureIcon();
}
return new ImageWrapper(image);
}
private static Image getReferenceImage(final EReference reference) {
Image result;
final EReference opposite = reference.getEOpposite();
if (reference.isContainment()) {
if (opposite == null) {
result = ImageProvider.getInstance().getUnidirectionalAggregIcon();
} else {
result = ImageProvider.getInstance().getAggregIcon();
}
} else {
if (opposite != null && opposite.isContainment()) {
result = ImageProvider.getInstance().getInvAggregIcon();
} else if (opposite == null) {
result = ImageProvider.getInstance().getUnidirectionalLinkIcon();
} else {
result = ImageProvider.getInstance().getLinkIcon();
}
}
return result;
}
private static Image getAttributeImage() {
return ImageProvider.getInstance().getAttributeIcon();
}
}