Example usage for org.apache.wicket.markup.html.form.validation IFormValidator getDependentFormComponents

List of usage examples for org.apache.wicket.markup.html.form.validation IFormValidator getDependentFormComponents

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.form.validation IFormValidator getDependentFormComponents.

Prototype

FormComponent<?>[] getDependentFormComponents();

Source Link

Usage

From source file:org.projectforge.plugins.ffp.wicket.FFPEventEditForm.java

License:Open Source License

@Override
protected void init() {
    super.init();
    currentUser = ThreadLocalUserContext.getUser();
    if (data.getOrganizer() == null) {
        if (currentUser == null) {
            error(I18nHelper.getLocalizedMessage("plugins.ffp.validate.noUser"));
            return;
        } else {//from  ww w.  ja  v a  2 s .co m
            data.setOrganizer(currentUser);
        }
    }

    if (isNew()) {
        if (currentUser != null) {
            this.accountingList.add(getNewFfpAccountingDO(currentUser));
        }
    }

    IFormValidator formValidator = new IFormValidator() {

        // Components for form validation.
        private final FormComponent<?>[] dependentFormComponents = new FormComponent[1];

        @Override
        public FormComponent<?>[] getDependentFormComponents() {
            return dependentFormComponents;
        }

        @Override
        public void validate(Form<?> form) {
            Select2MultiChoice<PFUserDO> attendeesSelect2 = (Select2MultiChoice<PFUserDO>) dependentFormComponents[0];
            Collection<PFUserDO> attendeeList = attendeesSelect2.getConvertedInput();
            if (attendeeList != null && attendeeList.size() < 2) {
                error(I18nHelper.getLocalizedMessage("plugins.ffp.validate.minAttendees"));
            }
        }
    };

    add(formValidator);

    gridBuilder.newSplitPanel(GridSize.COL50, true).newSubSplitPanel(GridSize.COL100);
    {
        // Organizer
        final FieldsetPanel fs = gridBuilder.newFieldset(FFPEventDO.class, "organizer");
        fs.add(new DivTextPanel(fs.newChildId(), data.getOrganizer().getFullname()));
    }
    {
        // Event date
        final FieldsetPanel fs = gridBuilder.newFieldset(FFPEventDO.class, "eventDate");
        DatePanel eventDate = new DatePanel(fs.newChildId(), new PropertyModel<>(data, "eventDate"),
                DatePanelSettings.get().withTargetType(java.sql.Date.class), true);
        eventDate.setRequired(true);
        eventDate.setMarkupId("eventDate").setOutputMarkupId(true);
        eventDate.setEnabled(getData().getFinished() == false);
        fs.add(eventDate);
    }
    {
        // Division
        final FieldsetPanel fs = gridBuilder.newFieldset(FFPEventDO.class, "title");
        MaxLengthTextField titel = new MaxLengthTextField(InputPanel.WICKET_ID,
                new PropertyModel<>(data, "title"));
        titel.setRequired(true);
        titel.setMarkupId("eventTitel").setOutputMarkupId(true);
        titel.setEnabled(getData().getFinished() == false);
        fs.add(titel);
    }
    {
        // ATTENDEES
        final FieldsetPanel fieldSet = gridBuilder.newFieldset(getString("plugins.ffp.attendees"));
        assignAttendeesListHelper = new MultiChoiceListHelper<PFUserDO>()
                .setComparator(new Comparator<PFUserDO>() {

                    @Override
                    public int compare(PFUserDO o1, PFUserDO o2) {
                        return o1.getPk().compareTo(o2.getPk());
                    }

                }).setFullList(userDao.getList(new PFUserFilter().setDeactivatedUser(false)));

        if (this.data.getAttendeeList() != null && this.data.getAttendeeList().size() > 0) {
            for (final PFUserDO attendee : this.data.getAttendeeList()) {
                assignAttendeesListHelper.addOriginalAssignedItem(attendee).assignItem(attendee);
            }
        }
        if (this.accountingList != null && this.accountingList.size() > 0) {
            for (final FFPAccountingDO accounting : this.accountingList) {
                assignAttendeesListHelper.assignItem(accounting.getAttendee());
            }
        }

        final Select2MultiChoice<PFUserDO> attendees = new Select2MultiChoice<PFUserDO>(
                fieldSet.getSelect2MultiChoiceId(),
                new PropertyModel<Collection<PFUserDO>>(this.assignAttendeesListHelper, "assignedItems"),
                new UsersProvider(userDao));
        attendees.setRequired(true).setMarkupId("attendees").setOutputMarkupId(true);
        attendees.add(new AjaxEventBehavior(OnChangeAjaxBehavior.EVENT_NAME) {
            protected final FormComponent<?> getFormComponent() {
                return (FormComponent<?>) getComponent();
            }

            @Override
            protected void onEvent(AjaxRequestTarget target) {
                final FormComponent<?> formComponent = getFormComponent();
                try {
                    formComponent.inputChanged();
                    formComponent.validate();
                    if (formComponent.hasErrorMessage()) {
                        formComponent.invalid();
                        accountingList.clear();
                        assignAttendeesListHelper.getAssignedItems().clear();
                    } else {
                        formComponent.valid();
                        formComponent.updateModel();
                    }
                    dataTable = createDataTable(createColumns(), "attendee.fullname", SortOrder.ASCENDING,
                            getData());
                    tablePanel.addOrReplace(dataTable);
                    target.add(dataTable);
                } catch (RuntimeException e) {
                    throw e;
                }
            }
        });
        attendees.setEnabled(getData().getFinished() == false);
        formValidator.getDependentFormComponents()[0] = attendees;
        fieldSet.add(attendees);
    }

    //Transactions
    createDataTable(gridBuilder);

    {
        Button finishButton = new Button("button", new Model<String>("plugins.ffp.finishEvent")) {
            @Override
            public final void onSubmit() {
                try {
                    getData().setFinished(true);
                    parentPage.createOrUpdate();
                } catch (final UserException ex) {
                    error(parentPage.translateParams(ex));
                }
            }
        };
        finishButton.setMarkupId("finishEvent").setOutputMarkupId(true);
        finishButtonPanel = new SingleButtonPanel(actionButtons.newChildId(), finishButton,
                getString("plugins.ffp.finishEvent"), SingleButtonPanel.SUCCESS);
        finishButtonPanel.setVisible(false);
        actionButtons.add(finishButtonPanel);
    }
}