Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2022-07-09 06:33:41 +0000
committerEike Stepper2022-07-09 06:33:41 +0000
commit51a89a70e922b659bd0c1bfc68765bfb97f20803 (patch)
tree8d1bb9ae1c8b6d6b4e07221010bd40ad68d4d468
parent585e96c92f1e4742b2ccbf19d26be3b3cc04f02e (diff)
downloadcdo-51a89a70e922b659bd0c1bfc68765bfb97f20803.tar.gz
cdo-51a89a70e922b659bd0c1bfc68765bfb97f20803.tar.xz
cdo-51a89a70e922b659bd0c1bfc68765bfb97f20803.zip
[580343] Support customizable structure providers for Net4j Introspector view
https://bugs.eclipse.org/bugs/show_bug.cgi?id=580343
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOIntrospectionProvider.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/EMFIntrospectionProvider.java94
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/IterableIntrospectionProvider.java30
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/MapIntrospectionProvider.java22
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/Net4jIntrospectorView.java117
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/IntrospectionProvider.java20
6 files changed, 161 insertions, 137 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 9ef890d0f6..4b6b6f5411 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
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOState;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
+import org.eclipse.emf.cdo.common.model.CDOClassInfo;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.security.CDOPermission;
import org.eclipse.emf.cdo.util.CDOUtil;
@@ -44,6 +45,8 @@ public class CDOIntrospectionProvider extends EMFIntrospectionProvider
private static final String CDO_REVISION = "cdoRevision";
+ private static final String CDO_CLASS_INFO = "cdoClassInfo";
+
private static final String CDO_STATE = "cdoState";
private static final String CDO_VIEW = "cdoView";
@@ -79,6 +82,7 @@ public class CDOIntrospectionProvider extends EMFIntrospectionProvider
rows.add(createCDOLockStateRow(cdoObject));
rows.add(createCDOPermissionRow(cdoObject));
rows.add(createCDORevisionRow(cdoObject));
+ rows.add(createCDOClassInfoRow(cdoObject));
rows.add(createCDOStateRow(cdoObject));
rows.add(createCDOViewRow(cdoObject));
}
@@ -113,6 +117,11 @@ public class CDOIntrospectionProvider extends EMFIntrospectionProvider
return createCDORevisionRow(cdoObject);
}
+ if (CDO_CLASS_INFO.equals(name))
+ {
+ return createCDOClassInfoRow(cdoObject);
+ }
+
if (CDO_STATE.equals(name))
{
return createCDOStateRow(cdoObject);
@@ -143,6 +152,12 @@ public class CDOIntrospectionProvider extends EMFIntrospectionProvider
return createRow(CDO_REVISION, cdoObject.cdoRevision(), CDORevision.class.getName(), CATEGORY, foreground);
}
+ private Row createCDOClassInfoRow(CDOObject cdoObject)
+ {
+ CDORevision revision = cdoObject.cdoRevision();
+ return createRow(CDO_CLASS_INFO, revision == null ? null : revision.getClassInfo(), CDOClassInfo.class.getName(), CATEGORY, foreground);
+ }
+
private Row createCDOPermissionRow(CDOObject cdoObject)
{
return createRow(CDO_PERMISSION, cdoObject.cdoPermission(), CDOPermission.class.getName(), CATEGORY, foreground);
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 40f99a69ab..5b03428135 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
@@ -75,72 +75,66 @@ public class EMFIntrospectionProvider extends RowIntrospectionProvider
@Override
protected void fillRows(Object parent, List<Row> rows) throws Exception
{
- if (parent instanceof EObject)
- {
- EObject eObject = (EObject)parent;
+ EObject eObject = (EObject)parent;
- rows.add(createEContainerRow(eObject));
- rows.add(createEURIRow(eObject));
- rows.add(createEResourceRow(eObject));
- rows.add(createEClassRow(eObject));
- rows.add(createEIsProxyRow(eObject));
- rows.add(createEDeliverRow(eObject));
- rows.add(createEAdaptersRow(eObject));
+ rows.add(createEContainerRow(eObject));
+ rows.add(createEURIRow(eObject));
+ rows.add(createEResourceRow(eObject));
+ rows.add(createEClassRow(eObject));
+ rows.add(createEIsProxyRow(eObject));
+ rows.add(createEDeliverRow(eObject));
+ rows.add(createEAdaptersRow(eObject));
- for (EStructuralFeature feature : eObject.eClass().getEAllStructuralFeatures())
- {
- rows.add(createRow(eObject, feature));
- }
+ for (EStructuralFeature feature : eObject.eClass().getEAllStructuralFeatures())
+ {
+ rows.add(createRow(eObject, feature));
}
}
@Override
public Row getElementByName(Object parent, String name) throws Exception
{
- if (parent instanceof EObject)
- {
- EObject eObject = (EObject)parent;
+ EObject eObject = (EObject)parent;
- if (E_CONTAINER.equals(name))
- {
- return createEContainerRow(eObject);
- }
+ if (E_CONTAINER.equals(name))
+ {
+ return createEContainerRow(eObject);
+ }
- if (E_CLASS.equals(name))
- {
- return createEClassRow(eObject);
- }
+ if (E_CLASS.equals(name))
+ {
+ return createEClassRow(eObject);
+ }
- if (E_IS_PROXY.equals(name))
- {
- return createEIsProxyRow(eObject);
- }
+ if (E_IS_PROXY.equals(name))
+ {
+ return createEIsProxyRow(eObject);
+ }
- if (E_DELIVER.equals(name))
- {
- return createEDeliverRow(eObject);
- }
+ if (E_DELIVER.equals(name))
+ {
+ return createEDeliverRow(eObject);
+ }
- if (E_ADAPTERS.equals(name))
- {
- return createEAdaptersRow(eObject);
- }
+ if (E_ADAPTERS.equals(name))
+ {
+ return createEAdaptersRow(eObject);
+ }
- if (E_RESOURCE.equals(name))
- {
- return createEResourceRow(eObject);
- }
+ if (E_RESOURCE.equals(name))
+ {
+ return createEResourceRow(eObject);
+ }
- if (E_URI.equals(name))
- {
- return createEURIRow(eObject);
- }
+ if (E_URI.equals(name))
+ {
+ return createEURIRow(eObject);
+ }
- EStructuralFeature feature = eObject.eClass().getEStructuralFeature(name);
- if (feature != null)
- {
- return createRow(eObject, feature);
- }
+ EStructuralFeature feature = eObject.eClass().getEStructuralFeature(name);
+ if (feature != null)
+ {
+ return createRow(eObject, feature);
}
return null;
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/IterableIntrospectionProvider.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/IterableIntrospectionProvider.java
index 0b2ee25d57..7f4dd352a4 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/IterableIntrospectionProvider.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/IterableIntrospectionProvider.java
@@ -46,22 +46,17 @@ public final class IterableIntrospectionProvider extends IntrospectionProvider
@Override
public Object[] getElements(Object parent) throws Exception
{
- if (parent instanceof Iterable<?>)
- {
- Iterable<?> iterable = (Iterable<?>)parent;
-
- List<NameAndValue> result = new ArrayList<>();
- int index = 0;
+ Iterable<?> iterable = (Iterable<?>)parent;
- for (Object object : iterable)
- {
- result.add(new NameAndValue(index++, object));
- }
+ List<NameAndValue> result = new ArrayList<>();
+ int index = 0;
- return result.toArray();
+ for (Object object : iterable)
+ {
+ result.add(new NameAndValue(index++, object));
}
- return null;
+ return result.toArray();
}
@Override
@@ -70,8 +65,17 @@ public final class IterableIntrospectionProvider extends IntrospectionProvider
Iterable<?> iterable = (Iterable<?>)parent;
Iterator<?> iterator = iterable.iterator();
- int index = Integer.parseInt(name);
Object value = null;
+ int index;
+
+ try
+ {
+ index = Integer.parseInt(name);
+ }
+ catch (NumberFormatException ex)
+ {
+ return null;
+ }
for (int i = 0; i < index; i++)
{
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/MapIntrospectionProvider.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/MapIntrospectionProvider.java
index 583ada0a7f..6b4556e759 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/MapIntrospectionProvider.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/MapIntrospectionProvider.java
@@ -45,29 +45,23 @@ public final class MapIntrospectionProvider extends IntrospectionProvider
@Override
public Object[] getElements(Object parent) throws Exception
{
- if (parent instanceof Map<?, ?>)
- {
- Map<?, ?> map = (Map<?, ?>)parent;
-
- NameAndValue[] result = new NameAndValue[map.size()];
- int index = 0;
+ Map<?, ?> map = (Map<?, ?>)parent;
- for (Map.Entry<?, ?> entry : map.entrySet())
- {
- result[index++] = new NameAndValue("" + entry.getKey(), entry.getValue());
- }
+ NameAndValue[] result = new NameAndValue[map.size()];
+ int index = 0;
- return result;
+ for (Map.Entry<?, ?> entry : map.entrySet())
+ {
+ result[index++] = new NameAndValue("" + entry.getKey(), entry.getValue());
}
- return null;
+ return result;
}
@Override
public Object getElementByName(Object parent, String name) throws Exception
{
- Map<?, ?> map = (Map<?, ?>)parent;
- Object value = map.get(name);
+ Object value = ((Map<?, ?>)parent).get(name);
if (value != null)
{
return new NameAndValue(name, value);
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/Net4jIntrospectorView.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/Net4jIntrospectorView.java
index aadbb19d35..c765d1fc83 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/Net4jIntrospectorView.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/internal/ui/views/Net4jIntrospectorView.java
@@ -60,6 +60,7 @@ import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
+import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
@@ -207,12 +208,12 @@ public class Net4jIntrospectorView extends ViewPart
private IAction forwardAction = new ForwardAction();
- private IAction linkSelectionAction = new LinkSelectionAction();
-
private IAction logicalStructureAction = new LogicalStructureAction();
private IAction activePartAction = new ActivePartAction();
+ private IAction linkSelectionAction = new LinkSelectionAction();
+
private IAction containerAction = new ContainerAction();
private IAction refreshAction = new RefreshAction();
@@ -302,10 +303,10 @@ public class Net4jIntrospectorView extends ViewPart
}
classLabel.getParent().layout();
- updateEnablements();
-
currentValue = value;
- updateProvider(value);
+
+ updateEnablements();
+ updateProvider();
}
@Override
@@ -467,6 +468,10 @@ public class Net4jIntrospectorView extends ViewPart
Display display = viewer.getControl().getDisplay();
UIUtil.asyncExec(display, () -> viewer.setSelection(new StructuredSelection(element), true));
}
+ else
+ {
+ currentName = null;
+ }
}
catch (Exception ex)
{
@@ -486,28 +491,34 @@ public class Net4jIntrospectorView extends ViewPart
private void setCurrentProvider(IntrospectionProvider provider)
{
- currentProvider = provider;
- stackLayout.topControl = getCurrentViewer().getControl();
- stacked.layout();
- setFocus();
+ if (currentProvider != provider)
+ {
+ currentProvider = provider;
+ stackLayout.topControl = getCurrentViewer().getControl();
+ stacked.layout();
+ setFocus();
+ }
}
- private void updateProvider(Object object)
+ private void updateProvider()
{
- if (object != null)
+ IntrospectionProvider result = OBJECT_INTROSPECTION_PROVIDER;
+
+ if (currentValue != null)
{
List<IntrospectionProvider> providersToUse = logicalStructureAction.isChecked() ? providers : DEFAULT_INTROSPECTION_PROVIDERS;
for (IntrospectionProvider provider : providersToUse)
{
- if (provider.canHandle(object))
+ if (provider.canHandle(currentValue))
{
- setCurrentProvider(provider);
+ result = provider;
break;
}
}
}
+ setCurrentProvider(result);
refreshViewer();
}
@@ -600,28 +611,6 @@ public class Net4jIntrospectorView extends ViewPart
/**
* @author Eike Stepper
*/
- private final class LinkSelectionAction extends ToggleAction
- {
- public LinkSelectionAction()
- {
- super(Messages.getString("Net4jIntrospectorView_31"), //$NON-NLS-1$
- SharedIcons.getDescriptor(SharedIcons.ETOOL_LINK_WITH_EDITOR), //
- OM.PREF_LINK_SELECTION);
- }
-
- @Override
- protected void run(boolean checked)
- {
- if (checked)
- {
- setValue(lastPageSelection);
- }
- }
- }
-
- /**
- * @author Eike Stepper
- */
private final class LogicalStructureAction extends ToggleAction
{
public LogicalStructureAction()
@@ -634,7 +623,7 @@ public class Net4jIntrospectorView extends ViewPart
@Override
protected void run(boolean checked)
{
- updateProvider(getValue());
+ updateProvider();
}
}
@@ -670,6 +659,28 @@ public class Net4jIntrospectorView extends ViewPart
/**
* @author Eike Stepper
*/
+ private final class LinkSelectionAction extends ToggleAction
+ {
+ public LinkSelectionAction()
+ {
+ super(Messages.getString("Net4jIntrospectorView_31"), //$NON-NLS-1$
+ SharedIcons.getDescriptor(SharedIcons.ETOOL_LINK_WITH_EDITOR), //
+ OM.PREF_LINK_SELECTION);
+ }
+
+ @Override
+ protected void run(boolean checked)
+ {
+ if (checked)
+ {
+ setValue(lastPageSelection);
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
private final class ContainerAction extends Action
{
public ContainerAction()
@@ -926,28 +937,34 @@ public class Net4jIntrospectorView extends ViewPart
@Override
public Object[] getElements(Object parent) throws Exception
{
- if (parent instanceof Object[])
- {
- Object[] array = (Object[])parent;
- NameAndValue[] result = new NameAndValue[array.length];
+ int length = Array.getLength(parent);
+ NameAndValue[] result = new NameAndValue[length];
- for (int index = 0; index < array.length; index++)
- {
- result[index] = new NameAndValue(index, array[index]);
- }
-
- return result;
+ for (int index = 0; index < length; index++)
+ {
+ Object value = Array.get(parent, index);
+ result[index] = new NameAndValue(index, value);
}
- return null;
+ return result;
}
@Override
public Object getElementByName(Object parent, String name) throws Exception
{
- Object[] array = (Object[])parent;
- int index = Integer.parseInt(name);
- return new NameAndValue(index, array[index]);
+ int index;
+
+ try
+ {
+ index = Integer.parseInt(name);
+ }
+ catch (NumberFormatException ex)
+ {
+ return null;
+ }
+
+ Object element = Array.get(parent, index);
+ return new NameAndValue(index, element);
}
@Override
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/IntrospectionProvider.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/IntrospectionProvider.java
index 31e67e6c75..57d4f1d96e 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/IntrospectionProvider.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/IntrospectionProvider.java
@@ -171,45 +171,45 @@ public abstract class IntrospectionProvider implements Comparable<IntrospectionP
if (value != null)
{
- Class<? extends Object> type = value.getClass();
- if (type.isArray())
+ Class<? extends Object> valueClass = value.getClass();
+ if (valueClass.isArray())
{
- if (type == byte[].class)
+ if (valueClass == byte[].class)
{
return Arrays.toString((byte[])value);
}
- if (type == short[].class)
+ if (valueClass == short[].class)
{
return Arrays.toString((short[])value);
}
- if (type == int[].class)
+ if (valueClass == int[].class)
{
return Arrays.toString((int[])value);
}
- if (type == long[].class)
+ if (valueClass == long[].class)
{
return Arrays.toString((long[])value);
}
- if (type == char[].class)
+ if (valueClass == char[].class)
{
return Arrays.toString((char[])value);
}
- if (type == float[].class)
+ if (valueClass == float[].class)
{
return Arrays.toString((float[])value);
}
- if (type == double[].class)
+ if (valueClass == double[].class)
{
return Arrays.toString((double[])value);
}
- if (type == boolean[].class)
+ if (valueClass == boolean[].class)
{
return Arrays.toString((boolean[])value);
}

Back to the top