Example usage for org.apache.wicket.markup.html.panel Fragment getString

List of usage examples for org.apache.wicket.markup.html.panel Fragment getString

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.panel Fragment getString.

Prototype

public final String getString(final String key) 

Source Link

Usage

From source file:gr.abiss.calipso.domain.ColumnHeading.java

License:Open Source License

/**
 * this routine is a massive if-then construct that acts as a factory for
 * the right implementation of the responsibilities defined in the
 * "Processor" class (above) based on the type of ColumnHeading - the right
 * implementation will be returned. having everything in one place below,
 * makes it easy to maintain, as the logic of each of the methods are
 * closely interdependent for a given column type for e.g. the kind of
 * hibernate criteria needed depends on what is made available on the UI
 *///  w  ww .  ja v a 2  s  . c  o m
private Processor getProcessor() {
    if (isField()) {
        switch (field.getName().getType()) {
        // ==============================================================

        case 1:
        case 2:
        case 3:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(IN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    final Fragment fragment = new Fragment("fragParent", "multiSelect", container);
                    //final Map<String, String> options = field.getOptions();
                    List<CustomAttributeLookupValue> lookupValues = calipsoService.findLookupValues(space,
                            field.getName().getText());
                    // TODO: create a leaf-node only finder method in calipso service
                    List<CustomAttributeLookupValue> leafLookupValues = new LinkedList<CustomAttributeLookupValue>();

                    // leaf selection only for now
                    for (CustomAttributeLookupValue val : lookupValues) {
                        if (CollectionUtils.isEmpty(val.getChildren())) {
                            leafLookupValues.add(val);
                        }
                    }
                    lookupValues = null;

                    final CheckBoxMultipleChoice choice = new CheckBoxMultipleChoice("values", leafLookupValues,
                            new IChoiceRenderer<CustomAttributeLookupValue>() {

                                @Override
                                public Object getDisplayValue(CustomAttributeLookupValue object) {
                                    return fragment.getString(object.getNameTranslationResourceKey());
                                }

                                @Override
                                public String getIdValue(CustomAttributeLookupValue object, int index) {
                                    return object.getId() + "";
                                }
                            });
                    fragment.add(choice);
                    choice.setModel(new PropertyModel(filterCriteria, "values"));
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValueList()) {
                        List values = filterCriteria.getValues();
                        List<Integer> keys = new ArrayList<Integer>(values.size());
                        for (Object o : values) {
                            if (o instanceof CustomAttributeLookupValue) {
                                CustomAttributeLookupValue val = (CustomAttributeLookupValue) o;
                                keys.add(NumberUtils.createInteger(val.getId() + ""));
                            } else {
                                keys.add(NumberUtils.createInteger(o + ""));
                            }
                        }
                        criteria.add(Restrictions.in(getNameText(), keys));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValueList();
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueListFromQueryString(s);
                }
            };
        // ==============================================================
        case 4: // decimal number
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(EQ, NOT_EQ, GT, LT, BETWEEN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "textField", container);
                    TextField textField = new TextField("value", Double.class);
                    textField.setModel(new PropertyModel(filterCriteria, "value"));
                    fragment.add(textField);
                    if (filterCriteria.getExpression() == BETWEEN) {
                        TextField textField2 = new TextField("value2", Double.class);
                        textField2.setModel(new PropertyModel(filterCriteria, "value2"));
                        fragment.add(textField2);
                    } else {
                        fragment.add(new WebMarkupContainer("value2").setVisible(false));
                    }
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        Object value = filterCriteria.getValue();
                        switch (filterCriteria.getExpression()) {
                        case EQ:
                            criteria.add(Restrictions.eq(getNameText(), value));
                            break;
                        case NOT_EQ:
                            criteria.add(Restrictions.not(Restrictions.eq(name.text, value)));
                            break;
                        case GT:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            break;
                        case LT:
                            criteria.add(Restrictions.lt(getNameText(), value));
                            break;
                        case BETWEEN:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
                            break;
                        default:
                        }
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(Double.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, Double.class);
                }

            };
        // ==============================================================
        case 6: // date
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(EQ, NOT_EQ, GT, LT, BETWEEN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "dateField", container);
                    DateField calendar = new DateField("value",
                            new PropertyModel(filterCriteria, "value")/*,
                                                                      false*/);
                    fragment.add(calendar);
                    if (filterCriteria.getExpression() == BETWEEN) {
                        DateField calendar2 = new DateField("value2",
                                new PropertyModel(filterCriteria, "value2")/*,
                                                                           false*/);
                        fragment.add(calendar2);
                    } else {
                        fragment.add(new WebMarkupContainer("value2").setVisible(false));
                    }
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        Object value = filterCriteria.getValue();
                        switch (filterCriteria.getExpression()) {
                        case EQ:
                            criteria.add(Restrictions.eq(getNameText(), value));
                            break;
                        case NOT_EQ:
                            criteria.add(Restrictions.not(Restrictions.eq(getNameText(), value)));
                            break;
                        case GT:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            break;
                        case LT:
                            criteria.add(Restrictions.lt(getNameText(), value));
                            break;
                        case BETWEEN:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
                            break;
                        default:
                        }
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(Date.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, Date.class);
                }
            };
        // ==============================================================
        case 5: // free text
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        // TODO:
        case 10:// organization
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        // TODO:
        case 11:// file
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        case 200:// attachment
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        case 20:// is user
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };

        case 25:// is user
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        case 100: // Assignable spaces (move to space)
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(IN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "multiSelect", container);
                    final Map<String, String> options = field.getOptions();
                    List<String> keys = null;
                    if (options != null) {
                        keys = new ArrayList(options.keySet()); // bound
                        // value
                    } else {
                        keys = new ArrayList();
                    }

                    List<Space> spaces = new LinkedList<Space>();
                    for (String key : keys) {
                        // spaces.add(ComponentUtils.getJtrac(c).loadSpace(Long.parseLong(key)));
                        spaces.add(calipsoService.loadSpace(Long.parseLong(key)));
                    } // for
                    CheckBoxMultipleChoice choice = new CheckBoxMultipleChoice("values", spaces,
                            new IChoiceRenderer<Space>() {
                                private static final long serialVersionUID = 1L;

                                @Override
                                public Object getDisplayValue(Space o) {
                                    logger.info("Option for space: " + o);
                                    String name = o.getName();
                                    return name != null ? name : o.getId();
                                }

                                @Override
                                public String getIdValue(Space o, int index) {
                                    return o.getId() + "";
                                }
                            });

                    fragment.add(choice);
                    choice.setModel(new PropertyModel(filterCriteria, "values"));
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValueList()) {
                        List values = filterCriteria.getValues();
                        criteria.add(Restrictions.in(getNameText(), values));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValueList();
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueListFromQueryString(s);
                }
            };
        // ==============================================================
        default:
            throw new RuntimeException("Unknown Column Heading " + name);
        }
    } else { // this is not a custom field but one of the "built-in" columns
        switch (name) {
        // ==============================================================
        case ID:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(EQ);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        // should never come here for criteria: see
                        // ItemSearch#getRefId()
                        throw new RuntimeException("should not come here for 'id'");
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        // ==============================================================
        case SUMMARY:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        criteria.add(Restrictions.ilike(getNameText(), (String) filterCriteria.getValue(),
                                MatchMode.ANYWHERE));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };
        // ==============================================================
        case DETAIL:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(CONTAINS);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    return getTextFieldFragment(container);
                }

                void addRestrictions(DetachedCriteria criteria) {
                    // do nothing, 'detail' already processed, see:
                    // ItemSearch#getSearchText()
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(String.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, String.class);
                }
            };

        // ==============================================================
        case STATUS:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(IN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "multiSelect", container);
                    // status selectable only when context space is not null
                    // final Map<Integer, String> options =
                    // space.getMetadata().getStatesMap();
                    final Map<Integer, String> options;
                    if (space == null) {
                        options = State.getSpecialStates();
                    } else {
                        options = space.getMetadata().getStatesMap();
                    }
                    options.remove(State.NEW);
                    CheckBoxMultipleChoice choice = new CheckBoxMultipleChoice("values",
                            new ArrayList(options.keySet()), new IChoiceRenderer() {
                                public Object getDisplayValue(Object o) {
                                    return options.get(o);
                                }

                                public String getIdValue(Object o, int i) {
                                    return o.toString();
                                }
                            });
                    fragment.add(choice);
                    choice.setModel(new PropertyModel(filterCriteria, "values"));
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValueList()) {
                        criteria.add(Restrictions.in(getNameText(), filterCriteria.getValues()));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValueList();
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    //logger.info("loadFromQueryString: "+s);
                    setStatusListFromQueryString(s);
                }
            };
        // ==============================================================
        case ASSIGNED_TO:
        case LOGGED_BY:
        case REPORTED_BY:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(IN, IS_NULL);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "multiSelect", container);
                    List<User> users = null;
                    if (space == null) {
                        users = calipsoService.findUsersForUser(user);
                    } else {
                        users = calipsoService.findUsersForSpace(space.getId());
                    }
                    CheckBoxMultipleChoice choice = new CheckBoxMultipleChoice("values", users,
                            new IChoiceRenderer() {
                                public Object getDisplayValue(Object o) {
                                    return ((User) o).getFullName();
                                }

                                public String getIdValue(Object o, int i) {
                                    return ((User) o).getId() + "";
                                }
                            });
                    fragment.add(choice);
                    choice.setModel(new PropertyModel(filterCriteria, "values"));
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValueList()) {
                        criteria.add(Restrictions.in(getNameText(), filterCriteria.getValues()));
                    } else if (filterIsNullExpression()) {
                        criteria.add(Restrictions.isNull(getNameText()));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromUserList();
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setUserListFromQueryString(s, calipsoService);
                }
            };
        // ==============================================================

        case ASSET_TYPE:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(IN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "multiSelect", container);

                    List<AssetType> assetTypes = calipsoService.findAllAssetTypes();
                    CheckBoxMultipleChoice choice = new CheckBoxMultipleChoice("values", assetTypes,
                            new IChoiceRenderer() {
                                public Object getDisplayValue(Object o) {
                                    return ((AssetType) o).getName();
                                }

                                public String getIdValue(Object o, int i) {
                                    return String.valueOf(((AssetType) o).getId());
                                }
                            });
                    fragment.add(choice);
                    choice.setModel(new PropertyModel(filterCriteria, "values"));

                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValueList()) {
                        criteria.createAlias("assets", "assets");
                        criteria.add(Restrictions.in("assets.assetType", filterCriteria.getValues()));
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromAssetTypeList();
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setAssetTypeListFromQueryString(s, user, calipsoService);
                }
            };
        // ==============================================================
        case TIME_STAMP:
        case DUE_TO:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(BETWEEN, GT, LT, EQ, NOT_EQ);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "dateField", container);
                    DateField calendar = new DateField("value",
                            new PropertyModel(filterCriteria, "value")/*,
                                                                      false*/);
                    fragment.add(calendar);
                    if (filterCriteria.getExpression() == BETWEEN) {
                        DateField calendar2 = new DateField("value2",
                                new PropertyModel(filterCriteria, "value2")/*,
                                                                           false*/);
                        fragment.add(calendar2);
                    } else {
                        fragment.add(new WebMarkupContainer("value2").setVisible(false));
                    }
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        Object value = filterCriteria.getValue();
                        switch (filterCriteria.getExpression()) {
                        case EQ:
                            criteria.add(Restrictions.eq(getNameText(), value));
                            break;
                        case NOT_EQ:
                            criteria.add(Restrictions.not(Restrictions.eq(getNameText(), value)));
                            break;
                        case GT:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            break;
                        case LT:
                            criteria.add(Restrictions.lt(getNameText(), value));
                            break;
                        case BETWEEN:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
                            break;
                        default:
                        }
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(Date.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, Date.class);
                }
            };
        // ==============================================================
        case SPACE:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(IN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "multiSelect", container);
                    List<Space> spaces = new ArrayList(user.getSpaces());
                    CheckBoxMultipleChoice choice = new CheckBoxMultipleChoice("values", spaces,
                            new IChoiceRenderer() {
                                public Object getDisplayValue(Object o) {
                                    return ((Space) o).getName();
                                }

                                public String getIdValue(Object o, int i) {
                                    return ((Space) o).getId() + "";
                                }
                            });
                    fragment.add(choice);
                    choice.setModel(new PropertyModel(filterCriteria, "values"));
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    // already handled space as special case, see
                    // ItemSearch#getSelectedSpaces()
                }

                String getAsQueryString() {
                    return getQueryStringFromSpaceList();
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setSpaceListFromQueryString(s, user, calipsoService);
                }
            };

        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        case TOTAL_RESPONSE_TIME:
        case TIME_FROM_CREATION_TO_FIRST_REPLY:
        case TIME_FROM_CREATION_TO_CLOSE:
            return new ProcessorCustom() {
                private Class validationClass = null;

                List<Expression> getValidFilterExpressions() {
                    return getAsList(BETWEEN, GT, LT);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "effortField", container);
                    WebMarkupContainer days = new WebMarkupContainer("days");

                    if (name.equals(TOTAL_RESPONSE_TIME)) {
                        validationClass = Double.class;
                    } else {
                        validationClass = Long.class;
                    }

                    TextField textField = new TextField("value", validationClass);
                    days.add(textField);
                    // textField.setModel(new PropertyModel(this,
                    // "filterCriteria.value"));
                    textField.setModel(new PropertyModel(filterCriteria, "value"));
                    fragment.add(days);

                    WebMarkupContainer days2 = new WebMarkupContainer("days2");
                    if (filterCriteria.getExpression() == BETWEEN) {
                        TextField textField2 = new TextField("value2", validationClass);
                        days2.add(textField2);
                        // textField2.setModel(new PropertyModel(this,
                        // "filterCriteria.value2"));
                        textField2.setModel(new PropertyModel(filterCriteria, "value2"));
                    } // if
                    else {
                        fragment.add(new WebMarkupContainer("value2").setVisible(false));
                        days2.setVisible(false);
                    } // else
                    fragment.add(days2);
                    // fragment.setVisible(isVisible());
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                }

                void addRestrictions(CustomCriteria customCriteria) {
                    if (filterHasValue()) {
                        String criteriaObjectClass = null;
                        if (validationClass != null) {
                            criteriaObjectClass = validationClass.getCanonicalName();
                        } // if

                        Object value = filterCriteria.getValue();
                        Object value2 = filterCriteria.getValue2();

                        Double v1 = new Double(value.toString());
                        value = v1 * 86400;// In Seconds
                        switch (filterCriteria.getExpression()) {
                        case GT:
                            customCriteria.add(name.getText(), CustomCriteria.GT, value.toString(),
                                    criteriaObjectClass);
                            break;
                        case LT:
                            customCriteria.add(name.getText(), CustomCriteria.LT, value.toString(),
                                    criteriaObjectClass);
                            break;
                        case BETWEEN:
                            Double v2 = new Double(value2.toString());
                            value2 = v2 * 86400; // In Seconds
                            customCriteria.add(name.getText(), CustomCriteria.GET, value.toString(),
                                    criteriaObjectClass);
                            customCriteria.add(name.getText(), CustomCriteria.LET, value2.toString(),
                                    criteriaObjectClass);
                            break;
                        default:
                        }
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(Long.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, Long.class);
                }
            };

        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        case PLANNED_EFFORT:
            return new Processor() {
                List<Expression> getValidFilterExpressions() {
                    return getAsList(EQ, NOT_EQ, GT, LT, BETWEEN);
                }

                Fragment getFilterUiFragment(MarkupContainer container, User user, Space space,
                        CalipsoService calipsoService) {
                    Fragment fragment = new Fragment("fragParent", "effortField2", container);
                    EffortField effortField = new EffortField("value",
                            new PropertyModel(filterCriteria, "value"), false);
                    fragment.add(effortField);
                    if (filterCriteria.getExpression() == BETWEEN) {
                        EffortField effortField2 = new EffortField("value2",
                                new PropertyModel(filterCriteria, "value2"), false);
                        fragment.add(new WebMarkupContainer("and"));
                        fragment.add(effortField2);
                    } else {
                        fragment.add(new WebMarkupContainer("and").setVisible(false));
                        fragment.add(new WebMarkupContainer("value2").setVisible(false));
                    }
                    return fragment;
                }

                void addRestrictions(DetachedCriteria criteria) {
                    if (filterHasValue()) {
                        Object value = filterCriteria.getValue();
                        switch (filterCriteria.getExpression()) {
                        case EQ:
                            criteria.add(Restrictions.eq(getNameText(), value));
                            break;
                        case NOT_EQ:
                            criteria.add(Restrictions.not(Restrictions.eq(getNameText(), value)));
                            break;
                        case GT:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            break;
                        case LT:
                            criteria.add(Restrictions.lt(getNameText(), value));
                            break;
                        case BETWEEN:
                            criteria.add(Restrictions.gt(getNameText(), value));
                            criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
                            break;
                        default:
                        }
                    }
                }

                String getAsQueryString() {
                    return getQueryStringFromValue(Integer.class);
                }

                void loadFromQueryString(String s, User user, CalipsoService calipsoService) {
                    setValueFromQueryString(s, Integer.class);
                }
            };

        // ==============================================================
        default:
            throw new RuntimeException("Unknown Column Heading " + name);
        }
    }
}

