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 d5bb15e158c9523761fa6a08c2ad1624e3805219..7b9251ae8a36782ce8268edb473a5bd1c98a6501 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