/** | |
* 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(); | |
} | |
} |