From source file:gr.abiss.calipso.wicket.CustomFieldsFormPanel.java

License:Open Source License

@SuppressWarnings("serial")
private void addComponents(final CompoundPropertyModel model, final Metadata metadata, final List<Field> fields,
        final Map<String, FileUploadField> fileUploadFields) {
    //final AbstractItem item = (AbstractItem) model.getObject();
    List<FieldGroup> fieldGroupsList = metadata.getFieldGroups();
    @SuppressWarnings("unchecked")
    ListView fieldGroups = new ListView("fieldGroups", fieldGroupsList) {

        @Override//from   w  w w  .  java  2s. com
        protected void populateItem(ListItem listItem) {
            FieldGroup fieldGroup = (FieldGroup) listItem.getModelObject();
            listItem.add(new Label("fieldGroupLabel", fieldGroup.getName()));
            List<Field> groupFields = fieldGroup.getFields();
            List<Field> editableGroupFields = new LinkedList<Field>();

            if (CollectionUtils.isNotEmpty(groupFields)) {
                for (Field field : groupFields) {
                    // is editable?
                    if (fields.contains(field)) {
                        editableGroupFields.add(field);
                    }
                }
            }
            ListView listView = new ListView("fields", editableGroupFields) {

                @Override
                @SuppressWarnings("deprecation")
                protected void populateItem(ListItem listItem) {
                    boolean preloadExistingValue = true;
                    final Field field = (Field) listItem.getModelObject();
                    // preload custom attribute
                    if (field.getCustomAttribute() == null) {
                        field.setCustomAttribute(getCalipso().loadItemCustomAttribute(getCurrentSpace(),
                                field.getName().getText()));
                    }
                    // preload value?
                    if (preloadExistingValue) {
                        AbstractItem history = (AbstractItem) model.getObject();
                        history.setValue(field.getName(), item.getValue(field.getName()));
                    }
                    // return the value for the field (see abstract item getCustomValue method)
                    Object fieldLastCustomValue = null;

                    String i18nedFieldLabelResourceKey = item.getSpace()
                            .getPropertyTranslationResourceKey(field.getName().getText());

                    if (item != null && !editMode) {
                        if (field.getName().isFile()) {
                            Set<Attachment> tmpAttachments = item.getAttachments();
                            if (tmpAttachments != null && tmpAttachments.size() > 0) {
                                for (Attachment attachment : tmpAttachments) {
                                    if (field.getLabel()
                                            .equals(AttachmentUtils.getBaseName(attachment.getFileName()))) {
                                        fieldLastCustomValue = attachment.getFileName();
                                        break;
                                    }
                                }
                            }

                        } else {
                            fieldLastCustomValue = item.getValue(field.getName());
                        }

                    }

                    // Decide whether the field is mandatory

                    boolean valueRequired = false;
                    //logger.info("fieldLastCustomValue for field " + field.getLabel() +": "+fieldLastCustomValue);
                    if (field.getMask() == State.MASK_MANDATORY
                            || (field.getMask() == State.MASK_MANDATORY_IF_EMPTY
                                    && (fieldLastCustomValue == null
                                            || StringUtils.isBlank(fieldLastCustomValue.toString())))) {
                        valueRequired = true; // value required
                    }

                    // go over custom fields
                    WebMarkupContainer labelContainer = new WebMarkupContainer("labelContainer");
                    listItem.add(labelContainer);

                    SimpleFormComponentLabel label = null;
                    if (field.getName().isDropDownType()) {
                        String autoValue;
                        final Map<String, String> options = field.getOptions();
                        if (field.getFieldType().equals(Field.FIELD_TYPE_DROPDOWN_HIERARCHICAL)) {
                            Fragment f = new Fragment("field", "treeField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);
                            ItemFieldCustomAttribute customAttribute = field.getCustomAttribute();
                            //                        if(customAttribute == null){
                            //                           customAttribute = getCalipso().loadCustomAttribute(getCurrentSpace(), field.getName().getText());
                            //                           field.setCustomAttribute(customAttribute);
                            //                        }

                            // preload existing value
                            if (field.getCustomAttribute() != null && customAttribute.getLookupValue() == null
                                    && item.getCustomValue(field) != null) {
                                logger.info("preloading custom attribute for field: " + field.getLabel());
                                customAttribute.setLookupValue(getCalipso().loadCustomAttributeLookupValue(
                                        NumberUtils.createLong(item.getCustomValue(field).toString())));
                                customAttribute.setAllowedLookupValues(
                                        getCalipso().findActiveLookupValuesByCustomAttribute(customAttribute));
                            } else {
                                logger.info(
                                        "SKIPPED preloading custom attribute for field: " + field.getLabel());
                                customAttribute.setAllowedLookupValues(
                                        getCalipso().findActiveLookupValuesByCustomAttribute(customAttribute));
                            }
                            TreeChoice choice = new TreeChoice("field",
                                    new PropertyModel<CustomAttributeLookupValue>(field,
                                            "customAttribute.lookupValue"),
                                    customAttribute.getAllowedLookupValues(), customAttribute);

                            // TODO: temp, make configurable in space field form for 1520
                            int attrId = customAttribute.getId().intValue();
                            choice.setVisibleMenuLinks(
                                    attrId == 3 || attrId == 4 || attrId == 16 || attrId == 17);
                            //choice.setType(Long.class);
                            choice.setRequired(valueRequired);
                            // i18n
                            choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                            WebMarkupContainer border = new WebMarkupContainer("border");
                            f.add(border);
                            //border.add(new ErrorHighlighter(choice));
                            border.add(choice);
                            //choice.setModel(model.bind(field.getName().getText()));
                            //border.add(model.bind(choice, field.getName().getText()));
                            listItem.add(f.setRenderBodyOnly(true));
                            label = new SimpleFormComponentLabel("label", choice);
                        }
                        // get the type of component that will render the choices
                        else if (field.getFieldType().equals(Field.FIELD_TYPE_AUTOSUGGEST)) {

                            renderAutoSuggest(model, listItem, field, i18nedFieldLabelResourceKey,
                                    valueRequired, options);

                        } else {
                            // normal drop down
                            label = renderDropDown(model, listItem, field, i18nedFieldLabelResourceKey,
                                    valueRequired, options);

                        }

                    } else if (field.getName().equals(Field.Name.ASSIGNABLE_SPACES)) {
                        Fragment f = new Fragment("field", "dropDown", CustomFieldsFormPanel.this);

                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        List assignableSpaces = loadAssignableSpaces(field);
                        final Map options = new LinkedHashMap();

                        // Replace value from space id to space description for
                        // reasons of appearance.
                        for (int i = 0; i < assignableSpaces.size(); i++) {
                            Space space = (Space) assignableSpaces.get(i);
                            if (!space.equals(getCurrentSpace())) {
                                options.put(space.getId(), localize(space.getNameTranslationResourceKey()));
                            } // if
                        } // for

                        final List keys = new ArrayList(options.keySet());

                        AssignableSpacesDropDownChoice choice = new AssignableSpacesDropDownChoice("field",
                                keys, new IChoiceRenderer() {
                                    @Override
                                    public Object getDisplayValue(Object o) {
                                        return o;
                                    };

                                    @Override
                                    public String getIdValue(Object o, int i) {
                                        return o.toString();
                                    };
                                });

                        choice.setNullValid(true);
                        // i18n
                        choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));

                        choice.setRequired(valueRequired);
                        choice.add(new Behavior() {
                            @Override
                            public void renderHead(Component component, IHeaderResponse response) {
                                response.renderJavaScript(new JavaScripts().setAssignableSpacesId.asString(),
                                        "setAssignableSpacesId");
                            }
                        });
                        choice.add(new AjaxFormComponentUpdatingBehavior("onChange") {
                            @Override
                            protected void onUpdate(AjaxRequestTarget target) {
                                if (statusChoice != null
                                        && !statusChoice.getDefaultModelObjectAsString().equals("")
                                        && !statusChoice.getDefaultModelObjectAsString().equals("-1")) {
                                    // if
                                    // (statusChoice.getValue().equals(String.valueOf(State.MOVE_TO_OTHER_SPACE))){
                                    // assignedToChoice.setChoices(getAssignableSpaceUsers());
                                    // assignedToChoice.setNullValid(false);
                                    // assignedToChoice.setVisible(true);
                                    // }//if
                                } // if
                                target.appendJavaScript("assignableSpacesId=" + "'"
                                        + assignableSpacesDropDownChoice.getMarkupId() + "';");
                                // This can happen at the creation of a new item
                                // where makes no sense to be moved to other space
                                if (assignedToChoice != null) {
                                    target.addComponent(assignedToChoice);
                                }
                            }// onUpdate

                            @Override
                            protected void onError(AjaxRequestTarget arg0, RuntimeException arg1) {
                                // Do nothing.
                                // It happens only if the choice be set to NULL by
                                // the user.
                                // The exception occurs because the model binds to
                                // space id that is from (primitive) type
                                // long and its value can not be set to NULL.
                            }

                        });

                        choice.setOutputMarkupId(true);
                        assignableSpacesDropDownChoice = choice;

                        if (itemViewFormPanel != null) {
                            itemViewFormPanel.getItemViewForm()
                                    .setAssignableSpacesDropDownChoice(assignableSpacesDropDownChoice);
                        } // if

                        WebMarkupContainer border = new WebMarkupContainer("border");
                        f.add(border);
                        border.add(new ErrorHighlighter(choice));
                        // Set field name explicitly to avoid runtime error
                        //border.add(model.bind(choice, field.getName() + ".id"));
                        choice.setModel(model.bind(field.getName() + ".id"));
                        border.add(choice);
                        listItem.add(f.setRenderBodyOnly(true));
                        border.setVisible(!CustomFieldsFormPanel.this.editMode);
                        label = new SimpleFormComponentLabel("label", choice);
                    } else if (field.getName().getType() == 6) {
                        // date picker
                        Fragment fragment = new Fragment("field", "dateFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(fragment, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        if (item.getId() == 0 && item.getValue(field.getName()) == null
                                && field.getDefaultValueExpression() != null
                                && field.getDefaultValueExpression().equalsIgnoreCase("now")) {
                            item.setValue(field.getName(), new Date());
                        }
                        DateField calendar = new DateField("field",
                                preloadExistingValue
                                        ? new PropertyModel(model.getObject(), field.getName().getText())
                                        : new PropertyModel(model, field.getName().getText())) {

                            @Override
                            protected String getDateFormat() {
                                // TODO Auto-generated method stub
                                return metadata.getDateFormats().get(Metadata.DATE_FORMAT_SHORT);
                            }

                        };
                        calendar.setRequired(valueRequired);
                        // i8n
                        calendar.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));

                        fragment.add(calendar);
                        listItem.add(fragment.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", calendar);

                    }
                    // TODO: Creating new space item - users custom field
                    else if (field.getName().isOrganization()) { // is organization
                        // Get users list
                        Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        Organization organization = (Organization) item.getValue(field.getName());
                        // logger.debug("Item organization field has value: "+organization);
                        final List<Organization> allOrganizationsList = getCalipso().findAllOrganizations();
                        DropDownChoice organizationChoice = new DropDownChoice("field", allOrganizationsList,
                                new IChoiceRenderer() {
                                    // user's choice renderer
                                    // display value user's name
                                    @Override
                                    public Object getDisplayValue(Object object) {
                                        return ((Organization) object).getName();
                                    }

                                    @Override
                                    public String getIdValue(Object object, int index) {
                                        // id value user's id
                                        return index + "";
                                    }
                                });

                        organizationChoice.add(new ErrorHighlighter());

                        organizationChoice.setRequired(valueRequired);
                        // i18n
                        organizationChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                        //f.add(model.bind(organizationChoice, field.getName().getText()));
                        organizationChoice.setModel(model.bind(field.getName().getText()));
                        f.add(organizationChoice);
                        listItem.add(f.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", organizationChoice);
                    }

                    else if (field.getName().isFile()) {
                        // File
                        addFileInputField(model, fileUploadFields, listItem, field, i18nedFieldLabelResourceKey,
                                valueRequired);

                    }
                    // TODO: Creating new space item - organizations custom field
                    else if (field.getName().isUser()) { // is user

                        Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        // find organization id from field's options

                        String strOrgId = field.getOptions().get("organizationId");
                        Long orgId = Long.valueOf(strOrgId);
                        // load organization from database

                        Organization selectedOrg = getCalipso().loadOrganization(orgId);
                        // TODO: load all users from organization
                        // add new list of selected organizations
                        List<Organization> selectedOrganization = new ArrayList<Organization>();
                        // add selected organization
                        selectedOrganization.add(selectedOrg);

                        final List<User> usersFromOrganization = getCalipso()
                                .findUsersInOrganizations(selectedOrganization);

                        // TODO: dropdown of all organization

                        DropDownChoice usersFromOrganizationChoice = new DropDownChoice("field",
                                usersFromOrganization, new UserChoiceRenderer());
                        usersFromOrganizationChoice.setNullValid(false);
                        usersFromOrganizationChoice.setRequired(valueRequired);
                        // i18n
                        usersFromOrganizationChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                        //f.add(model.bind(usersFromOrganizationChoice, field.getName().getText()));
                        usersFromOrganizationChoice.setModel(model.bind(field.getName().getText()));
                        f.add(usersFromOrganizationChoice);
                        listItem.add(f.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", usersFromOrganizationChoice);

                    } else if (field.getName().isCountry()) {
                        // organization fragment holds a dropDown of countries
                        final List<Country> allCountriesList = getCalipso().findAllCountries();
                        Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        listItem.add(f.setRenderBodyOnly(true));
                        DropDownChoice countryChoice = getCountriesDropDown("field", allCountriesList);
                        countryChoice.add(new ErrorHighlighter());

                        countryChoice.setRequired(valueRequired);
                        // i18n
                        countryChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));

                        //f.add(model.bind(countryChoice, field.getName().getText()));
                        countryChoice.setModel(model.bind(field.getName().getText()));
                        f.add(countryChoice);
                        label = new SimpleFormComponentLabel("label", countryChoice);

                    }

                    else {
                        if (logger.isDebugEnabled())
                            logger.debug("model.getObject(): " + model.getObject());
                        if (logger.isDebugEnabled())
                            logger.debug(
                                    "model.getObject().getClass(): " + model.getObject().getClass().getName());
                        if (logger.isDebugEnabled())
                            logger.debug("field.getName().getText(): " + field.getName().getText());
                        //if(logger.isDebugEnabled()) logger.debug("((Item)model.getObject()).getCusStr01(): "+((Item)model.getObject()).getCusStr01());
                        FormComponent textField;
                        Fragment f;

                        if (field.isMultivalue()) {
                            f = new Fragment("field", "multipleValuesTextField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);

                            if (logger.isDebugEnabled())
                                logger.debug("model.getObject(): " + model.getObject());
                            if (logger.isDebugEnabled())
                                logger.debug("field.getName().getText(): " + field.getName().getText());
                            textField = preloadExistingValue
                                    ? new MultipleValuesTextField("field",
                                            new PropertyModel(model.getObject(), field.getName().getText()),
                                            field.getXmlConfig())
                                    : new MultipleValuesTextField("field", field.getXmlConfig());
                        } else if (field.getLineCount() == 1) {
                            f = new Fragment("field", "textField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);
                            textField = preloadExistingValue
                                    ? new TextField("field",
                                            new PropertyModel(model.getObject(), field.getName().getText()))
                                    : new TextField("field");
                        } else {
                            f = new Fragment("field", "textareaField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);
                            textField = preloadExistingValue ? new TextArea("field",
                                    new PropertyModel(model.getObject(), field.getName().getText())) {
                                @Override
                                protected void onComponentTag(ComponentTag tag) {
                                    super.onComponentTag(tag);
                                    tag.put("rows", field.getLineCount().toString());
                                }
                            } : new TextArea("field") {
                                @Override
                                protected void onComponentTag(ComponentTag tag) {
                                    super.onComponentTag(tag);
                                    tag.put("rows", field.getLineCount().toString());
                                }
                            };
                        }

                        // any validations for this field?
                        ValidationExpression validationExpression = getCalipso()
                                .loadValidationExpression(field.getValidationExpressionId());
                        if (validationExpression != null) {
                            textField.add(new ValidationExpressionValidator(validationExpression));
                        }

                        // TODO: do we need these two?
                        if (field.getName().getType() == 4) {
                            textField.setType(Double.class);
                        } else if (field.getName().isDecimalNumber()) {
                            textField.add(new PositiveNumberValidator());
                        }

                        textField.add(new ErrorHighlighter());
                        textField.setRequired(valueRequired);
                        // i18n
                        textField.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                        if (preloadExistingValue) {
                            f.add(textField);
                        } else {
                            //f.add(model.bind(textField, field.getName().getText()));
                            textField.setModel(model.bind(field.getName().getText()));
                            f.add(textField);
                        }
                        // f.add(textField);
                        listItem.add(f.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", textField);

                        // styles
                        FieldUtils.appendFieldStyles(field.getXmlConfig(), textField);
                    }

                    // add label
                    labelContainer.add(label != null ? label : new Label("label", ""));
                    if (field.getCustomAttribute() != null
                            && StringUtils.isBlank(field.getCustomAttribute().getHtmlDescription())) {
                        labelContainer.add(new SimpleAttributeModifier("class", "labelContainer"));
                    }
                    // mandatory?

                    // mark as mandatory in the UI?
                    labelContainer
                            .add(new Label("star", valueRequired ? "* " : " ").setEscapeModelStrings(false));
                }

                private SimpleFormComponentLabel renderAutoSuggest(final IModel model, ListItem listItem,
                        final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired,
                        final Map<String, String> options) {
                    SimpleFormComponentLabel label = null;
                    Fragment f = new Fragment("field", "autoCompleteFragment", CustomFieldsFormPanel.this);
                    // add HTML description through velocity
                    addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute().getHtmlDescription(), null, true);

                    final List<String> autoKeys = new ArrayList<String>(
                            options != null ? new ArrayList<String>(options.keySet())
                                    : new ArrayList<String>());

                    // the autocomplet textField
                    // TODO: fix to render values instead of integer
                    AbstractAutoCompleteRenderer autoRenderer = new AbstractAutoCompleteRenderer() {

                        @Override
                        protected String getTextValue(Object object) {
                            // TODO Auto-generated method stub
                            return object.toString();
                        }

                        @Override
                        protected void renderChoice(Object object, Response response, String criteria) {
                            response.write(object.toString());
                        }

                    };

                    autoTextField = new AutoCompleteTextField("field",
                            new PropertyModel(field, "customAttribute.lookupValue")) {

                        // TODO: the list
                        @Override
                        protected Iterator<String> getChoices(String input) {

                            if (Strings.isEmpty(input)) {
                                List<String> emptyList = Collections.emptyList();
                                return emptyList.iterator();
                            }
                            List<String> searchResults = new ArrayList<String>();

                            for (String s : options.values()) {
                                if (s.startsWith(input)) {
                                    searchResults.add(s);
                                }
                            }
                            return searchResults.iterator();
                        }

                    };
                    autoTextField.add(new AjaxFormComponentUpdatingBehavior("onchange") {

                        @Override
                        protected void onUpdate(AjaxRequestTarget target) {
                            // TODO Auto-generated method stub
                            List<String> searchResults = new ArrayList<String>();
                            for (String s : options.values()) {
                                if (s.startsWith((String) autoTextField.getModelObject())) {
                                    searchResults.add(s);
                                }
                            }
                            target.addComponent(autoTextField);
                        }
                    });
                    // i18n
                    autoTextField.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                    String componentValue = (String) ((autoTextField != null
                            && autoTextField.getModelObject() != null) ? autoTextField.getModelObject() : null);

                    autoTextField.setRequired(valueRequired);
                    WebMarkupContainer border = new WebMarkupContainer("border");
                    f.add(border);
                    border.add(new ErrorHighlighter(autoTextField));
                    autoTextField.setModel(new PropertyModel(model.getObject(), field.getName().getText()));
                    //border.add(model.bind(autoTextField, field.getName().getText()));
                    border.add(autoTextField);
                    if (logger.isDebugEnabled() && autoTextField != null
                            && autoTextField.getDefaultModelObjectAsString() != null) {
                        if (logger.isDebugEnabled())
                            logger.debug(
                                    "Auto complete value is :" + autoTextField.getDefaultModelObjectAsString());
                    }
                    listItem.add(f.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", autoTextField);
                    return label;

                    // -------------------------
                }

                private SimpleFormComponentLabel addFileInputField(final CompoundPropertyModel model,
                        final Map<String, FileUploadField> fileUploadFields, ListItem listItem,
                        final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired) {
                    SimpleFormComponentLabel label = null;
                    Fragment f = new Fragment("field", "fileField", CustomFieldsFormPanel.this);
                    // add HTML description through velocity
                    addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute().getHtmlDescription(), null, true);

                    FileUploadField fileField = new FileUploadField("field");
                    fileUploadFields.put(field.getLabel(), fileField);
                    fileField.add(new ErrorHighlighter());

                    fileField.setRequired(valueRequired);
                    // i18n
                    fileField.setLabel(new ResourceModel(
                            StringUtils.isNotBlank(i18nedFieldLabelResourceKey) ? i18nedFieldLabelResourceKey
                                    : Field.FIELD_TYPE_SIMPLE_ATTACHEMENT));//field.getName().getText().equalsIgnoreCase(Field.FIELD_TYPE_SIMPLE_ATTACHEMENT) ? Field.FIELD_TYPE_SIMPLE_ATTACHEMENT : i18nedFieldLabelResourceKey));

                    //f.add(model.bind(fileField, field.getName().getText()));
                    fileField.setModel(new Model());
                    // List<FileUpload> fileUploads = new LinkedList<FileUpload>();
                    f.add(fileField);
                    listItem.add(f.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", fileField);
                    return label;
                }

                /**
                 * @param model
                 * @param listItem
                 * @param field
                 * @param i18nedFieldLabelResourceKey
                 * @param valueRequired
                 * @param options
                 */
                private SimpleFormComponentLabel renderDropDown(final IModel model, ListItem listItem,
                        final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired,
                        final Map<String, String> options) {
                    SimpleFormComponentLabel label = null;
                    /*
                     final List<CustomAttributeLookupValue> lookupValues = getCalipso().findLookupValuesByCustomAttribute(field.getCustomAttribute());
                          TreeChoice choice = new TreeChoice("field", new PropertyModel(field, "customAttribute.lookupValue"), lookupValues);
                          choice.setType(CustomAttributeLookupValue.class);
                          //choice.setType(Long.class);
                          choice.setRequired(valueRequired);
                          // i18n
                          choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                          WebMarkupContainer border = new WebMarkupContainer("border");
                          f.add(border);
                          //border.add(new ErrorHighlighter(choice));
                          border.add(choice);
                                  
                     */

                    // drop down list
                    final Fragment fragment = new Fragment("field", "dropDown", CustomFieldsFormPanel.this);
                    if (field.getCustomAttribute() == null) {
                        field.setCustomAttribute(getCalipso().loadItemCustomAttribute(getCurrentSpace(),
                                field.getName().getText()));
                    }
                    // add HTML description through velocity
                    logger.info("field name:" + field.getName() + ", custom atribute: "
                            + field.getCustomAttribute());
                    addVelocityTemplatePanel(fragment, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute() != null ? field.getCustomAttribute().getHtmlDescription()
                                    : "",
                            null, true);

                    final List<CustomAttributeLookupValue> lookupValues = getCalipso()
                            .findActiveLookupValuesByCustomAttribute(field.getCustomAttribute());
                    // preselect previous user choice from DB if available
                    Object preselected = item.getValue(field.getName());
                    if (preselected != null) {
                        String sPreselectedId = preselected.toString();
                        if (CollectionUtils.isNotEmpty(lookupValues)) {
                            for (CustomAttributeLookupValue value : lookupValues) {
                                if ((value.getId() + "").equals(sPreselectedId)) {
                                    field.getCustomAttribute().setLookupValue(value);
                                    break;
                                }
                            }
                        }
                    }
                    // else set using the default string value instead, if any
                    // TODO: move this into a LookupValueDropDownChoice class
                    else {
                        String defaultStringValue = field.getCustomAttribute() != null
                                ? field.getCustomAttribute().getDefaultStringValue()
                                : null;
                        if (defaultStringValue != null && CollectionUtils.isNotEmpty(lookupValues)) {
                            for (CustomAttributeLookupValue value : lookupValues) {
                                if (value.getValue().equals(defaultStringValue)) {
                                    field.getCustomAttribute().setLookupValue(value);
                                    break;
                                }
                            }
                        }
                    }
                    DropDownChoice choice = new DropDownChoice("field",
                            new PropertyModel(field, "customAttribute.lookupValue"), lookupValues,
                            new IChoiceRenderer<CustomAttributeLookupValue>() {
                                @Override
                                public Object getDisplayValue(CustomAttributeLookupValue o) {
                                    return fragment.getString(o.getNameTranslationResourceKey());
                                }

                                @Override
                                public String getIdValue(CustomAttributeLookupValue o, int index) {
                                    return String.valueOf(index);
                                }
                            });
                    choice.setNullValid(true);

                    // i18n
                    choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                    choice.setRequired(valueRequired);
                    WebMarkupContainer border = new WebMarkupContainer("border");
                    fragment.add(border);
                    border.add(new ErrorHighlighter(choice));
                    //border.add(model.bind(choice, field.getName().getText()));
                    border.add(choice);
                    listItem.add(fragment.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", choice);
                    return label;
                }

                /**
                 * @param model
                 * @param listItem
                 * @param field
                 * @param i18nedFieldLabelResourceKey
                 * @param valueRequired
                 * @param options
                 */
                private SimpleFormComponentLabel renderPeriodPartDropDown(final CompoundPropertyModel model,
                        ListItem listItem, final Field field, String i18nedFieldLabelResourceKey,
                        boolean valueRequired, final List<Date> options) {
                    SimpleFormComponentLabel label = null;
                    // drop down list
                    Fragment f = new Fragment("field", "dropDown", CustomFieldsFormPanel.this);

                    // add HTML description through velocity
                    addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute().getHtmlDescription(), null, true);

                    DropDownChoice choice = new DropDownChoice("field", options, new IChoiceRenderer() {
                        @Override
                        public Object getDisplayValue(Object o) {
                            return DateUtils.format((Date) o);
                        };

                        @Override
                        public String getIdValue(Object o, int i) {
                            return String.valueOf(i);
                        };
                    });
                    choice.setNullValid(true);
                    // i18n
                    choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                    choice.setRequired(valueRequired);
                    WebMarkupContainer border = new WebMarkupContainer("border");
                    f.add(border);
                    border.add(new ErrorHighlighter(choice));
                    //border.add(model.bind(choice, field.getName().getText()));
                    choice.setModel(model.bind(field.getName().getText()));
                    border.add(choice);
                    listItem.add(f.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", choice);
                    return label;
                }
            };
            if (editableGroupFields.isEmpty()) {
                listItem.setVisible(false);
            }
            listView.setReuseItems(true);
            listItem.add(listView.setRenderBodyOnly(true));

        }

    };
    add(fieldGroups.setReuseItems(true));

    // 
}