blob: e86cad6c385e395044b66bd2ec178baa3f46f239 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 THALES GLOBAL SERVICES.
* 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:
* Thales - initial API and implementation
*******************************************************************************/
package org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.helper;
import java.util.MissingResourceException;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
/**
* Provide services to display EObject.
*
*/
public class EObjectLabelProviderHelper {
/**
* Suffix used by EMF Edit when generating feature labels.
*/
private static final String FEATURE_GENERATED_KEY_SUFFIX = "_feature"; //$NON-NLS-1$
/**
* Suffix used by EMF Edit when generating metaclasse labels.
*/
private static final String METACLASS_GENERATED_KEY_SUFFIX = "_type"; //$NON-NLS-1$
/**
* Prefix used by EMF Edit when generating labels.
*/
private static final String GENERATED_KEY_PREFIX = "_UI_"; //$NON-NLS-1$
/**
* Prefix used in label rendering if requested.
*/
private static final String METACLASS_DISPLAY_PREFIX = "["; //$NON-NLS-1$
/**
* Suffix used in label rendering if requested.
*/
private static final String METACLASS_DISPLAY_SUFFIX = "] "; //$NON-NLS-1$
/**
* Get the generated item provider for given object.
*
* @param object_p
* @return<code>null</code> if one of parameters is <code>null</code> or if
* no provider is found.
*/
protected static IItemLabelProvider getItemLabelProvider(EObject object_p) {
// Precondition.
if (null == object_p) {
return null;
}
AdapterFactoryEditingDomain editingDomain = (AdapterFactoryEditingDomain) AdapterFactoryEditingDomain
.getEditingDomainFor(object_p);
// Precondition.
if (null == editingDomain) {
return null;
}
return (IItemLabelProvider) editingDomain.getAdapterFactory().adapt(object_p, IItemLabelProvider.class);
}
/**
* Get the label for given object based on generated item provider.
*
* @param object_p
* @return<code>null</code> if one of parameters is <code>null</code> or if
* no label is found.
*/
public static String getText(EObject object_p) {
String label = ""; //$NON-NLS-1$
IItemLabelProvider provider = getItemLabelProvider(object_p);
if (null != provider) {
label = provider.getText(object_p);
}
return label;
}
/**
* Get the image for given object based on generated item provider.
*
* @param object_p
* @return<code>null</code> if one of parameters is <code>null</code> or if
* no image is found.
*/
public static Image getImage(EObject object_p) {
Object image = null;
IItemLabelProvider provider = getItemLabelProvider(object_p);
if (null != provider) {
image = provider.getImage(object_p);
}
return (null != image) ? getImageFromObject(image) : null;
}
/**
* Get the image descriptor for given object based on generated item
* provider.
*
* @param object_p
* @return<code>null</code> if one of parameters is <code>null</code> or if
* no image descriptor is found.
*/
public static ImageDescriptor getImageDescriptor(EObject object_p) {
Object image = null;
IItemLabelProvider provider = getItemLabelProvider(object_p);
if (null != provider) {
image = provider.getImage(object_p);
}
return (null != image) ? getImageDescriptorFromObject(image) : null;
}
/**
* Get Image from a object representation of it.
*
* @param image_p
* @return <code>null</code> if image creation fails.
*/
public static Image getImageFromObject(Object image_p) {
return ExtendedImageRegistry.getInstance().getImage(image_p);
}
/**
* Get ImageDescriptor from a object representation of it.
*
* @param image_p
* @return <code>null</code> if image descriptor creation fails.
*/
public static ImageDescriptor getImageDescriptorFromObject(Object image_p) {
return ExtendedImageRegistry.getInstance().getImageDescriptor(image_p);
}
/**
* Get the metaclass label (emitted by EMF Edit generation) for given
* object.
*
* @param object_p
* @param addBrackets_p
* if <code>true</code> the returned label is surrounded by
* brackets.
* @return <code>null</code> if one of parameters is <code>null</code> or if
* no label is found.
*/
public static String getMetaclassLabel(EObject object_p, boolean addBrackets_p) {
String label = null;
// Precondition.
if (null == object_p) {
return label;
}
AdapterFactoryEditingDomain editingDomain = (AdapterFactoryEditingDomain) AdapterFactoryEditingDomain
.getEditingDomainFor(object_p);
// Precondition.
if (null == editingDomain) {
return label;
}
// Adaptation to ItemProviderAdapter returns null due to EMF Edit
// generated ItemProviderAdapterFactory that do not support this type.
// So, we adapt to IItemLabelProvider and then we cast...
IItemLabelProvider provider = (IItemLabelProvider) editingDomain.getAdapterFactory().adapt(object_p,
IItemLabelProvider.class);
if (provider instanceof ItemProviderAdapter) {
label = getMetaclassLabel(object_p.eClass(), (ItemProviderAdapter) provider);
}
if (addBrackets_p) {
label = METACLASS_DISPLAY_PREFIX + label + METACLASS_DISPLAY_SUFFIX;
}
return label;
}
/**
* Get the metaclass label (emitted by EMF Edit generation) for given object
* according given editing domain.
*
* @param object_p
* @param provider_p
* @return <code>null</code> if one of parameters is <code>null</code> or if
* no label is found.
*/
public static String getMetaclassLabel(EClass class_p, ItemProviderAdapter provider_p) {
String label = null;
// Preconditions.
if ((null == class_p) || (null == provider_p)) {
return label;
}
try {
label = provider_p.getString(GENERATED_KEY_PREFIX + class_p.getName() + METACLASS_GENERATED_KEY_SUFFIX);
} catch (MissingResourceException e) {
label = "<<MissingResourceException>> [" + class_p.getName() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
}
return label;
}
/**
* Get the metaclass label (emitted by EMF Edit generation) for given object
* according given editing domain.
*
* @param object_p
* @param provider_p
* @return <code>null</code> if one of parameters is <code>null</code> or if
* no label is found.
*/
public static String getFeatureLabel(EStructuralFeature feature_p, ItemProviderAdapter provider_p) {
String label = null;
// Preconditions.
if ((null == feature_p) || (null == provider_p)) {
return label;
}
String featureKey = feature_p.getEContainingClass().getName() + "_" + feature_p.getName(); //$NON-NLS-1$
label = provider_p.getString(GENERATED_KEY_PREFIX + featureKey + FEATURE_GENERATED_KEY_SUFFIX);
return label;
}
}