From b3141df23ca644573f8b2813ad8859722d418bd9 Mon Sep 17 00:00:00 2001 From: Nicolas FAUVERGUE Date: Thu, 24 Nov 2016 12:20:54 +0100 Subject: Bug 496905: [Diagram][ModelExplorer][Table][Dialog] Papyrus must integrate the internationalization feature provided by UML. https://bugs.eclipse.org/bugs/show_bug.cgi?id=496905 Commit of infra for internationalization. Change-Id: I1b1859bf111e1ef7a7522212fbe639cf2bd13890 Signed-off-by: Nicolas FAUVERGUE --- .../META-INF/MANIFEST.MF | 3 +- .../facet/custom/ui/internal/query/LabelQuery.java | 285 +++++++++++---------- 2 files changed, 146 insertions(+), 142 deletions(-) (limited to 'plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui') diff --git a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF index 95629903d82..ebb63f5503d 100644 --- a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF +++ b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF @@ -14,7 +14,8 @@ Require-Bundle: org.eclipse.papyrus.emf.facet.custom.core;bundle-version="[2.0.0 org.eclipse.emf.edit.ui;bundle-version="[2.12.0,3.0.0)", org.eclipse.papyrus.emf.facet.util.swt;bundle-version="[1.2.0,2.0.0)", org.eclipse.papyrus.emf.facet.util.jface.ui;bundle-version="[1.2.0,2.0.0)", - org.eclipse.papyrus.emf.facet.common.ui;bundle-version="[1.2.0,2.0.0)" + org.eclipse.papyrus.emf.facet.common.ui;bundle-version="[1.2.0,2.0.0)", + org.eclipse.papyrus.infra.internationalization.edit;bundle-version="[1.0.0,2.0.0)" Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy Bundle-Version: 2.0.0.qualifier diff --git a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java index 9961cae90ec..156d2ceab6a 100644 --- a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java +++ b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java @@ -1,141 +1,144 @@ -/** - * Copyright (c) 2011, 2014 Mia-Software, CEA, and others. - * - * 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 - * Gregoire Dupe (Mia-Software) - Bug 373078 - API Cleaning - * Gregoire Dupe (Mia-Software) - Bug 375087 - [Table] ITableWidget.addColumn(List, List) - * Nicolas Bros (Mia-Software) - Bug 379683 - customizable Tree content provider - * Christian W. Damus (CEA) - bug 410346 - */ -package org.eclipse.papyrus.emf.facet.custom.ui.internal.query; - -import org.eclipse.emf.ecore.EAttribute; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.ETypedElement; -import org.eclipse.emf.ecore.util.FeatureMap; -import org.eclipse.emf.edit.provider.ComposedAdapterFactory; -import org.eclipse.emf.edit.provider.IItemLabelProvider; -import org.eclipse.emf.edit.provider.ReflectiveItemProvider; -import org.eclipse.papyrus.emf.facet.efacet.core.IFacetManager; -import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException; -import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2; -import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2; -import org.eclipse.papyrus.emf.facet.util.emf.core.ModelUtils; - -public class LabelQuery implements IJavaQuery2 { - - private static final String NAME = "name"; //$NON-NLS-1$ - - public String evaluate(final EObject source, - final IParameterValueList2 parameterValues, - final IFacetManager facetManager) - throws DerivedTypedElementException { - ETypedElement sfParam = null; - if (parameterValues != null) { - sfParam = (ETypedElement) parameterValues - .getParameterValueByName("eStructuralFeature").getValue(); //$NON-NLS-1$ - } - String result = null; - if (sfParam == null) { - final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory( - ComposedAdapterFactory.Descriptor.Registry.INSTANCE); - - try { - final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(source, IItemLabelProvider.class); - // We don't want to use a ReflectiveItemProvider because it provides - // a string prefixed with the eObject's meta-class name. - if (itemLabelProvider instanceof ReflectiveItemProvider) { - result = LabelQuery.getDefaultName(source); - } else if (itemLabelProvider == null) { - result = ModelUtils.getDefaultName(source); - } else { - result = itemLabelProvider.getText(source); - } - } finally { - // Dispose the adapter factory because it added an adapter that would leak, as nobody else will ever use it - adapterFactory.dispose(); - } - } else { - try { - if (sfParam instanceof EAttribute && sfParam.getUpperBound() == 1) { - final Object object = facetManager.getOrInvoke(source, sfParam, Object.class); - final String objectLabel = getObjectLabel(object, facetManager); - result = sfParam.getName() + " = " + objectLabel; //$NON-NLS-1$ - } else { - result = sfParam.getName(); - } - } catch (final Exception e) { - throw new DerivedTypedElementException(e); - } - } - return result; - } - - private String getObjectLabel(final Object object, - final IFacetManager facetManager) - throws DerivedTypedElementException { - String result; - if (object instanceof EObject) { - final EObject eObject = (EObject) object; - result = evaluate(eObject, null, facetManager); - } else { - result = String.valueOf(object); - } - return result; - } - - /** - * @return a default name based on a string feature of the given {@link EObject} - */ - // from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils - public static String getDefaultName(final EObject eObject) { - String result = ""; //$NON-NLS-1$ - // find a feature that can be used as a name - final EStructuralFeature feature = LabelQuery.getLabelFeature(eObject - .eClass()); - if (feature != null) { - result = (String) eObject.eGet(feature); - } - return result; - } - - /** - * This method searches for a structural feature that can be used as a name - * - * @param eClass - * in which class to search a structural feature that can be used as - * a name - * @return an EStructuralFeature - */ - // Copied from org.eclipse.emf.edit.provider.ReflectiveItemProvider to org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils - // Copied from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils - private static EStructuralFeature getLabelFeature(final EClass eClass) { - EAttribute result = null; - for (final EAttribute eAttribute : eClass.getEAllAttributes()) { - if (!eAttribute.isMany() - && eAttribute.getEType().getInstanceClass() != FeatureMap.Entry.class) { - if (LabelQuery.NAME.equalsIgnoreCase(eAttribute - .getName())) { - result = eAttribute; - break; - } else if (result == null) { - result = eAttribute; - } else if (eAttribute.getEAttributeType().getInstanceClass() == String.class - && result.getEAttributeType().getInstanceClass() != String.class) { - result = eAttribute; - } - } - } - return result; - } - -} +/** + * Copyright (c) 2011, 2014 Mia-Software, CEA, and others. + * + * 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 + * Gregoire Dupe (Mia-Software) - Bug 373078 - API Cleaning + * Gregoire Dupe (Mia-Software) - Bug 375087 - [Table] ITableWidget.addColumn(List, List) + * Nicolas Bros (Mia-Software) - Bug 379683 - customizable Tree content provider + * Christian W. Damus (CEA) - bug 410346 + * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905 + */ +package org.eclipse.papyrus.emf.facet.custom.ui.internal.query; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.ETypedElement; +import org.eclipse.emf.ecore.util.FeatureMap; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.ReflectiveItemProvider; +import org.eclipse.papyrus.emf.facet.efacet.core.IFacetManager; +import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException; +import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2; +import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2; +import org.eclipse.papyrus.emf.facet.util.emf.core.ModelUtils; +import org.eclipse.papyrus.infra.internationalization.edit.provider.InternationalizationNotationItemProviderAdapterFactory; + +public class LabelQuery implements IJavaQuery2 { + + private static final String NAME = "name"; //$NON-NLS-1$ + + public String evaluate(final EObject source, + final IParameterValueList2 parameterValues, + final IFacetManager facetManager) + throws DerivedTypedElementException { + ETypedElement sfParam = null; + if (parameterValues != null) { + sfParam = (ETypedElement) parameterValues + .getParameterValueByName("eStructuralFeature").getValue(); //$NON-NLS-1$ + } + String result = null; + if (sfParam == null) { + final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory( + ComposedAdapterFactory.Descriptor.Registry.INSTANCE); + adapterFactory.insertAdapterFactory(new InternationalizationNotationItemProviderAdapterFactory()); + + try { + final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(source, IItemLabelProvider.class); + // We don't want to use a ReflectiveItemProvider because it provides + // a string prefixed with the eObject's meta-class name. + if (itemLabelProvider instanceof ReflectiveItemProvider) { + result = LabelQuery.getDefaultName(source); + } else if (itemLabelProvider == null) { + result = ModelUtils.getDefaultName(source); + } else { + result = itemLabelProvider.getText(source); + } + } finally { + // Dispose the adapter factory because it added an adapter that would leak, as nobody else will ever use it + adapterFactory.dispose(); + } + } else { + try { + if (sfParam instanceof EAttribute && sfParam.getUpperBound() == 1) { + final Object object = facetManager.getOrInvoke(source, sfParam, Object.class); + final String objectLabel = getObjectLabel(object, facetManager); + result = sfParam.getName() + " = " + objectLabel; //$NON-NLS-1$ + } else { + result = sfParam.getName(); + } + } catch (final Exception e) { + throw new DerivedTypedElementException(e); + } + } + return result; + } + + private String getObjectLabel(final Object object, + final IFacetManager facetManager) + throws DerivedTypedElementException { + String result; + if (object instanceof EObject) { + final EObject eObject = (EObject) object; + result = evaluate(eObject, null, facetManager); + } else { + result = String.valueOf(object); + } + return result; + } + + /** + * @return a default name based on a string feature of the given {@link EObject} + */ + // from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils + public static String getDefaultName(final EObject eObject) { + String result = ""; //$NON-NLS-1$ + // find a feature that can be used as a name + final EStructuralFeature feature = LabelQuery.getLabelFeature(eObject + .eClass()); + if (feature != null) { + result = (String) eObject.eGet(feature); + } + return result; + } + + /** + * This method searches for a structural feature that can be used as a name + * + * @param eClass + * in which class to search a structural feature that can be used as + * a name + * @return an EStructuralFeature + */ + // Copied from org.eclipse.emf.edit.provider.ReflectiveItemProvider to org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils + // Copied from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils + private static EStructuralFeature getLabelFeature(final EClass eClass) { + EAttribute result = null; + for (final EAttribute eAttribute : eClass.getEAllAttributes()) { + if (!eAttribute.isMany() + && eAttribute.getEType().getInstanceClass() != FeatureMap.Entry.class) { + if (LabelQuery.NAME.equalsIgnoreCase(eAttribute + .getName())) { + result = eAttribute; + break; + } else if (result == null) { + result = eAttribute; + } else if (eAttribute.getEAttributeType().getInstanceClass() == String.class + && result.getEAttributeType().getInstanceClass() != String.class) { + result = eAttribute; + } + } + } + return result; + } + +} -- cgit v1.2.1