From e2c7385df8d5f34ad5fd5f56c6cdadcb66a4a757 Mon Sep 17 00:00:00 2001 From: Nicolas Dumoulin <nicolas.dumoulin@irstea.fr> Date: Thu, 5 May 2011 09:33:27 +0000 Subject: [PATCH] abstract type or interface are not proposed at field instanciation --- .../swing/basiccontrols/CommonDefaultObjectEditor.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ui-swing-basiccontrols/src/main/java/fr/cemagref/ohoui/ui/swing/basiccontrols/CommonDefaultObjectEditor.java b/ui-swing-basiccontrols/src/main/java/fr/cemagref/ohoui/ui/swing/basiccontrols/CommonDefaultObjectEditor.java index d5bb15e..7b9251a 100644 --- a/ui-swing-basiccontrols/src/main/java/fr/cemagref/ohoui/ui/swing/basiccontrols/CommonDefaultObjectEditor.java +++ b/ui-swing-basiccontrols/src/main/java/fr/cemagref/ohoui/ui/swing/basiccontrols/CommonDefaultObjectEditor.java @@ -22,7 +22,9 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -64,8 +66,15 @@ public class CommonDefaultObjectEditor extends AbstractOhEditor<Object, JCompone LOGGER.log(Level.FINER, "Building editor for child {0}", object.getName()); // Editors retrieving for other types List<Class> availableTypes = new ArrayList<Class>(); + if (child.getDeclaredType().isInterface()) availableTypes.add(child.getDeclaredType()); availableTypes.addAll(Lookup.getDefault().lookupResult(child.getDeclaredType()).allClasses()); + for (Iterator<Class> it = availableTypes.iterator();it.hasNext();) { + Class type = it.next(); + if (type.isInterface() || Modifier.isAbstract(type.getModifiers())) { + it.remove(); + } + } // TODO filter added types to retain only instanciable types if (child.getValue() == null) { // object has null value, so building specific panel for instanciating it -- GitLab