Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2021-04-26 12:55:07 +0000
committerChristian W. Damus2021-05-04 17:44:32 +0000
commit54146ca02afebe9048e59214824476b97fc10e8f (patch)
treee1c7a76281c4af523f4cd71cb635294ce3a5d667
parent8df54eb9b49b6054b94105eac26e8d5d691fa312 (diff)
downloadorg.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>
-rw-r--r--plugins/infra/architecture/org.eclipse.papyrus.infra.architecture.representation.edit/src-gen/org/eclipse/papyrus/infra/architecture/representation/provider/PapyrusRepresentationKindItemProvider.java135
-rw-r--r--plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedADElement.java6
-rw-r--r--plugins/infra/architecture/org.eclipse.papyrus.infra.architecture/src/org/eclipse/papyrus/infra/core/architecture/merged/MergedArchitectureDomain.java5
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/EPackagePropertyDescriptor.java5
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/ProfilePropertyDescriptor.java10
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core.architecture.edit/src/org/eclipse/papyrus/infra/core/architecture/provider/SurrogateItemPropertyDescriptor.java45
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/plugin.xml13
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/handlers/ChangeArchitectureViewpointsHandler.java15
-rw-r--r--[-rwxr-xr-x]plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/preferences/ArchitectureContextPreferencePage.java140
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureContextItemProvider.java103
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDescriptionLanguageItemProvider.java66
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureDomainItemProvider.java76
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureFrameworkItemProvider.java41
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProvider.java143
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureItemProviderAdapterFactory.java122
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/providers/MergedArchitectureViewpointItemProvider.java90
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.ui.architecture/src/org/eclipse/papyrus/infra/ui/architecture/widgets/ArchitectureContextComposite.java191
-rw-r--r--[-rwxr-xr-x]plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/ViewpointExplorer.java234
-rw-r--r--plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureDescriptionLanguageItemProvider.java5
-rw-r--r--plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureFrameworkItemProvider.java10
-rw-r--r--plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedArchitectureViewpointItemProvider.java10
-rw-r--r--plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/providers/MergedItemPropertyDescriptor.java5
-rw-r--r--plugins/toolsmiths/org.eclipse.papyrus.architectureview/src/org/eclipse/papyrus/architectureview/providers/ArchiectureViewLabelProvider.java7
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));
}
}

Back to the top