class Binder {

    public Map<String, Component> getAlreadyAssignedFields(Object controller) {
        if (controller == null) {
            return Collections.emptyMap();
        }

        Map<String, Component> assignedFields = new HashMap<String, Component>();
        for (Field field : ReflectionUtils.getAllDeclaredFieldsAnnotatedWith(
                controller.getClass(), UiField.class)) {
            try {
                field.setAccessible(true);
                Object value = field.get(controller);
                if (value instanceof Component) {
                    // We are intentionally not using the idPrefix here
                    // The specific use in the inflater doesn't need the
                    // prefix
                    assignedFields.put(extractComponentId(field),
                            (Component) value);
                }
            } catch (IllegalAccessException e) {
                getLogger().log(Level.WARNING,
                        "Exception while accessing controller object fields.",
                        e);
            }
        }
        return assignedFields;
    }

    public  Binder();
    public  Binder(String idPrefix);

}