diff options
author | Eike Stepper | 2022-07-07 15:51:03 +0000 |
---|---|---|
committer | Eike Stepper | 2022-07-07 15:51:03 +0000 |
commit | 3027d6d6efc1939a65e0f9fa3bdae7bad6debf74 (patch) | |
tree | 1faeced4ae409fd490dfe1bec434ada070bfa733 /plugins/org.eclipse.emf.cdo.ui/src/org | |
parent | 7d9be8b4b1bac0ba2d2737693ed847e7ce7dcae9 (diff) | |
download | cdo-3027d6d6efc1939a65e0f9fa3bdae7bad6debf74.tar.gz cdo-3027d6d6efc1939a65e0f9fa3bdae7bad6debf74.tar.xz cdo-3027d6d6efc1939a65e0f9fa3bdae7bad6debf74.zip |
[580343] Support customizable structure providers for Net4j Introspector view
https://bugs.eclipse.org/bugs/show_bug.cgi?id=580343
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.ui/src/org')
3 files changed, 260 insertions, 17 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOIntrospectionProvider.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOIntrospectionProvider.java index 588c068d5a..9ef890d0f6 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOIntrospectionProvider.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOIntrospectionProvider.java @@ -36,6 +36,18 @@ public class CDOIntrospectionProvider extends EMFIntrospectionProvider protected static final int CATEGORY = EMFIntrospectionProvider.CATEGORY + 10; + private static final String CDO_ID = "cdoID"; + + private static final String CDO_LOCK_STATE = "cdoLockState"; + + private static final String CDO_PERMISSION = "cdoPermission"; + + private static final String CDO_REVISION = "cdoRevision"; + + private static final String CDO_STATE = "cdoState"; + + private static final String CDO_VIEW = "cdoView"; + private final Color foreground = Display.getDefault().getSystemColor(SWT.COLOR_DARK_CYAN); public CDOIntrospectionProvider() @@ -63,13 +75,87 @@ public class CDOIntrospectionProvider extends EMFIntrospectionProvider CDOObject cdoObject = getCDOObject(parent); if (cdoObject != null) { - addRow(rows, "cdoID", cdoObject.cdoID(), CDOID.class.getName(), CATEGORY, foreground); - addRow(rows, "cdoLockState", cdoObject.cdoLockState(), CDOLockState.class.getName(), CATEGORY, foreground); - addRow(rows, "cdoPermission", cdoObject.cdoPermission(), CDOPermission.class.getName(), CATEGORY, foreground); - addRow(rows, "cdoRevision", cdoObject.cdoRevision(), CDORevision.class.getName(), CATEGORY, foreground); - addRow(rows, "cdoState", cdoObject.cdoState(), CDOState.class.getName(), CATEGORY, foreground); - addRow(rows, "cdoView", cdoObject.cdoView(), CDOView.class.getName(), CATEGORY, foreground); + rows.add(createCDOIDRow(cdoObject)); + rows.add(createCDOLockStateRow(cdoObject)); + rows.add(createCDOPermissionRow(cdoObject)); + rows.add(createCDORevisionRow(cdoObject)); + rows.add(createCDOStateRow(cdoObject)); + rows.add(createCDOViewRow(cdoObject)); + } + } + + @Override + public Row getElementByName(Object parent, String name) throws Exception + { + Row result = super.getElementByName(parent, name); + if (result == null) + { + CDOObject cdoObject = getCDOObject(parent); + if (cdoObject != null) + { + if (CDO_ID.equals(name)) + { + return createCDOIDRow(cdoObject); + } + + if (CDO_LOCK_STATE.equals(name)) + { + return createCDOLockStateRow(cdoObject); + } + + if (CDO_PERMISSION.equals(name)) + { + return createCDOPermissionRow(cdoObject); + } + + if (CDO_REVISION.equals(name)) + { + return createCDORevisionRow(cdoObject); + } + + if (CDO_STATE.equals(name)) + { + return createCDOStateRow(cdoObject); + } + + if (CDO_VIEW.equals(name)) + { + return createCDOViewRow(cdoObject); + } + } } + + return result; + } + + private Row createCDOViewRow(CDOObject cdoObject) + { + return createRow(CDO_VIEW, cdoObject.cdoView(), CDOView.class.getName(), CATEGORY, foreground); + } + + private Row createCDOStateRow(CDOObject cdoObject) + { + return createRow(CDO_STATE, cdoObject.cdoState(), CDOState.class.getName(), CATEGORY, foreground); + } + + private Row createCDORevisionRow(CDOObject cdoObject) + { + return createRow(CDO_REVISION, cdoObject.cdoRevision(), CDORevision.class.getName(), CATEGORY, foreground); + } + + private Row createCDOPermissionRow(CDOObject cdoObject) + { + return createRow(CDO_PERMISSION, cdoObject.cdoPermission(), CDOPermission.class.getName(), CATEGORY, foreground); + } + + private Row createCDOLockStateRow(CDOObject cdoObject) + { + return createRow(CDO_LOCK_STATE, cdoObject.cdoLockState(), CDOLockState.class.getName(), CATEGORY, foreground); + } + + private Row createCDOIDRow(CDOObject cdoObject) + { + return createRow(CDO_ID, cdoObject.cdoID(), CDOID.class.getName(), CATEGORY, foreground); } private static CDOObject getCDOObject(Object object) diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFIntrospectionProvider.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFIntrospectionProvider.java index d1f01e30bc..47b3fce1ac 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFIntrospectionProvider.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFIntrospectionProvider.java @@ -34,6 +34,18 @@ public class EMFIntrospectionProvider extends RowIntrospectionProvider protected static final int CATEGORY = DEFAULT_CATEGORY - 20; + private static final String E_CONTAINER = "eContainer"; + + private static final String E_CLASS = "eClass"; + + private static final String E_IS_PROXY = "eIsProxy"; + + private static final String E_DELIVER = "eDeliver"; + + private static final String RESOURCE = "resource"; + + private static final String URI = "uri"; + private final Color foreground = Display.getDefault().getSystemColor(SWT.COLOR_DARK_BLUE); public EMFIntrospectionProvider() @@ -65,24 +77,131 @@ public class EMFIntrospectionProvider extends RowIntrospectionProvider { EObject eObject = (EObject)parent; - addRow(rows, "eContainer", eObject.eContainer(), EObject.class.getName(), CATEGORY, foreground); - addRow(rows, "uri", EcoreUtil.getURI(eObject), URI.class.getName(), CATEGORY, foreground); - addRow(rows, "resource", eObject.eResource(), Resource.class.getName(), CATEGORY, foreground); - addRow(rows, "eClass", eObject.eClass(), EClass.class.getName(), CATEGORY, foreground); - addRow(rows, "eIsProxy", eObject.eIsProxy(), boolean.class.getName(), CATEGORY, foreground); - addRow(rows, "eDeliver", eObject.eDeliver(), boolean.class.getName(), CATEGORY, foreground); + rows.add(createEContainerRow(eObject)); + rows.add(createURIRow(eObject)); + rows.add(createResourceRow(eObject)); + rows.add(createEClassRow(eObject)); + rows.add(createEIsProxyRow(eObject)); + rows.add(createEDeliverRow(eObject)); for (EStructuralFeature feature : eObject.eClass().getEAllStructuralFeatures()) { - Object value = eObject.eGet(feature); - rows.add(new Row(feature.getName(), value, feature.getEType().getName(), getConcreteType(value))); + rows.add(createRow(eObject, feature)); + } + } + } + + @Override + public Row getElementByName(Object parent, String name) throws Exception + { + if (parent instanceof EObject) + { + EObject eObject = (EObject)parent; + + if (E_CONTAINER.equals(name)) + { + return createEContainerRow(eObject); + } + + if (E_CLASS.equals(name)) + { + return createEClassRow(eObject); + } + + if (E_IS_PROXY.equals(name)) + { + return createEIsProxyRow(eObject); + } + + if (E_DELIVER.equals(name)) + { + return createEDeliverRow(eObject); + } + + if (RESOURCE.equals(name)) + { + return createResourceRow(eObject); + } + + if (URI.equals(name)) + { + return createURIRow(eObject); + } + + EStructuralFeature feature = eObject.eClass().getEStructuralFeature(name); + if (feature != null) + { + return createRow(eObject, feature); } } + + return null; + } + + private Row createEContainerRow(EObject eObject) + { + return createRow(E_CONTAINER, eObject.eContainer(), EObject.class.getName(), CATEGORY, foreground); + } + + private Row createURIRow(EObject eObject) + { + return createRow(URI, EcoreUtil.getURI(eObject), URI.class.getName(), CATEGORY, foreground); + } + + private Row createResourceRow(EObject eObject) + { + return createRow(RESOURCE, eObject.eResource(), Resource.class.getName(), CATEGORY, foreground); } - protected static void addRow(List<Row> rows, String name, Object value, String declaredType, int category, Color foreground) + private Row createEClassRow(EObject eObject) { - rows.add(new Row(name, value, declaredType, getConcreteType(value), category, foreground, null)); + return createRow(E_CLASS, eObject.eClass(), EClass.class.getName(), CATEGORY, foreground); + } + + private Row createEIsProxyRow(EObject eObject) + { + return createRow(E_IS_PROXY, eObject.eIsProxy(), boolean.class.getName(), CATEGORY, foreground); + } + + private Row createEDeliverRow(EObject eObject) + { + return createRow(E_DELIVER, eObject.eDeliver(), boolean.class.getName(), CATEGORY, foreground); + } + + private static Row createRow(EObject eObject, EStructuralFeature feature) + { + Object value = eObject.eGet(feature); + return new Row(feature.getName(), value, getDeclaredType(feature), getConcreteType(value)); + } + + protected static Row createRow(String name, Object value, String declaredType, int category, Color foreground) + { + return new Row(name, value, declaredType, getConcreteType(value), category, foreground, null); + } + + private static String getDeclaredType(EStructuralFeature feature) + { + String result = feature.getEType().getName(); + + int lowerBound = feature.getLowerBound(); + int upperBound = feature.getUpperBound(); + if (lowerBound != 0 || upperBound != 1) + { + result += "[" + lowerBound + ".."; + + if (upperBound == -1) + { + result += "*"; + } + else + { + result += upperBound; + } + + result += "]"; + } + + return result; } private static String getConcreteType(Object value) @@ -93,6 +212,6 @@ public class EMFIntrospectionProvider extends RowIntrospectionProvider return eObject.eClass().getName(); } - return value == null ? "" : value.getClass().getName(); //$NON-NLS-1$ + return getClassName(value); } } diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFValueFormatter.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFValueFormatter.java new file mode 100644 index 0000000000..e2b51a32c5 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFValueFormatter.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 Eike Stepper (Loehne, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.cdo.internal.ui; + +import org.eclipse.net4j.util.ui.views.ValueFormatter; + +import org.eclipse.emf.ecore.ENamedElement; + +/** + * @author Eike Stepper + */ +public class EMFValueFormatter extends ValueFormatter +{ + public EMFValueFormatter() + { + super(ENamedElement.class.getName(), "ENamedElement"); + } + + @Override + public boolean canHandle(Object value) + { + return value instanceof ENamedElement; + } + + @Override + public String formatValue(Object value) throws Exception + { + return ((ENamedElement)value).getName(); + } +} |