Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2022-07-07 15:51:03 +0000
committerEike Stepper2022-07-07 15:51:03 +0000
commit3027d6d6efc1939a65e0f9fa3bdae7bad6debf74 (patch)
tree1faeced4ae409fd490dfe1bec434ada070bfa733 /plugins/org.eclipse.emf.cdo.ui/src/org
parent7d9be8b4b1bac0ba2d2737693ed847e7ce7dcae9 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOIntrospectionProvider.java98
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFIntrospectionProvider.java141
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFValueFormatter.java38
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();
+ }
+}

Back to the top