diff options
author | Christian W. Damus | 2021-04-26 12:55:07 +0000 |
---|---|---|
committer | Christian W. Damus | 2021-05-04 17:44:32 +0000 |
commit | 54146ca02afebe9048e59214824476b97fc10e8f (patch) | |
tree | e1c7a76281c4af523f4cd71cb635294ce3a5d667 | |
parent | 8df54eb9b49b6054b94105eac26e8d5d691fa312 (diff) | |
download | org.eclipse.papyrus-54146ca02afebe9048e59214824476b97fc10e8f.tar.gz org.eclipse.papyrus-54146ca02afebe9048e59214824476b97fc10e8f.tar.xz org.eclipse.papyrus-54146ca02afebe9048e59214824476b97fc10e8f.zip |
Bug 570486: [Architecture] Architecture model shall clearly define merge and inherit concepts
- make single consistent item provider factory for the merged architecture facade API
- deprecate and/or replace custom providers in various places
Change-Id: I42d8ceff11d63c2683332c70ea7efc15ca741724
Signed-off-by: Christian W. Damus <give.a.damus@gmail.com>
24 files changed, 1062 insertions, 418 deletions
diff --git a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture.representation.edit/src-gen/org/eclipse/papyrus/infra/architecture/representation/provider/PapyrusRepresentationKindItemProvider.java b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture.representation.edit/src-gen/org/eclipse/papyrus/infra/architecture/representation/provider/PapyrusRepresentationKindItemProvider.java index a0a512c5b14..0014a2bcae2 100644 --- a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture.representation.edit/src-gen/org/eclipse/papyrus/infra/architecture/representation/provider/PapyrusRepresentationKindItemProvider.java +++ b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture.representation.edit/src-gen/org/eclipse/papyrus/infra/architecture/representation/provider/PapyrusRepresentationKindItemProvider.java @@ -1,17 +1,18 @@ /** -* Copyright (c) 2017 CEA LIST. - * +* Copyright (c) 2017, 2021 CEA LIST, Christian W. Damus, and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * + * * Contributors: * Maged Elaasar - Initial API and implementation - * - * + * Christian W. Damus - bug 570486 + * + * */ package org.eclipse.papyrus.infra.architecture.representation.provider; @@ -22,20 +23,22 @@ import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; import org.eclipse.emf.edit.provider.ViewerNotification; -import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionLanguage; -import org.eclipse.papyrus.infra.core.architecture.provider.RepresentationKindItemProvider; import org.eclipse.papyrus.infra.architecture.representation.PapyrusRepresentationKind; import org.eclipse.papyrus.infra.architecture.representation.RepresentationFactory; import org.eclipse.papyrus.infra.architecture.representation.RepresentationPackage; +import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionLanguage; +import org.eclipse.papyrus.infra.core.architecture.provider.RepresentationKindItemProvider; /** * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.architecture.representation.PapyrusRepresentationKind} object. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ public class PapyrusRepresentationKindItemProvider extends RepresentationKindItemProvider { @@ -43,6 +46,7 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * This constructs an instance from a factory and a notifier. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ public PapyrusRepresentationKindItemProvider(AdapterFactory adapterFactory) { @@ -53,6 +57,7 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * This returns the property descriptors for the adapted class. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ @Override @@ -70,44 +75,42 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * This adds a property descriptor for the Parent feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ protected void addParentPropertyDescriptor(Object object) { - itemPropertyDescriptors.add - (createItemPropertyDescriptor - (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), - getResourceLocator(), - getString("_UI_PapyrusRepresentationKind_parent_feature"), //$NON-NLS-1$ - getString("_UI_PapyrusRepresentationKind_parent_description"), //$NON-NLS-1$ - RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__PARENT, - true, - false, - true, - null, - getString("_UI_RepresentationKindPropertyCategory"), //$NON-NLS-1$ - null)); + itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_PapyrusRepresentationKind_parent_feature"), //$NON-NLS-1$ + getString("_UI_PapyrusRepresentationKind_parent_description"), //$NON-NLS-1$ + RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__PARENT, + true, + false, + true, + null, + getString("_UI_RepresentationKindPropertyCategory"), //$NON-NLS-1$ + null)); } /** * This adds a property descriptor for the Implementation ID feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ protected void addImplementationIDPropertyDescriptor(Object object) { - itemPropertyDescriptors.add - (createItemPropertyDescriptor - (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), - getResourceLocator(), - getString("_UI_PapyrusRepresentationKind_implementationID_feature"), //$NON-NLS-1$ - getString("_UI_PapyrusRepresentationKind_implementationID_description"), //$NON-NLS-1$ - RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__IMPLEMENTATION_ID, - true, - false, - false, - ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, - getString("_UI_RepresentationKindPropertyCategory"), //$NON-NLS-1$ - null)); + itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_PapyrusRepresentationKind_implementationID_feature"), //$NON-NLS-1$ + getString("_UI_PapyrusRepresentationKind_implementationID_description"), //$NON-NLS-1$ + RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__IMPLEMENTATION_ID, + true, + false, + false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, + getString("_UI_RepresentationKindPropertyCategory"), //$NON-NLS-1$ + null)); } /** @@ -116,6 +119,7 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ @Override @@ -131,6 +135,7 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte /** * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ @Override @@ -145,16 +150,16 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * This returns the label text for the adapted class. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ @Override public String getText(Object object) { - String label = ((PapyrusRepresentationKind)object).getName(); - return label == null || label.length() == 0 ? - getString("_UI_PapyrusRepresentationKind_type") : //$NON-NLS-1$ - getString("_UI_PapyrusRepresentationKind_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$ + String label = ((PapyrusRepresentationKind) object).getName(); + return label == null || label.length() == 0 ? getString("_UI_PapyrusRepresentationKind_type") : //$NON-NLS-1$ + getString("_UI_PapyrusRepresentationKind_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$ } - + /** * This returns the label text for the adapted class. * <!-- begin-user-doc --> @@ -162,10 +167,30 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte */ protected static String getTextFor(PapyrusRepresentationKind view) { ArchitectureDescriptionLanguage lang = (ArchitectureDescriptionLanguage) view.eContainer(); - if (view.getName() == null) { - return (lang.getName() + " :: <natural> [" + view.getImplementationID() + "]"); + + String langName; + if (lang == null) { + // The eContainer will be null if the view is an unresolved proxy + if (view.eIsProxy()) { + return "<unresolved view> " + EcoreUtil.getURI(view); + } + langName = null; + } else { + langName = lang.getName(); + } + + String viewName = view.getName(); + String viewID = view.getImplementationID(); + + if (viewName == null) { + viewName = "<unnamed view>"; } - return (lang.getName() + " :: " + view.getName()); + + + String format = langName != null + ? (viewID != null ? "%1$s :: %2$s [%3$s]" : "%1$s :: %2$s") + : (viewID != null ? "%2$s [%3$s]" : "%2$s"); + return String.format(format, langName, viewName, viewID); } @@ -174,6 +199,7 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ @Override @@ -181,13 +207,13 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte updateChildren(notification); switch (notification.getFeatureID(PapyrusRepresentationKind.class)) { - case RepresentationPackage.PAPYRUS_REPRESENTATION_KIND__IMPLEMENTATION_ID: - fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); - return; - case RepresentationPackage.PAPYRUS_REPRESENTATION_KIND__MODEL_RULES: - case RepresentationPackage.PAPYRUS_REPRESENTATION_KIND__OWNING_RULES: - fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); - return; + case RepresentationPackage.PAPYRUS_REPRESENTATION_KIND__IMPLEMENTATION_ID: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + case RepresentationPackage.PAPYRUS_REPRESENTATION_KIND__MODEL_RULES: + case RepresentationPackage.PAPYRUS_REPRESENTATION_KIND__OWNING_RULES: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); + return; } super.notifyChanged(notification); } @@ -197,21 +223,18 @@ public class PapyrusRepresentationKindItemProvider extends RepresentationKindIte * that can be created under this object. * <!-- begin-user-doc --> * <!-- end-user-doc --> + * * @generated */ @Override protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) { super.collectNewChildDescriptors(newChildDescriptors, object); - newChildDescriptors.add - (createChildParameter - (RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__MODEL_RULES, - RepresentationFactory.eINSTANCE.createModelRule())); + newChildDescriptors.add(createChildParameter(RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__MODEL_RULES, + RepresentationFactory.eINSTANCE.createModelRule())); - newChildDescriptors.add - (createChildParameter - (RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__OWNING_RULES, - RepresentationFactory.eINSTANCE.createOwningRule())); + newChildDescriptors.add(createChildParameter(RepresentationPackage.Literals.PAPYRUS_REPRESENTATION_KIND__OWNING_RULES, + RepresentationFactory.eINSTANCE.createOwningRule())); } } diff --git a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/META-INF/MANIFEST.MF b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/META-INF/MANIFEST.MF index 32549ed7e93..600476f63e0 100644 --- a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/META-INF/MANIFEST.MF +++ b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/META-INF/MANIFEST.MF @@ -20,7 +20,8 @@ Require-Bundle: org.eclipse.gmf.runtime.emf.type.core;bundle-version="[1.9.0,2.0 org.eclipse.uml2.types;bundle-version="[2.5.0,3.0.0)", org.eclipse.papyrus.infra.emf;bundle-version="[4.0.0,5.0.0)", org.eclipse.xtend.lib;bundle-version="[2.24.0,3.0.0)", - com.google.inject;bundle-version="[3.0.0,4.0.0)" + com.google.inject;bundle-version="[3.0.0,4.0.0)", + org.eclipse.emf.common;bundle-version="[2.21.0,3.0.0)" Bundle-ActivationPolicy: lazy Bundle-Activator: org.eclipse.papyrus.infra.architecture.Activator Bundle-Vendor: %providerName diff --git a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedADElement.java b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedADElement.java index 9c33b1f2eb2..c80ca529199 100644 --- a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedADElement.java +++ b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedADElement.java @@ -18,6 +18,7 @@ package org.eclipse.papyrus.infra.core.architecture.merged; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Platform; +import org.eclipse.emf.common.notify.impl.NotifierImpl; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; @@ -38,7 +39,7 @@ import com.google.common.base.Objects; * @see org.eclipse.papyrus.infra.core.architecture.ADElement * @since 1.0 */ -public class MergedADElement implements IAdaptable { +public class MergedADElement extends NotifierImpl implements IAdaptable { /** * The merged parent of this element @@ -156,7 +157,10 @@ public class MergedADElement implements IAdaptable { * * @return a merge increment * @since 2.0 + * @deprecated Since version 3.1 of the bundle, the merged model façade API is supported by an EMF.Edit item provider + * @see <a href="https://eclip.se/573168">bug 573168</a> to follow removal of this API in a future release */ + @Deprecated(since = "3.1", forRemoval = true) public ADElement getImageObject() { return element; } diff --git a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedArchitectureDomain.java b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedArchitectureDomain.java index 2a29413c21e..a8a155c0f29 100644 --- a/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedArchitectureDomain.java +++ b/plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedArchitectureDomain.java @@ -190,10 +190,11 @@ public class MergedArchitectureDomain extends MergedADElement { } /** - * @deprecated the merged model façade API is supported by an EMF.Edit item provider + * @deprecated Since version 3.1 of the bundle, the merged model façade API is supported by an EMF.Edit item provider + * @see <a href="https://eclip.se/573168">bug 573168</a> to follow removal of this API in a future release */ @Override - @Deprecated + @Deprecated(since = "3.1", forRemoval = true) public ADElement getImageObject() { checkMerge(); return super.getImageObject(); diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/EPackagePropertyDescriptor.java b/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/EPackagePropertyDescriptor.java index 7b4b7b25f38..d15534ed7a8 100644 --- a/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/EPackagePropertyDescriptor.java +++ b/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/EPackagePropertyDescriptor.java @@ -1,7 +1,6 @@ /***************************************************************************** * Copyright (c) 2013, 2021 CEA LIST, Christian W. Damus, and others. * - * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -11,7 +10,7 @@ * * Contributors: * Maged Elaasar - Initial API and implementation - * Christian W. Damus - bug 570097 + * Christian W. Damus - bugs 570097, 570486 * *****************************************************************************/ package org.eclipse.papyrus.infra.core.architecture.provider; @@ -76,7 +75,7 @@ public class EPackagePropertyDescriptor extends SurrogateItemPropertyDescriptor return new IItemLabelProvider() { @Override public String getText(Object object) { - return ((EPackage) object).getNsURI(); + return ((EPackage) unwrap(object)).getNsURI(); } @Override diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/ProfilePropertyDescriptor.java b/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/ProfilePropertyDescriptor.java index b11b54d9c16..dd6e643e8c9 100644 --- a/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/ProfilePropertyDescriptor.java +++ b/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/ProfilePropertyDescriptor.java @@ -1,6 +1,5 @@ /***************************************************************************** - * Copyright (c) 2013 CEA LIST. - * + * Copyright (c) 2013, 2021 CEA LIST, Christian W. Damus, and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -11,6 +10,7 @@ * * Contributors: * Maged Elaasar - Initial API and implementation + * Christian W. Damus - bug 570486 * *****************************************************************************/ package org.eclipse.papyrus.infra.core.architecture.provider; @@ -34,9 +34,10 @@ public class ProfilePropertyDescriptor extends EPackagePropertyDescriptor { @Override public IItemLabelProvider getLabelProvider(Object object) { return new IItemLabelProvider() { + @Override public String getText(Object object) { if (object instanceof EPackage) { - return ((EPackage) object).getNsURI(); + return ((EPackage) unwrap(object)).getNsURI(); } if (object instanceof EList<?>) { EList<?> list = (EList<?>) object; @@ -48,7 +49,7 @@ public class ProfilePropertyDescriptor extends EPackagePropertyDescriptor { if (i != 0) { builder.append(", "); } - builder.append(((EPackage) list.get(i)).getNsURI()); + builder.append(((EPackage) unwrap(list.get(i))).getNsURI()); } builder.append("}"); return builder.toString(); @@ -56,6 +57,7 @@ public class ProfilePropertyDescriptor extends EPackagePropertyDescriptor { return ""; } + @Override public Object getImage(Object object) { return null; } diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/SurrogateItemPropertyDescriptor.java b/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/SurrogateItemPropertyDescriptor.java index cd113c81971..dcd416e4d0a 100644 --- a/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/SurrogateItemPropertyDescriptor.java +++ b/plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/SurrogateItemPropertyDescriptor.java @@ -1,6 +1,5 @@ /***************************************************************************** - * Copyright (c) 2013 CEA LIST. - * + * Copyright (c) 2013, 2021 CEA LIST, Christian W. Damus, and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -11,6 +10,7 @@ * * Contributors: * Maged Elaasar - Initial API and implementation + * Christian W. Damus - bug 570486 * *****************************************************************************/ package org.eclipse.papyrus.infra.core.architecture.provider; @@ -19,6 +19,7 @@ import java.util.Collection; import org.eclipse.emf.edit.provider.IItemLabelProvider; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor.PropertyValueWrapper; /** * Represents a surrogate property descriptor delegating to an encapsulated descriptor @@ -32,73 +33,113 @@ public abstract class SurrogateItemPropertyDescriptor implements IItemPropertyDe this.inner = inner; } + @Override public Object getPropertyValue(Object object) { return inner.getPropertyValue(object); } + @Override public boolean isPropertySet(Object object) { return inner.isPropertySet(object); } + @Override public boolean canSetProperty(Object object) { return inner.canSetProperty(object); } + @Override public void resetPropertyValue(Object object) { inner.resetPropertyValue(object); } + @Override public void setPropertyValue(Object object, Object value) { inner.setPropertyValue(object, value); } + @Override public String getCategory(Object object) { return inner.getCategory(object); } + @Override public String getDescription(Object object) { return inner.getDescription(object); } + @Override public String getDisplayName(Object object) { return inner.getDisplayName(object); } + @Override public String[] getFilterFlags(Object object) { return inner.getFilterFlags(object); } + @Override public Object getHelpContextIds(Object object) { return inner.getHelpContextIds(object); } + @Override public String getId(Object object) { return inner.getId(object); } + @Override public IItemLabelProvider getLabelProvider(Object object) { return inner.getLabelProvider(object); } + @Override public boolean isCompatibleWith(Object object, Object anotherObject, IItemPropertyDescriptor anotherPropertyDescriptor) { return inner.isCompatibleWith(object, anotherObject, anotherPropertyDescriptor); } + @Override public Object getFeature(Object object) { return inner.getFeature(object); } + @Override public boolean isMany(Object object) { return inner.isMany(object); } + @Override public abstract Collection<?> getChoiceOfValues(Object object); + @Override public boolean isMultiLine(Object object) { return inner.isMultiLine(object); } + @Override public boolean isSortChoices(Object object) { return inner.isSortChoices(object); } + + /** + * The Merged Architecture Domain API has an EMF.Edit implementation that uses property wrappers. + * This method unwraps them to get at the values. + * + * @param object + * a possibly property value wrapper + * @return the property value + */ + protected Object unwrap(Object object) { + Object result = object; + while (result instanceof PropertyValueWrapper) { + Object value = ((PropertyValueWrapper) result).getEditableValue(result); + if (value == result) { + // Self-wrapped? Give up + break; + } + result = value; + } + return result; + } + } diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/plugin.xml b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/plugin.xml index 757513a86f5..562f2ccc6e8 100644 --- a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/plugin.xml +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/plugin.xml @@ -119,5 +119,18 @@ class="org.eclipse.papyrus.infra.ui.architecture.validators.ArchitecturePageAddValidator"> </validator> </extension> + + <extension + point="org.eclipse.emf.edit.itemProviderAdapterFactories"> + <factory + uri="org.eclipse.papyrus.infra.core.architecture.merged" + class="org.eclipse.papyrus.infra.ui.architecture.providers.MergedArchitectureItemProviderAdapterFactory" + supportedTypes="org.eclipse.emf.edit.provider.IStructuredItemContentProvider + org.eclipse.emf.edit.provider.ITreeItemContentProvider + org.eclipse.emf.edit.provider.IItemLabelProvider + org.eclipse.emf.edit.provider.IItemStyledLabelProvider + org.eclipse.emf.edit.provider.IItemPropertySource"> + </factory> + </extension> </plugin> diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/handlers/ChangeArchitectureViewpointsHandler.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/handlers/ChangeArchitectureViewpointsHandler.java index 34ef5dbb901..c717a6d8467 100644 --- a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/handlers/ChangeArchitectureViewpointsHandler.java +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/handlers/ChangeArchitectureViewpointsHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2017, 2019 CEA LIST. + * Copyright (c) 2017, 2021 CEA LIST, Christian W. Damus, and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -11,6 +11,7 @@ * Contributors: * Maged Elaasar - Initial API and implementation * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Bug 550535 + * Christian W. Damus - bug 570486 * */ package org.eclipse.papyrus.infra.ui.architecture.handlers; @@ -62,6 +63,13 @@ public class ChangeArchitectureViewpointsHandler extends CompoundContributionIte } @Override + public void dispose() { + provider.dispose(); + + super.dispose(); + } + + @Override protected IContributionItem[] getContributionItems() { final EObject selection = getSelection(); if (selection == null) { @@ -77,9 +85,8 @@ public class ChangeArchitectureViewpointsHandler extends CompoundContributionIte List<IContributionItem> items = new ArrayList<>(); for (MergedArchitectureViewpoint viewpoint : context.getViewpoints()) { - Object imageObject = viewpoint.getImageObject(); - ImageDescriptor desc = ExtendedImageRegistry.getInstance().getImageDescriptor(provider.getImage(imageObject)); - items.add(new ActionContributionItem(new Action(viewpoint.getName(), desc) { + ImageDescriptor desc = ExtendedImageRegistry.getInstance().getImageDescriptor(provider.getImage(viewpoint)); + items.add(new ActionContributionItem(new Action(provider.getText(viewpoint), desc) { { setChecked(viewpointIds.contains(viewpoint.getId())); } diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/preferences/ArchitectureContextPreferencePage.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/preferences/ArchitectureContextPreferencePage.java index e42e67652a2..f5603298308 100755..100644 --- a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/preferences/ArchitectureContextPreferencePage.java +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/preferences/ArchitectureContextPreferencePage.java @@ -1,22 +1,21 @@ /** - * Copyright (c) 2017 CEA LIST. - * + * Copyright (c) 2017, 2021 CEA LIST, Christian W. Damus, and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * + * * Contributors: * Maged Elaasar - Initial API and implementation - * - * + * Christian W. Damus - bug 570486 + * + * */ package org.eclipse.papyrus.infra.ui.architecture.preferences; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -45,18 +44,15 @@ import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.window.ToolTip; import org.eclipse.papyrus.infra.architecture.ArchitectureDomainManager; import org.eclipse.papyrus.infra.architecture.ArchitectureDomainMerger; import org.eclipse.papyrus.infra.architecture.ArchitectureDomainPreferences; -import org.eclipse.papyrus.infra.core.architecture.ADElement; import org.eclipse.papyrus.infra.core.architecture.merged.MergedADElement; import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureContext; import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDomain; -import org.eclipse.papyrus.infra.ui.architecture.ArchitectureUIPlugin; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -81,27 +77,27 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements // The ID of this preference page used to contribute via extension public static final String PAGE_ID = ArchitectureContextPreferencePage.class.getName(); - - //A bold style + + // A bold style private BoldStylerProvider boldStylerProvider; - + // Contexts viewer private CheckboxTreeViewer fContextsViewer; // Text displaying additional information private ListViewer fDescription; // Adapter Factory private ComposedAdapterFactory fComposedAdapterFactory; - + // Buttons private Button fOtherButton; private Button fDefaultButton; // the architecture domain model merger ArchitectureDomainMerger fMerger; - - //Preferences + + // Preferences ArchitectureDomainPreferences fPreferences; - + /** * Constructor. */ @@ -110,24 +106,25 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements fMerger = ArchitectureDomainManager.getInstance().getMerger().clone(); fPreferences = new ArchitectureDomainPreferences(); } - + @Override public Control createContents(Composite parent) { - boldStylerProvider = new BoldStylerProvider(parent.getFont()); + boldStylerProvider = new BoldStylerProvider(parent.getFont()); Composite container = createComposite(parent, 1, 1, GridData.FILL_BOTH, 0, 0); createArchitectureContextsGroup(container); Dialog.applyDialogFont(container); return container; } - + /** * @see org.eclipse.jface.dialogs.DialogPage#dispose() * */ @Override public void dispose() { - if (boldStylerProvider != null) + if (boldStylerProvider != null) { boldStylerProvider.dispose(); + } super.dispose(); } @@ -148,55 +145,32 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements gd.heightHint = 250; fContextsViewer.getControl().setLayoutData(gd); - final IStyledLabelProvider labelProvider = new AdapterFactoryLabelProvider.StyledLabelProvider(fComposedAdapterFactory, fContextsViewer) { - @Override - public StyledString getStyledText(Object object) { - MergedADElement element = (MergedADElement) object; - if (element instanceof MergedArchitectureContext) { - MergedArchitectureContext context = (MergedArchitectureContext)element; - if (context.getId() != null && context.getId().equals(fPreferences.getDefaultContextId())) - return new StyledString(element.getName(), boldStylerProvider.getBoldStyler()); - } - return new StyledString(element.getName()); - } - @Override - public Image getImage(Object object) { - MergedADElement element = (MergedADElement) object; - ADElement imageObject = element.getImageObject(); - if (imageObject != null && imageObject.getIcon() != null) { - try { - URL image = new URL(imageObject.getIcon()); - return getImageFromObject(image); - } catch (MalformedURLException e) { - ArchitectureUIPlugin.log.error(e); - return null; - } - } - return super.getImage(imageObject); - } - }; + final IStyledLabelProvider labelProvider = new AdapterFactoryLabelProvider.StyledLabelProvider(fComposedAdapterFactory, fContextsViewer); fContextsViewer.setContentProvider(new ITreeContentProvider() { @Override public boolean hasChildren(Object element) { if (element instanceof MergedArchitectureDomain) { - return !((MergedArchitectureDomain)element).getContexts().isEmpty(); + return !((MergedArchitectureDomain) element).getContexts().isEmpty(); } return false; } + @Override public Object getParent(Object element) { return null; } + @Override public Object[] getElements(Object inputElement) { - Collection<MergedArchitectureDomain> domains = ((ArchitectureDomainMerger)inputElement).getDomains(); + Collection<MergedArchitectureDomain> domains = ((ArchitectureDomainMerger) inputElement).getDomains(); return domains.toArray(); } + @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof MergedArchitectureDomain) { - Collection<MergedArchitectureContext> contexts = ((MergedArchitectureDomain)parentElement).getContexts(); + Collection<MergedArchitectureContext> contexts = ((MergedArchitectureDomain) parentElement).getContexts(); return contexts.toArray(); } return null; @@ -205,11 +179,11 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements fContextsViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider)); fContextsViewer.setComparator(new ViewerComparator() { @Override - public int compare(Viewer viewer, Object e1, Object e2) { - String name1 = labelProvider.getStyledText(e1).getString(); - String name2 = labelProvider.getStyledText(e2).getString(); - return getComparator().compare(name1, name2); - } + public int compare(Viewer viewer, Object e1, Object e2) { + String name1 = labelProvider.getStyledText(e1).getString(); + String name2 = labelProvider.getStyledText(e2).getString(); + return getComparator().compare(name1, name2); + } }); fContextsViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override @@ -223,33 +197,37 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements public boolean isGrayed(Object element) { return false; } + @Override public boolean isChecked(Object element) { - if (element instanceof MergedArchitectureContext) - return !fPreferences.getExcludedContextIds().contains(((MergedArchitectureContext)element).getId()); - else + if (element instanceof MergedArchitectureContext) { + return !fPreferences.getExcludedContextIds().contains(((MergedArchitectureContext) element).getId()); + } else { return fContextsViewer.getChecked(element); + } } }); fContextsViewer.addCheckStateListener(new ICheckStateListener() { @Override public void checkStateChanged(CheckStateChangedEvent event) { Collection<MergedArchitectureContext> contexts = null; - if (event.getElement() instanceof MergedArchitectureContext) + if (event.getElement() instanceof MergedArchitectureContext) { contexts = Collections.singletonList((MergedArchitectureContext) event.getElement()); - else - contexts = ((MergedArchitectureDomain)event.getElement()).getContexts(); + } else { + contexts = ((MergedArchitectureDomain) event.getElement()).getContexts(); + } for (MergedArchitectureContext context : contexts) { - if (event.getChecked() == false) + if (event.getChecked() == false) { fPreferences.getExcludedContextIds().add(context.getId()); - else + } else { fPreferences.getExcludedContextIds().remove(context.getId()); + } } } }); fContextsViewer.setInput(fMerger); fContextsViewer.expandAll(); - + ColumnViewerToolTipSupport.enableFor(fContextsViewer, ToolTip.NO_RECREATE); Composite buttonComposite = createComposite(tableComposite, 1, 1, GridData.FILL_VERTICAL | GridData.VERTICAL_ALIGN_BEGINNING, 0, 0); @@ -257,7 +235,7 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements fOtherButton = createPushButton(buttonComposite, "Other Architecture Models...", null, SWT.PUSH); fOtherButton.addSelectionListener(new SelectionAdapter() { - + @Override public void widgetSelected(SelectionEvent e) { handleOther(); @@ -277,26 +255,32 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements Composite descriptionComposite = createComposite(comp, 1, 1, GridData.FILL_HORIZONTAL, 0, 0); createLabel(descriptionComposite, "Description:", 1); - + fDescription = new ListViewer(descriptionComposite); gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = 50; fDescription.getControl().setLayoutData(gd); fDescription.setContentProvider(new IStructuredContentProvider() { private Object input; + + @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.input = newInput; } + + @Override public void dispose() { } + + @Override public Object[] getElements(Object inputElement) { - return new Object[] {input}; + return new Object[] { input }; } }); fDescription.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { - return ((MergedADElement)element).getDescription(); + return ((MergedADElement) element).getDescription(); } }); } @@ -305,14 +289,14 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements * Handles the selection of other models by merging them */ private void handleOther() { - ArchitectureModelSelectDialog dialog = new ArchitectureModelSelectDialog(getShell(), "File Selection", fPreferences.getAddedModelURIs().toArray(new String[0])); - dialog.open(); - List<URI> files = dialog.getURIs(); - fPreferences.getAddedModelURIs().clear(); - for (URI file : files) { - fPreferences.getAddedModelURIs().add(file.toString()); - } - fMerger.setPreferenceModels(files); + ArchitectureModelSelectDialog dialog = new ArchitectureModelSelectDialog(getShell(), "File Selection", fPreferences.getAddedModelURIs().toArray(new String[0])); + dialog.open(); + List<URI> files = dialog.getURIs(); + fPreferences.getAddedModelURIs().clear(); + for (URI file : files) { + fPreferences.getAddedModelURIs().add(file.toString()); + } + fMerger.setPreferenceModels(files); fContextsViewer.refresh(); fContextsViewer.expandAll(); } @@ -384,7 +368,7 @@ public class ArchitectureContextPreferencePage extends PreferencePage implements g.setLayoutData(gd); return g; } - + private static Label createLabel(Composite parent, String text, int hspan) { Label l = new Label(parent, SWT.NONE); l.setFont(parent.getFont()); diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureContextItemProvider.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureContextItemProvider.java new file mode 100644 index 00000000000..2c9557966e9 --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureContextItemProvider.java @@ -0,0 +1,103 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Predicate; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.StyledString; +import org.eclipse.emf.edit.provider.StyledString.Style; +import org.eclipse.papyrus.infra.architecture.ArchitectureDomainPreferences; +import org.eclipse.papyrus.infra.core.architecture.ArchitectureContext; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureContext; + +/** + * An item provider for the <em>Merged Architecture Description</em> façade API. + */ +public abstract class MergedArchitectureContextItemProvider extends MergedArchitectureItemProvider { + + // Omit the URI authority to use the current viewer font family and the size segment to use the current size + private final StyledString.Style BOLD = Style.newBuilder().setFont(URI.createURI("font:////bold")).toStyle(); //$NON-NLS-1$ + + private ArchitectureDomainPreferences preferences = new ArchitectureDomainPreferences(); + + public MergedArchitectureContextItemProvider(AdapterFactory adapterFactory, MergedArchitectureContext owner) { + super(adapterFactory, owner); + } + + @Override + protected ArchitectureContext getADElement() { + return (ArchitectureContext) getValue(); + } + + @Override + protected MergedArchitectureContext getMergedElement() { + return (MergedArchitectureContext) getOwner(); + } + + @Override + public Object getStyledText(Object object) { + if (object instanceof MergedArchitectureContext) { + MergedArchitectureContext context = (MergedArchitectureContext) object; + if (context.getId() != null && context.getId().equals(preferences.getDefaultContextId())) { + return new StyledString(context.getName(), BOLD); + } + } + return super.getStyledText(object); + } + + @Override + public Object getParent(Object object) { + if (object instanceof MergedArchitectureContext) { + return ((MergedArchitectureContext) object).getDomain(); + } + return super.getParent(object); + } + + @Override + public boolean hasChildren(Object object) { + if (object instanceof MergedArchitectureContext) { + MergedArchitectureContext context = (MergedArchitectureContext) object; + return !context.getViewpoints().isEmpty(); + } + return super.hasChildren(object); + } + + @Override + public Collection<?> getChildren(Object object) { + if (object instanceof MergedArchitectureContext) { + MergedArchitectureContext context = (MergedArchitectureContext) object; + List<Object> result = new ArrayList<>(); + result.addAll(context.getViewpoints()); + return result; + } else { + return super.getChildren(object); + } + } + + @Override + protected Predicate<IItemPropertyDescriptor> propertyDescriptorFilter(Object object) { + // Remove properties for properties that are elided by merge + String dependenciesCategory = getString("_UI_DependenciesPropertyCategory"); + return pd -> dependenciesCategory.equals(pd.getCategory(object)); + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDescriptionLanguageItemProvider.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDescriptionLanguageItemProvider.java new file mode 100644 index 00000000000..554dc162240 --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDescriptionLanguageItemProvider.java @@ -0,0 +1,66 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.papyrus.infra.core.architecture.ArchitectureDescriptionLanguage; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDescriptionLanguage; + +/** + * An item provider for the <em>Merged Architecture Description</em> façade API. + */ +public class MergedArchitectureDescriptionLanguageItemProvider extends MergedArchitectureContextItemProvider { + + public MergedArchitectureDescriptionLanguageItemProvider(AdapterFactory adapterFactory, MergedArchitectureDescriptionLanguage owner) { + super(adapterFactory, owner); + } + + @Override + protected ArchitectureDescriptionLanguage getADElement() { + return (ArchitectureDescriptionLanguage) getValue(); + } + + @Override + protected MergedArchitectureDescriptionLanguage getMergedElement() { + return (MergedArchitectureDescriptionLanguage) getOwner(); + } + + @Override + public boolean hasChildren(Object object) { + if (object instanceof ArchitectureDescriptionLanguage) { + ArchitectureDescriptionLanguage adl = (ArchitectureDescriptionLanguage) object; + return super.hasChildren(object) || !adl.getRepresentationKinds().isEmpty(); + } + return super.hasChildren(object); + } + + @Override + public Collection<?> getChildren(Object object) { + if (object instanceof ArchitectureDescriptionLanguage) { + ArchitectureDescriptionLanguage adl = (ArchitectureDescriptionLanguage) object; + List<Object> result = new ArrayList<>(super.getChildren(adl)); + result.addAll(adl.getRepresentationKinds()); + return result; + } else { + return super.getChildren(object); + } + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDomainItemProvider.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDomainItemProvider.java new file mode 100644 index 00000000000..50a827119ce --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDomainItemProvider.java @@ -0,0 +1,76 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.papyrus.infra.core.architecture.ArchitectureDomain; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDomain; + +/** + * An item provider for the <em>Merged Architecture Description</em> façade API. + */ +public class MergedArchitectureDomainItemProvider extends MergedArchitectureItemProvider { + + public MergedArchitectureDomainItemProvider(AdapterFactory adapterFactory, MergedArchitectureDomain owner) { + super(adapterFactory, owner); + } + + @Override + protected ArchitectureDomain getADElement() { + return (ArchitectureDomain) getValue(); + } + + @Override + protected MergedArchitectureDomain getMergedElement() { + return (MergedArchitectureDomain) getOwner(); + } + + @Override + public Object getParent(Object object) { + if (object instanceof MergedArchitectureDomain) { + return null; + } + return super.getParent(object); + } + + @Override + public boolean hasChildren(Object object) { + if (object instanceof MergedArchitectureDomain) { + MergedArchitectureDomain domain = (MergedArchitectureDomain) object; + return !(domain.getStakeholders().isEmpty() && domain.getConcerns().isEmpty() && domain.getContexts().isEmpty()); + } + return super.hasChildren(object); + } + + @Override + public Collection<?> getChildren(Object object) { + if (object instanceof MergedArchitectureDomain) { + MergedArchitectureDomain domain = (MergedArchitectureDomain) object; + List<Object> result = new ArrayList<>(); + result.addAll(domain.getStakeholders()); + result.addAll(domain.getConcerns()); + result.addAll(domain.getContexts()); + return result; + } else { + return super.getChildren(object); + } + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureFrameworkItemProvider.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureFrameworkItemProvider.java new file mode 100644 index 00000000000..269a379cf17 --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureFrameworkItemProvider.java @@ -0,0 +1,41 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.papyrus.infra.core.architecture.ArchitectureFramework; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureFramework; + +/** + * An item provider for the <em>Merged Architecture Description</em> façade API. + */ +public class MergedArchitectureFrameworkItemProvider extends MergedArchitectureContextItemProvider { + + public MergedArchitectureFrameworkItemProvider(AdapterFactory adapterFactory, MergedArchitectureFramework owner) { + super(adapterFactory, owner); + } + + @Override + protected ArchitectureFramework getADElement() { + return (ArchitectureFramework) getValue(); + } + + @Override + protected MergedArchitectureFramework getMergedElement() { + return (MergedArchitectureFramework) getOwner(); + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProvider.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProvider.java new file mode 100644 index 00000000000..34b05450ff9 --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProvider.java @@ -0,0 +1,143 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Path; +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemStyledLabelProvider; +import org.eclipse.emf.edit.provider.StyledString; +import org.eclipse.papyrus.infra.core.architecture.ADElement; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedADElement; +import org.eclipse.papyrus.infra.core.architecture.provider.ArchitectureEditPlugin; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; + +/** + * An item provider for the <em>Merged Architecture Description</em> façade API. + */ +public abstract class MergedArchitectureItemProvider extends DelegatingWrapperItemProvider implements Adapter, IItemStyledLabelProvider { + + public MergedArchitectureItemProvider(AdapterFactory adapterFactory, MergedADElement owner) { + super(owner.getAdapter(ADElement.class), owner, null, Notification.NO_INDEX, adapterFactory); + } + + protected ADElement getADElement() { + return (ADElement) getValue(); + } + + protected MergedADElement getMergedElement() { + return (MergedADElement) getOwner(); + } + + @Override + public String getText(Object object) { + return ((MergedADElement) object).getName(); + } + + @Override + public Object getStyledText(Object object) { + return new StyledString(getText(object)); + } + + @Override + public Object getImage(Object object) { + URI result = null; + + @SuppressWarnings("deprecation") + ADElement imageObject = ((MergedADElement) object).getImageObject(); + if (imageObject != null && imageObject.getIcon() != null) { + result = URI.createURI(imageObject.getIcon()); + + // Normalize for workspace mappings + ResourceSet rset = EMFHelper.getResourceSet(imageObject); + if (rset != null) { + result = rset.getURIConverter().normalize(result); + } + + // The Eclipse platform will try to find a 2x image on hi-DPI displays, which will + // fail because it only supports platform:/plugin URLs (not platform:/resource). So, + // further resolve to a file on its behalf + result = Optional.ofNullable(result).filter(URI::isPlatformResource) + .map(uri -> ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri.toPlatformString(true))).getLocationURI()) + .map(java.net.URI::toString) + .map(URI::createURI) + .orElse(result); + } + + return result; + } + + protected Stream<?> wrap(Object owner, Collection<?> objects) { + return objects.stream().map(value -> createWrapper(value, owner, getRootAdapterFactory())); + } + + protected void wrapInto(Object owner, Collection<?> objects, Collection<Object> wrappers) { + wrap(owner, objects).forEach(wrappers::add); + } + + protected Predicate<? super IItemPropertyDescriptor> propertyDescriptorFilter(Object object) { + return __ -> false; + } + + @Override + public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) { + if (propertyDescriptors == null) { + propertyDescriptors = super.getPropertyDescriptors(object); + + // Remove unwanted properties + propertyDescriptors.removeIf(propertyDescriptorFilter(object)); + } + + return propertyDescriptors; + } + + protected String getString(String key) { + return ArchitectureEditPlugin.INSTANCE.getString(key); + } + + // + // Adapter protocol + // + + @Override + public boolean isAdapterForType(Object type) { + return type == adapterFactory || (type instanceof Class<?> && ((Class<?>) type).isInstance(this)); + } + + @Override + public Notifier getTarget() { + return getMergedElement(); + } + + @Override + public void setTarget(Notifier newTarget) { + // Pass + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProviderAdapterFactory.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProviderAdapterFactory.java new file mode 100644 index 00000000000..171aacf074c --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProviderAdapterFactory.java @@ -0,0 +1,122 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.IDisposable; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IItemStyledLabelProvider; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedADElement; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDescriptionLanguage; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDomain; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureFramework; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureViewpoint; + +/** + * An item provider factory for the <em>Merged Architecture Description</em> façade API. + */ +public class MergedArchitectureItemProviderAdapterFactory extends AdapterFactoryImpl implements ComposeableAdapterFactory, IDisposable { + + private final Set<?> supportedTypes = Set.of( + IItemLabelProvider.class, + IItemStyledLabelProvider.class, + IItemPropertySource.class, + IStructuredItemContentProvider.class, + ITreeItemContentProvider.class, + MergedADElement.class.getPackage()); + + private final Map<MergedADElement, MergedArchitectureItemProvider> providers = new HashMap<>(); + + private ComposedAdapterFactory parent; + + @Override + public boolean isFactoryForType(Object type) { + return supportedTypes.contains(type); + } + + @Override + public Object adapt(Object object, Object type) { + if (isFactoryForType(type)) { + Object adapter = super.adapt(object, type); + if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) { + return adapter; + } + } + + return null; + } + + @Override + protected Adapter createAdapter(Notifier target) { + if (target instanceof MergedArchitectureDomain) { + return createDomainItemProvider((MergedArchitectureDomain) target); + } + if (target instanceof MergedArchitectureDescriptionLanguage) { + return createDescriptionLanguageItemProvider((MergedArchitectureDescriptionLanguage) target); + } + if (target instanceof MergedArchitectureFramework) { + return createFrameworkItemProvider((MergedArchitectureFramework) target); + } + if (target instanceof MergedArchitectureViewpoint) { + return createViewpointItemProvider((MergedArchitectureViewpoint) target); + } + return null; + } + + protected MergedArchitectureItemProvider createDomainItemProvider(MergedArchitectureDomain target) { + return providers.computeIfAbsent(target, __ -> new MergedArchitectureDomainItemProvider(this, target)); + } + + protected MergedArchitectureItemProvider createDescriptionLanguageItemProvider(MergedArchitectureDescriptionLanguage target) { + return providers.computeIfAbsent(target, __ -> new MergedArchitectureDescriptionLanguageItemProvider(this, target)); + } + + protected MergedArchitectureItemProvider createFrameworkItemProvider(MergedArchitectureFramework target) { + return providers.computeIfAbsent(target, __ -> new MergedArchitectureFrameworkItemProvider(this, target)); + } + + protected MergedArchitectureItemProvider createViewpointItemProvider(MergedArchitectureViewpoint target) { + return providers.computeIfAbsent(target, __ -> new MergedArchitectureViewpointItemProvider(this, target)); + } + + @Override + public void dispose() { + providers.values().forEach(IDisposable::dispose); + providers.clear(); + } + + @Override + public ComposeableAdapterFactory getRootAdapterFactory() { + return parent == null ? null : parent.getRootAdapterFactory(); + } + + @Override + public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) { + this.parent = parentAdapterFactory; + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureViewpointItemProvider.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureViewpointItemProvider.java new file mode 100644 index 00000000000..f02925a730a --- /dev/null +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureViewpointItemProvider.java @@ -0,0 +1,90 @@ +/***************************************************************************** + * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.ui.architecture.providers; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.function.Predicate; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.papyrus.infra.core.architecture.ArchitecturePackage; +import org.eclipse.papyrus.infra.core.architecture.ArchitectureViewpoint; +import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureViewpoint; + +/** + * An item provider for the <em>Merged Architecture Description</em> façade API. + */ +public class MergedArchitectureViewpointItemProvider extends MergedArchitectureItemProvider { + + public MergedArchitectureViewpointItemProvider(AdapterFactory adapterFactory, MergedArchitectureViewpoint owner) { + super(adapterFactory, owner); + } + + @Override + protected ArchitectureViewpoint getADElement() { + return (ArchitectureViewpoint) getValue(); + } + + @Override + protected MergedArchitectureViewpoint getMergedElement() { + return (MergedArchitectureViewpoint) getOwner(); + } + + @Override + public Object getParent(Object object) { + if (object instanceof MergedArchitectureViewpoint) { + return ((MergedArchitectureViewpoint) object).getContext(); + } + return super.getParent(object); + } + + @Override + public boolean hasChildren(Object object) { + if (object instanceof MergedArchitectureViewpoint) { + MergedArchitectureViewpoint viewpoint = (MergedArchitectureViewpoint) object; + return !(viewpoint.getConcerns().isEmpty() && viewpoint.getRepresentationKinds().isEmpty()); + } + return super.hasChildren(object); + } + + @Override + public Collection<?> getChildren(Object object) { + if (object instanceof MergedArchitectureViewpoint) { + MergedArchitectureViewpoint viewpoint = (MergedArchitectureViewpoint) object; + List<Object> result = new ArrayList<>(); + + // Wrap objects that aren't owned but cross-referenced + wrapInto(viewpoint, viewpoint.getConcerns(), result); + wrapInto(viewpoint, viewpoint.getRepresentationKinds(), result); + return result; + } else { + return super.getChildren(object); + } + } + + @Override + protected Predicate<IItemPropertyDescriptor> propertyDescriptorFilter(Object object) { + // Remove properties for wrapped children + Set<EStructuralFeature> unwanted = Set.of(ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT__CONCERNS, + ArchitecturePackage.Literals.ARCHITECTURE_VIEWPOINT__REPRESENTATION_KINDS); + return pd -> unwanted.contains(pd.getFeature(object)); + } + +} diff --git a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/widgets/ArchitectureContextComposite.java b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/widgets/ArchitectureContextComposite.java index 137d297bab1..f3911a172d2 100644 --- a/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/widgets/ArchitectureContextComposite.java +++ b/plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/widgets/ArchitectureContextComposite.java @@ -1,22 +1,21 @@ /** - * Copyright (c) 2017 CEA LIST. - * + * Copyright (c) 2017, 2021 CEA LIST, Christian W. Damus, and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * + * * Contributors: * Maged Elaasar - Initial API and implementation - * - * + * Christian W. Damus - bug 570486 + * + * */ package org.eclipse.papyrus.infra.ui.architecture.widgets; -import java.net.MalformedURLException; -import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -35,21 +34,16 @@ import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ICheckStateProvider; -import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.window.ToolTip; import org.eclipse.papyrus.infra.architecture.ArchitectureDomainManager; -import org.eclipse.papyrus.infra.core.architecture.ADElement; import org.eclipse.papyrus.infra.core.architecture.merged.MergedADElement; import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureContext; import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDomain; import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureViewpoint; -import org.eclipse.papyrus.infra.ui.architecture.ArchitectureUIPlugin; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -64,14 +58,14 @@ import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer; * @since 1.0 */ public class ArchitectureContextComposite extends Composite { - + /** - * An interface for doing updates upon selection changes + * An interface for doing updates upon selection changes */ public static interface Updater { void update(); } - + // allow selection of multiple contexts private boolean allowSeveralContexts; @@ -83,13 +77,13 @@ public class ArchitectureContextComposite extends Composite { // the viewer for architecture contexts private CheckboxTreeViewer contextsViewer; - + // the viewer for architecture viewpoints private CheckboxTableViewer viewpointViewer; // the adapter factory of the architecture metadata private ComposedAdapterFactory composedAdapterFactory; - + // an updater to call upon selection changes private Updater updater; @@ -106,9 +100,9 @@ public class ArchitectureContextComposite extends Composite { public ArchitectureContextComposite(Composite parent, int columns, int hspan, int fill, int marginwidth, int marginheight) { super(parent, SWT.NONE); layoutComposite(this, parent, columns, hspan, fill, marginwidth, marginheight); - + composedAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); - + Composite tableComposite = createComposite(this, 1, 1, GridData.FILL_BOTH, 0, 0); createLabel(tableComposite, "Architecture Contexts:", 2); @@ -119,172 +113,155 @@ public class ArchitectureContextComposite extends Composite { contextsViewer.setContentProvider(new ITreeContentProvider() { private Collection<MergedArchitectureContext> allContexts; + @Override public boolean hasChildren(Object element) { return element instanceof MergedArchitectureDomain; } + @Override public Object getParent(Object element) { return null; } + @Override public Object[] getElements(Object inputElement) { - Set<MergedArchitectureDomain> allDomains = new LinkedHashSet<MergedArchitectureDomain>(); - allContexts = new LinkedHashSet<MergedArchitectureContext>(); - for (Object obj : ((Object[])inputElement)) { - MergedArchitectureContext context = (MergedArchitectureContext)obj; + Set<MergedArchitectureDomain> allDomains = new LinkedHashSet<>(); + allContexts = new LinkedHashSet<>(); + for (Object obj : ((Object[]) inputElement)) { + MergedArchitectureContext context = (MergedArchitectureContext) obj; allContexts.add(context); allDomains.add(context.getDomain()); } return allDomains.toArray(); } + @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof MergedArchitectureDomain) { - MergedArchitectureDomain domain = (MergedArchitectureDomain)parentElement; - List<MergedArchitectureContext> possibleContexts = new ArrayList<MergedArchitectureContext>(domain.getContexts()); + MergedArchitectureDomain domain = (MergedArchitectureDomain) parentElement; + List<MergedArchitectureContext> possibleContexts = new ArrayList<>(domain.getContexts()); possibleContexts.retainAll(allContexts); return possibleContexts.toArray(); } return null; } }); - contextsViewer.setLabelProvider(new AdapterFactoryLabelProvider(composedAdapterFactory) { - @Override - public Image getImage(Object object) { - MergedADElement element = (MergedADElement) object; - ADElement imageObject = element.getImageObject(); - if (imageObject != null && imageObject.getIcon() != null) { - try { - URL image = new URL(imageObject.getIcon().toString()); - return getImageFromObject(image); - } catch (MalformedURLException e) { - ArchitectureUIPlugin.log.error(e); - return null; - } - } - return super.getImage(imageObject); - } - @Override - public String getText(Object object) { - return ((MergedADElement)object).getName(); - } - }); + contextsViewer.setLabelProvider(new AdapterFactoryLabelProvider(composedAdapterFactory)); contextsViewer.setComparator(new ViewerComparator()); contextsViewer.setCheckStateProvider(new ICheckStateProvider() { @Override public boolean isGrayed(Object element) { return false; } + @Override public boolean isChecked(Object element) { - if (element instanceof MergedArchitectureContext) - return selectedContexts.contains(((MergedArchitectureContext)element).getId()); - else + if (element instanceof MergedArchitectureContext) { + return selectedContexts.contains(((MergedArchitectureContext) element).getId()); + } else { return contextsViewer.getChecked(element); + } } }); contextsViewer.addCheckStateListener(new ICheckStateListener() { @Override public void checkStateChanged(CheckStateChangedEvent event) { ArchitectureDomainManager manager = ArchitectureDomainManager.getInstance(); - + if (!allowSeveralContexts) { if (event.getChecked() || contextsViewer.getCheckedElements().length == 0) { if (event.getElement() instanceof MergedArchitectureContext) { - contextsViewer.setCheckedElements(new Object[] {event.getElement()}); + contextsViewer.setCheckedElements(new Object[] { event.getElement() }); } else { for (TreeItem item : contextsViewer.getTree().getItems()) { if (item.getData() == event.getElement()) { - contextsViewer.setCheckedElements(new Object[] {item.getItem(0).getData()}); + contextsViewer.setCheckedElements(new Object[] { item.getItem(0).getData() }); break; } } } } } - + selectedContexts.clear(); for (Object element : contextsViewer.getCheckedElements()) { - if (element instanceof MergedArchitectureContext) - selectedContexts.add(((MergedArchitectureContext)element).getId()); + if (element instanceof MergedArchitectureContext) { + selectedContexts.add(((MergedArchitectureContext) element).getId()); + } } - + selectedViewpoints.clear(); for (String contextId : selectedContexts) { MergedArchitectureContext context = manager.getArchitectureContextById(contextId); Collection<MergedArchitectureViewpoint> viewpoints = context.getDefaultViewpoints(); - if (viewpoints.isEmpty()) + if (viewpoints.isEmpty()) { viewpoints = context.getViewpoints(); + } for (MergedArchitectureViewpoint viewpoint : viewpoints) { selectedViewpoints.add(viewpoint.getId()); } } - + updateViewpoints(); - if (updater != null) + if (updater != null) { updater.update(); + } } }); - + ColumnViewerToolTipSupport.enableFor(contextsViewer, ToolTip.NO_RECREATE); Composite viewpointComposite = createComposite(this, 1, 1, GridData.FILL_HORIZONTAL, 0, 0); createLabel(viewpointComposite, "Architecture Viewpoints:", 1); - + viewpointViewer = CheckboxTableViewer.newCheckList(viewpointComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = 100; viewpointViewer.getControl().setLayoutData(gd); viewpointViewer.setContentProvider(new IStructuredContentProvider() { + @Override public Object[] getElements(Object inputElement) { - Set<MergedADElement> viewpoints = new TreeSet<MergedADElement>(new Comparator<MergedADElement>() { + Set<MergedADElement> viewpoints = new TreeSet<>(new Comparator<MergedADElement>() { @Override public int compare(MergedADElement o1, MergedADElement o2) { return o1.getName().compareTo(o2.getName()); } }); - for (Object obj : ((Object[])inputElement)) { - if (obj instanceof MergedArchitectureContext) - viewpoints.addAll(((MergedArchitectureContext)obj).getViewpoints()); + for (Object obj : ((Object[]) inputElement)) { + if (obj instanceof MergedArchitectureContext) { + viewpoints.addAll(((MergedArchitectureContext) obj).getViewpoints()); + } } return viewpoints.toArray(); } }); - viewpointViewer.setLabelProvider(new LabelProvider() { - private ILabelProvider provider = new AdapterFactoryLabelProvider(composedAdapterFactory); - @Override - public Image getImage(Object object) { - MergedADElement element = (MergedADElement) object; - return provider.getImage(element.getImageObject()); - } - @Override - public String getText(Object object) { - return ((MergedADElement)object).getName(); - } - }); + viewpointViewer.setLabelProvider(new AdapterFactoryLabelProvider(composedAdapterFactory)); viewpointViewer.setCheckStateProvider(new ICheckStateProvider() { @Override public boolean isGrayed(Object element) { return false; } + @Override public boolean isChecked(Object element) { - return selectedViewpoints.contains(((MergedArchitectureViewpoint)element).getId()); + return selectedViewpoints.contains(((MergedArchitectureViewpoint) element).getId()); } }); viewpointViewer.addCheckStateListener(new ICheckStateListener() { @Override public void checkStateChanged(CheckStateChangedEvent event) { MergedArchitectureViewpoint viewpoint = (MergedArchitectureViewpoint) event.getElement(); - if (event.getChecked()) + if (event.getChecked()) { selectedViewpoints.add(viewpoint.getId()); - else + } else { selectedViewpoints.remove(viewpoint.getId()); + } updateViewpoints(); - if (updater != null) + if (updater != null) { updater.update(); + } } }); updateViewpoints(); @@ -292,40 +269,42 @@ public class ArchitectureContextComposite extends Composite { /** * Sets the input object of the composite that initializes its viewers - * - * @param input the input object + * + * @param input + * the input object */ - public void setInput(Object input) { + public void setInput(Object input) { contextsViewer.setInput(input); contextsViewer.expandAll(); updateViewpoints(); - } - - /** - * Sets whether to show several context - * - * @param allowSeveralContexts boolean value - */ - public void setAllowSeveralContexts(boolean allowSeveralContexts) { + } + + /** + * Sets whether to show several context + * + * @param allowSeveralContexts + * boolean value + */ + public void setAllowSeveralContexts(boolean allowSeveralContexts) { this.allowSeveralContexts = allowSeveralContexts; } - - /** - * @return an array of selected contexts - */ + + /** + * @return an array of selected contexts + */ public String[] getSelectedContexts() { return selectedContexts.toArray(new String[0]); } /** * Sets the selected contexts - * + * * @param selectedContexts */ public void setSelectedContexts(String[] selectedContexts) { - this.selectedContexts = new HashSet<String>(Arrays.asList(selectedContexts)); + this.selectedContexts = new HashSet<>(Arrays.asList(selectedContexts)); } - + /** * @return an array of selected viewpoints */ @@ -335,16 +314,16 @@ public class ArchitectureContextComposite extends Composite { /** * Sets the selected viewpoints - * + * * @param selectedViewpoints */ public void setSelectedViewpoints(String[] selectedViewpoints) { - this.selectedViewpoints = new HashSet<String>(Arrays.asList(selectedViewpoints)); + this.selectedViewpoints = new HashSet<>(Arrays.asList(selectedViewpoints)); } - + /** - * Sets the updater instance - * + * Sets the updater instance + * * @param updater */ public void setUpdater(Updater updater) { @@ -352,7 +331,7 @@ public class ArchitectureContextComposite extends Composite { } /* - * update the viewpoint viewer based on changes to context viewer + * update the viewpoint viewer based on changes to context viewer */ private void updateViewpoints() { viewpointViewer.setInput(contextsViewer.getCheckedElements()); @@ -363,7 +342,7 @@ public class ArchitectureContextComposite extends Composite { layoutComposite(g, parent, columns, hspan, fill, marginwidth, marginheight); return g; } - + private static Composite layoutComposite(Composite g, Composite parent, int columns, int hspan, int fill, int marginwidth, int marginheight) { GridLayout layout = new GridLayout(columns, false); layout.marginWidth = marginwidth; diff --git a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/ViewpointExplorer.java b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/ViewpointExplorer.java index f556d885937..f73dbcef294 100755..100644 --- a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/ViewpointExplorer.java +++ b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/ViewpointExplorer.java @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014 CEA LIST. + * Copyright (c) 2014, 2021 CEA LIST, Christian W. Damus, and others. * * * All rights reserved. This program and the accompanying materials @@ -11,41 +11,31 @@ * * Contributors: * Laurent Wouters laurent.wouters@cea.fr - Initial API and implementation + * Christian W. Damus - bug 570486 * *****************************************************************************/ package org.eclipse.papyrus.infra.viewpoints.policy; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.List; -import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.domain.IEditingDomainProvider; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; -import org.eclipse.emf.edit.provider.IItemPropertySource; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; -import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; import org.eclipse.emf.edit.ui.provider.PropertySource; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.papyrus.infra.architecture.ArchitectureDescriptionUtils; -import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureContext; -import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureDescriptionLanguage; -import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureFramework; -import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureViewpoint; -import org.eclipse.papyrus.infra.core.architecture.provider.ArchitectureEditPlugin; -import org.eclipse.papyrus.infra.core.architecture.provider.ArchitectureItemProviderAdapterFactory; import org.eclipse.papyrus.infra.core.resource.ModelSet; import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor; -import org.eclipse.papyrus.infra.viewpoints.policy.providers.MergedArchitectureDescriptionLanguageItemProvider; -import org.eclipse.papyrus.infra.viewpoints.policy.providers.MergedArchitectureFrameworkItemProvider; -import org.eclipse.papyrus.infra.viewpoints.policy.providers.MergedArchitectureViewpointItemProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; @@ -53,9 +43,7 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IPartListener; -import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; /** @@ -69,46 +57,38 @@ public class ViewpointExplorer extends ViewPart { private TreeViewer tree; private IPartListener listener; - - private ArchitectureItemProviderAdapterFactory architectureAdapterFactory; + private ComposedAdapterFactory adapterFactory; private AdapterFactoryContentProvider contentProvider; private AdapterFactoryLabelProvider labelProvider; private AdapterFactoryEditingDomain editingDomain; - + private class ViewpointAdapterFactory extends ComposedAdapterFactory implements IEditingDomainProvider { public ViewpointAdapterFactory(Descriptor.Registry adapterFactoryDescriptorRegistry) { super(adapterFactoryDescriptorRegistry); } - + @Override public EditingDomain getEditingDomain() { return editingDomain; } } - + /** * Constructor. - * */ public ViewpointExplorer() { - architectureAdapterFactory = new ArchitectureItemProviderAdapterFactory(); adapterFactory = new ViewpointAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); - contentProvider = new AdapterFactoryContentProvider(adapterFactory); - labelProvider = new AdapterFactoryLabelProvider(adapterFactory); + contentProvider = createContentProvider(adapterFactory); + labelProvider = createLabelProvider(adapterFactory); editingDomain = new AdapterFactoryEditingDomain(adapterFactory, null, new HashMap<Resource, Boolean>()) { - @Override - public boolean isReadOnly(Resource resource) { - return true; // to make the editing domain non-editable - } + @Override + public boolean isReadOnly(Resource resource) { + return true; // to make the editing domain non-editable + } }; } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ + @Override public void createPartControl(Composite parent) { GridLayout gridLayout = new GridLayout(); @@ -120,129 +100,101 @@ public class ViewpointExplorer extends ViewPart { inner.setLayout(new FillLayout()); tree = new TreeViewer(inner, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - tree.setLabelProvider(createLabelProvider(adapterFactory)); - tree.setContentProvider(createContentProvider(adapterFactory)); - - getSite().getPage().addPartListener(listener = createSelectionListener(tree)); + tree.setLabelProvider(labelProvider); + tree.setContentProvider(contentProvider); + + getSite().getPage().addPartListener(listener = createSelectionListener(tree)); getSite().setSelectionProvider(tree); } - public void dispose() { - if (listener != null) - getSite().getPage().removePartListener(listener); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#setFocus() - */ - @Override - public void setFocus() { - - } + AdapterFactoryLabelProvider createLabelProvider(AdapterFactory adapterFactory) { + return new AdapterFactoryLabelProvider(adapterFactory) { - private ILabelProvider createLabelProvider(ComposedAdapterFactory adapterFactory) { - return new LabelProvider() { + @Override + public String getText(Object object) { + return super.getText(unwrapPropertySource(object)); + } @Override - public Image getImage(Object element) { - if (element instanceof PropertySource) { - element = ((PropertySource)element).getObject(); - } - if (element instanceof MergedArchitectureDescriptionLanguage) { - Object object = ArchitectureEditPlugin.INSTANCE.getImage("full/obj16/ArchitectureDescriptionLanguage"); - return ExtendedImageRegistry.INSTANCE.getImage(object); - } - if (element instanceof MergedArchitectureFramework) { - Object object = ArchitectureEditPlugin.INSTANCE.getImage("full/obj16/ArchitectureFramework"); - return ExtendedImageRegistry.INSTANCE.getImage(object); - } - if (element instanceof MergedArchitectureViewpoint) { - Object object = ArchitectureEditPlugin.INSTANCE.getImage("full/obj16/ArchitectureViewpoint"); - return ExtendedImageRegistry.INSTANCE.getImage(object); - } - return labelProvider.getImage(element); + public Image getImage(Object object) { + return super.getImage(unwrapPropertySource(object)); } @Override - public String getText(Object element) { - if (element instanceof PropertySource) { - element = ((PropertySource)element).getObject(); - } - if (element instanceof MergedArchitectureDescriptionLanguage) { - String text = ArchitectureEditPlugin.INSTANCE.getString("_UI_ArchitectureDescriptionLanguage_type"); - return text + " " + ((MergedArchitectureDescriptionLanguage)element).getName(); - } - if (element instanceof MergedArchitectureFramework) { - String text = ArchitectureEditPlugin.INSTANCE.getString("_UI_ArchitectureFramework_type"); - return text + " " + ((MergedArchitectureFramework)element).getName(); - } - if (element instanceof MergedArchitectureViewpoint) { - String text = ArchitectureEditPlugin.INSTANCE.getString("_UI_ArchitectureViewpoint_type"); - return text + " " + ((MergedArchitectureViewpoint)element).getName(); - } - return labelProvider.getText(element); + public StyledString getStyledText(Object object) { + return super.getStyledText(unwrapPropertySource(object)); } + }; } - - private ITreeContentProvider createContentProvider(ComposedAdapterFactory adapterFactory) { - return new ITreeContentProvider() { - private ArchitectureDescriptionUtils utils; - + + AdapterFactoryContentProvider createContentProvider(AdapterFactory adapterFactory) { + return new AdapterFactoryContentProvider(adapterFactory) { + @Override - public boolean hasChildren(Object element) { - return getChildren(element) != null; + public Object[] getElements(Object object) { + Object[] result; + + if (object instanceof Collection<?>) { + result = ((Collection<?>) object).toArray(); + } else if (object instanceof Object[]) { + result = (Object[]) object; + } else { + result = super.getElements(object); + } + + return getPropertySources(result); } - + @Override - public Object getParent(Object element) { - return null; + public boolean hasChildren(Object object) { + return super.hasChildren(unwrapPropertySource(object)); } - + @Override - public Object[] getElements(Object inputElement) { - if (inputElement instanceof ModelSet) { - utils = new ArchitectureDescriptionUtils((ModelSet)inputElement); - return getPropertySources(new Object[] {utils.getArchitectureContext()}); - } else { - utils = null; - return null; - } + public Object getParent(Object element) { + return null; } - + @Override public Object[] getChildren(Object parentElement) { - if (parentElement instanceof PropertySource) { - parentElement = ((PropertySource)parentElement).getObject(); - if (parentElement instanceof MergedArchitectureContext) - return getPropertySources(utils.getArchitectureViewpoints().toArray()); - if (parentElement instanceof MergedArchitectureViewpoint) - return getPropertySources(((MergedArchitectureViewpoint)parentElement).getRepresentationKinds().toArray()); - else - return getPropertySources(contentProvider.getChildren(parentElement)); - } - return null; + Object[] result = super.getChildren(unwrapPropertySource(parentElement)); + return getPropertySources(result); } + }; } + @Override + public void dispose() { + labelProvider.dispose(); + adapterFactory.dispose(); + if (listener != null) { + getSite().getPage().removePartListener(listener); + } + } + + @Override + public void setFocus() { + + } + private IPartListener createSelectionListener(TreeViewer viewer) { return new IPartListener() { private IWorkbenchPart editor; - + @Override public void partActivated(IWorkbenchPart part) { - if (part == editor) + if (part == editor) { viewer.refresh(); - else if (part instanceof IMultiDiagramEditor) { + } else if (part instanceof IMultiDiagramEditor) { EditingDomain domain = part.getAdapter(EditingDomain.class); if (domain != null) { ResourceSet resourceSet = domain.getResourceSet(); if (resourceSet instanceof ModelSet) { editor = part; - viewer.setInput((ModelSet)resourceSet); + ArchitectureDescriptionUtils utils = new ArchitectureDescriptionUtils((ModelSet) resourceSet); + viewer.setInput(List.of(utils.getArchitectureContext())); } } } @@ -251,7 +203,7 @@ public class ViewpointExplorer extends ViewPart { @Override public void partBroughtToTop(IWorkbenchPart part) { if (part instanceof IMultiDiagramEditor) { - + } } @@ -265,19 +217,19 @@ public class ViewpointExplorer extends ViewPart { @Override public void partDeactivated(IWorkbenchPart part) { if (part instanceof IMultiDiagramEditor) { - + } } @Override public void partOpened(IWorkbenchPart part) { if (part instanceof IMultiDiagramEditor) { - + } } - }; + }; } - + /** * @since 3.0 */ @@ -293,21 +245,11 @@ public class ViewpointExplorer extends ViewPart { * @since 3.0 */ public Object getPropertySource(Object object) { - if (object instanceof EObject) - return contentProvider.getPropertySource(object); - else if (object instanceof MergedArchitectureViewpoint) { - IItemPropertySource source = new MergedArchitectureViewpointItemProvider(architectureAdapterFactory); - return new PropertySource(object, source); - } - else if (object instanceof MergedArchitectureFramework) { - IItemPropertySource source = new MergedArchitectureFrameworkItemProvider(architectureAdapterFactory); - return new PropertySource(object, source); - } - else if (object instanceof MergedArchitectureDescriptionLanguage) { - IItemPropertySource source = new MergedArchitectureDescriptionLanguageItemProvider(architectureAdapterFactory); - return new PropertySource(object, source); - } - return object; + return contentProvider.getPropertySource(object); } - + + Object unwrapPropertySource(Object object) { + return object instanceof PropertySource ? ((PropertySource) object).getObject() : object; + } + } diff --git a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureDescriptionLanguageItemProvider.java b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureDescriptionLanguageItemProvider.java index 67c1551bdbb..1d82401fefa 100644 --- a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureDescriptionLanguageItemProvider.java +++ b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureDescriptionLanguageItemProvider.java @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2018 CEA LIST and others. + * Copyright (c) 2018, 2021 CEA LIST, Christian W. Damus, and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -10,6 +10,7 @@ * * Contributors: * CEA LIST - Initial API and implementation + * Christian W. Damus - bug 570486 * *****************************************************************************/ @@ -23,7 +24,7 @@ import org.eclipse.papyrus.infra.core.architecture.provider.ArchitectureDescript /** * @author melaasar - * + * @deprecated An item provider factory is registered for the <em>Merged Architecture Description</em> façade API. */ public class MergedArchitectureDescriptionLanguageItemProvider extends ArchitectureDescriptionLanguageItemProvider { diff --git a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureFrameworkItemProvider.java b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureFrameworkItemProvider.java index 5908fa13953..baab7e3dfe5 100644 --- a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureFrameworkItemProvider.java +++ b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureFrameworkItemProvider.java @@ -1,6 +1,6 @@ /***************************************************************************** - * Copyright (c) 2018 CEA LIST and others. - * + * Copyright (c) 2018, 2021 CEA LIST, Christian W. Damus, and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -10,7 +10,8 @@ * * Contributors: * CEA LIST - Initial API and implementation - * + * Christian W. Damus - bug 570486 + * *****************************************************************************/ package org.eclipse.papyrus.infra.viewpoints.policy.providers; @@ -23,8 +24,9 @@ import org.eclipse.papyrus.infra.core.architecture.provider.ArchitectureFramewor /** * @author melaasar - * + * @deprecated An item provider factory is registered for the <em>Merged Architecture Description</em> façade API. */ +@Deprecated public class MergedArchitectureFrameworkItemProvider extends ArchitectureFrameworkItemProvider { /** diff --git a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureViewpointItemProvider.java b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureViewpointItemProvider.java index b9ba9c6b205..960532db1fa 100644 --- a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureViewpointItemProvider.java +++ b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureViewpointItemProvider.java @@ -1,6 +1,6 @@ /***************************************************************************** - * Copyright (c) 2018 CEA LIST and others. - * + * Copyright (c) 2018, 2021 CEA LIST, Christian W. Damus, and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -10,7 +10,8 @@ * * Contributors: * CEA LIST - Initial API and implementation - * + * Christian W. Damus - bug 570486 + * *****************************************************************************/ package org.eclipse.papyrus.infra.viewpoints.policy.providers; @@ -23,8 +24,9 @@ import org.eclipse.papyrus.infra.core.architecture.provider.ArchitectureViewpoin /** * @author melaasar - * + * @deprecated An item provider factory is registered for the <em>Merged Architecture Description</em> façade API. */ +@Deprecated public class MergedArchitectureViewpointItemProvider extends ArchitectureViewpointItemProvider { /** diff --git a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedItemPropertyDescriptor.java b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedItemPropertyDescriptor.java index c7257e01a1a..8c44c890503 100644 --- a/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedItemPropertyDescriptor.java +++ b/plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedItemPropertyDescriptor.java @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2018 CEA LIST and others. + * Copyright (c) 2018, 2021 CEA LIST, Christian W. Damus, and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -10,6 +10,7 @@ * * Contributors: * CEA LIST - Initial API and implementation + * Christian W. Damus - bug 570486 * *****************************************************************************/ @@ -27,7 +28,7 @@ import org.eclipse.papyrus.infra.core.architecture.merged.MergedArchitectureView /** * @author melaasar - * + * @deprecated An item provider factory is registered for the <em>Merged Architecture Description</em> façade API. */ public class MergedItemPropertyDescriptor extends ItemPropertyDescriptor { diff --git a/plugins/toolsmiths/org.eclipse.papyrus.architectureview/src/org/eclipse/papyrus/architectureview/providers/ArchiectureViewLabelProvider.java b/plugins/toolsmiths/org.eclipse.papyrus.architectureview/src/org/eclipse/papyrus/architectureview/providers/ArchiectureViewLabelProvider.java index 1efbe98f229..822419fad87 100644 --- a/plugins/toolsmiths/org.eclipse.papyrus.architectureview/src/org/eclipse/papyrus/architectureview/providers/ArchiectureViewLabelProvider.java +++ b/plugins/toolsmiths/org.eclipse.papyrus.architectureview/src/org/eclipse/papyrus/architectureview/providers/ArchiectureViewLabelProvider.java @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2019 CEA LIST and others. + * Copyright (c) 2019, 2021 CEA LIST, Christian W. Damus, and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -10,6 +10,7 @@ * * Contributors: * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation + * Christian W. Damus - bug 570486 * *****************************************************************************/ @@ -119,10 +120,10 @@ public class ArchiectureViewLabelProvider implements ITableLabelProvider { ADElement adElement = merged.getAdapter(ADElement.class); if (0 == columnIndex) { - IItemLabelProvider itemProvider = (IItemLabelProvider) adapterFactory.adapt(adElement, IItemLabelProvider.class); + IItemLabelProvider itemProvider = (IItemLabelProvider) adapterFactory.adapt(merged, IItemLabelProvider.class); if (null != itemProvider) { - return ExtendedImageRegistry.getInstance().getImage(itemProvider.getImage(adElement)); + return ExtendedImageRegistry.getInstance().getImage(itemProvider.getImage(merged)); } } |