Example usage for org.apache.wicket.ajax.form OnChangeAjaxBehavior OnChangeAjaxBehavior

List of usage examples for org.apache.wicket.ajax.form OnChangeAjaxBehavior OnChangeAjaxBehavior

Introduction

In this page you can find the example usage for org.apache.wicket.ajax.form OnChangeAjaxBehavior OnChangeAjaxBehavior.

Prototype

public OnChangeAjaxBehavior() 

Source Link

Document

Constructor.

Usage

From source file:com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel.java

License:Apache License

public AutoCompleteTextPanel(String id, final IModel<T> model, Class<T> type) {
    super(id);//from   w  w  w  .  j av a  2 s  .  c  o m

    AutoCompleteSettings autoCompleteSettings = createAutoCompleteSettings();

    // this has to be copied because the  AutoCompleteTextField dies if renderer=null
    final AutoCompleteTextField<T> input = new AutoCompleteTextField<T>(ID_INPUT, model, type,
            autoCompleteSettings) {
        private static final long serialVersionUID = 1L;

        @Override
        protected Iterator<T> getChoices(String input) {
            return getIterator(input);
        }

    };

    input.setType(type);
    if (model instanceof LookupPropertyModel) {
        input.add(new OnChangeAjaxBehavior() {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                checkInputValue(input, target, (LookupPropertyModel<T>) model);
            }
        });
    }
    add(input);
}

From source file:com.evolveum.midpoint.gui.api.component.FocusBrowserPanel.java

License:Apache License

private void initLayout(Class<T> type, final List<QName> supportedTypes, final boolean multiselect) {

    WebMarkupContainer typePanel = new WebMarkupContainer(ID_TYPE_PANEL);
    typePanel.setOutputMarkupId(true);//  w w w. j ava2  s  .c  o m
    typePanel.add(new VisibleEnableBehaviour() {
        @Override
        public boolean isVisible() {
            return supportedTypes.size() != 1;
        }
    });
    add(typePanel);
    DropDownChoice<QName> typeSelect = new DropDownChoice(ID_TYPE, typeModel, new ListModel(supportedTypes),
            new QNameChoiceRenderer());
    typeSelect.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {

            ObjectListPanel<T> listPanel = (ObjectListPanel<T>) get(ID_TABLE);

            listPanel = createObjectListPanel(qnameToCompileTimeClass(typeModel.getObject()), multiselect);
            addOrReplace(listPanel);
            target.add(listPanel);
        }
    });
    typePanel.add(typeSelect);

    ObjectListPanel<T> listPanel = createObjectListPanel(type, multiselect);
    add(listPanel);

    AjaxButton addButton = new AjaxButton(ID_BUTTON_ADD,
            createStringResource("userBrowserDialog.button.addButton")) {

        @Override
        public void onClick(AjaxRequestTarget target) {
            List<T> selected = ((PopupObjectListPanel) getParent().get(ID_TABLE)).getSelectedObjects();
            QName type = FocusBrowserPanel.this.typeModel.getObject();
            FocusBrowserPanel.this.addPerformed(target, type, selected);
        }
    };

    addButton.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            return multiselect;
        }
    });

    add(addButton);
}

From source file:com.evolveum.midpoint.gui.api.component.MultiTypesMemberPopupTabPanel.java

License:Apache License

@Override
protected void onInitialize() {
    super.onInitialize();
    WebMarkupContainer typePanel = new WebMarkupContainer(ID_TYPE_SELECT_PANEL);
    typePanel.setOutputMarkupId(true);/*w  ww .j a  v  a  2s .  c om*/
    add(typePanel);

    DropDownChoice<ObjectTypes> typeSelect = new DropDownChoice<>(ID_TYPE, new LoadableModel<ObjectTypes>() {
        @Override
        protected ObjectTypes load() {
            return defaultObjectType;
        }
    }, getSupportedTypesList(), new EnumChoiceRenderer<>(this));
    typeSelect.add(new OnChangeAjaxBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            defaultObjectType = typeSelect.getModelObject();
            MultiTypesMemberPopupTabPanel.this.addOrReplace(initObjectListPanel());
            target.add(MultiTypesMemberPopupTabPanel.this);
        }
    });
    typePanel.add(typeSelect);

    add(typePanel);
}

From source file:com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel.java

License:Apache License

private void initLayout(Class<? extends O> type, final List<QName> supportedTypes, final boolean multiselect) {

    WebMarkupContainer typePanel = new WebMarkupContainer(ID_TYPE_PANEL);
    typePanel.setOutputMarkupId(true);//from   ww  w.ja  va2  s . co  m
    typePanel.add(new VisibleEnableBehaviour() {
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() {
            return supportedTypes.size() != 1;
        }
    });
    add(typePanel);
    DropDownChoice<QName> typeSelect = new DropDownChoice<QName>(ID_TYPE, typeModel,
            new ListModel<QName>(supportedTypes), new QNameChoiceRenderer());
    typeSelect.add(new OnChangeAjaxBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {

            ObjectListPanel<O> listPanel = (ObjectListPanel<O>) get(ID_TABLE);

            listPanel = createObjectListPanel(qnameToCompileTimeClass(typeModel.getObject()), multiselect);
            addOrReplace(listPanel);
            target.add(listPanel);
        }
    });
    typePanel.add(typeSelect);

    ObjectListPanel<O> listPanel = createObjectListPanel(type, multiselect);
    add(listPanel);

    AjaxButton addButton = new AjaxButton(ID_BUTTON_ADD,
            createStringResource("userBrowserDialog.button.addButton")) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            List<O> selected = ((PopupObjectListPanel) getParent().get(ID_TABLE)).getSelectedObjects();
            QName type = ObjectBrowserPanel.this.typeModel.getObject();
            ObjectBrowserPanel.this.addPerformed(target, type, selected);
        }
    };

    addButton.add(new VisibleEnableBehaviour() {
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() {
            return multiselect;
        }
    });

    add(addButton);
}

From source file:com.evolveum.midpoint.gui.api.component.TypedAssignablePanel.java

License:Apache License

private void initLayout(Class<T> type, final boolean multiselect) {
    DropDownChoice<QName> typeSelect = new DropDownChoice(ID_TYPE, typeModel,
            new ListModel(WebComponentUtil.createAssignableTypesList()), new QNameChoiceRenderer());
    typeSelect.add(new OnChangeAjaxBehavior() {

        @Override/*w w  w .j a v a  2 s .  c o  m*/
        protected void onUpdate(AjaxRequestTarget target) {
            target.add(get(ID_TABLES_CONTAINER));
            target.add(addOrReplace(createCountContainer()));
        }
    });
    typeSelect.setOutputMarkupId(true);
    add(typeSelect);

    WebMarkupContainer tablesContainer = new WebMarkupContainer(ID_TABLES_CONTAINER);
    tablesContainer.setOutputMarkupId(true);
    add(tablesContainer);

    PopupObjectListPanel<T> listRolePanel = createObjectListPanel(ID_ROLE_TABLE, ID_SELECTED_ROLES,
            RoleType.COMPLEX_TYPE);
    tablesContainer.add(listRolePanel);
    PopupObjectListPanel<T> listResourcePanel = createObjectListPanel(ID_RESOURCE_TABLE, ID_SELECTED_RESOURCES,
            ResourceType.COMPLEX_TYPE);
    tablesContainer.add(listResourcePanel);
    PopupObjectListPanel<T> listOrgPanel = createObjectListPanel(ID_ORG_TABLE, ID_SELECTED_ORGS,
            OrgType.COMPLEX_TYPE);
    tablesContainer.add(listOrgPanel);
    PopupObjectListPanel<T> listServicePanel = createObjectListPanel(ID_SERVICE_TABLE, ID_SELECTED_SERVICES,
            ServiceType.COMPLEX_TYPE);
    tablesContainer.add(listServicePanel);

    WebMarkupContainer countContainer = createCountContainer();
    add(countContainer);

    AjaxButton addButton = new AjaxButton(ID_BUTTON_ASSIGN,
            createStringResource("userBrowserDialog.button.addButton")) {

        @Override
        public void onClick(AjaxRequestTarget target) {
            List<T> selected = getSelectedData(ID_ROLE_TABLE);
            selected.addAll(getSelectedData(ID_RESOURCE_TABLE));
            selected.addAll(getSelectedData(ID_ORG_TABLE));
            selected.addAll(getSelectedData(ID_SERVICE_TABLE));
            TypedAssignablePanel.this.addPerformed(target, selected);
        }
    };

    addButton.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            return multiselect;
        }
    });

    add(addButton);
}

From source file:com.evolveum.midpoint.gui.impl.page.admin.configuration.component.NotificationConfigTabPanel.java

License:Apache License

protected void initLayout() {

    PropertyWrapperFromContainerWrapperModel<MailConfigurationType, NotificationConfigurationType> mailConfig = new PropertyWrapperFromContainerWrapperModel<MailConfigurationType, NotificationConfigurationType>(
            getModel().getObject(), NotificationConfigurationType.F_MAIL);

    add(createHeader(ID_MAIL_CONFIG_HEADER,
            mailConfig.getObject().getItemDefinition().getTypeName().getLocalPart() + ".details"));

    Form form = new Form<>("form");

    mailConfigType = new RealValueFromSingleValuePropertyWrapperModel<MailConfigurationType>(mailConfig)
            .getObject();/*w w w.j  a v a 2 s  .c  o m*/

    if (mailConfigType == null) {
        mailConfigType = new MailConfigurationType();
        ((PrismPropertyValue<MailConfigurationType>) mailConfig.getObject().getValues().get(0).getValue())
                .setValue(mailConfigType);
    }

    add(new TextFormGroup(ID_DEFAULT_FROM, new PropertyModel<String>(mailConfigType, "defaultFrom"),
            createStringResource(
                    mailConfig.getObject().getItemDefinition().getTypeName().getLocalPart() + ".defaultFrom"),
            "", getInputCssClass(), false, true));

    add(new TextFormGroup(ID_REDIRECT_TO_FILE, new PropertyModel<String>(mailConfigType, "redirectToFile"),
            createStringResource(mailConfig.getObject().getItemDefinition().getTypeName().getLocalPart()
                    + ".redirectToFile"),
            "", getInputCssClass(), false, true));

    add(new TextFormGroup(ID_LOG_TO_FILE, new PropertyModel<String>(mailConfigType, "logToFile"),
            createStringResource(
                    mailConfig.getObject().getItemDefinition().getTypeName().getLocalPart() + ".logToFile"),
            "", getInputCssClass(), false, true));

    add(new TriStateFormGroup(ID_DEBUG, new PropertyModel<Boolean>(mailConfigType, "debug"),
            createStringResource(
                    mailConfig.getObject().getItemDefinition().getTypeName().getLocalPart() + ".debug"),
            "", getInputCssClass(), false, true));

    add(createHeader(ID_MAIL_SERVER_CONFIG_HEADER,
            MailServerConfigurationType.COMPLEX_TYPE.getLocalPart() + ".details"));

    add(initServersTable());

    add(createHeader(ID_FILE_CONFIG_HEADER, FileConfigurationType.COMPLEX_TYPE.getLocalPart() + ".details"));

    PropertyWrapperFromContainerWrapperModel<FileConfigurationType, NotificationConfigurationType> fileConfig = new PropertyWrapperFromContainerWrapperModel<FileConfigurationType, NotificationConfigurationType>(
            getModel().getObject(), NotificationConfigurationType.F_FILE);

    WebMarkupContainer files = new WebMarkupContainer(ID_FILE_CONFIG);
    files.setOutputMarkupId(true);
    add(files);

    ListView<ValueWrapper<FileConfigurationType>> values = new ListView<ValueWrapper<FileConfigurationType>>(
            "values", new PropertyModel<>(fileConfig, "values")) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<ValueWrapper<FileConfigurationType>> item) {

            FileConfigurationType fileConfigType = item.getModelObject().getValue().getRealValue();

            item.add(createHeader(ID_VALUE_HEADER,
                    fileConfigType == null || fileConfigType.getName() == null
                            || fileConfigType.getName().isEmpty()
                                    ? (FileConfigurationType.COMPLEX_TYPE.getLocalPart() + ".details")
                                    : fileConfigType.getName()));

            AjaxLink removeButton = new AjaxLink(ID_REMOVE_BUTTON) {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    ((PrismPropertyValue<FileConfigurationType>) item.getModelObject().getValue())
                            .setValue(null);
                    item.getParent().remove(item.getId());
                    target.add(files);
                }
            };
            item.add(removeButton);

            TextFormGroup name = new TextFormGroup(ID_FILE_NAME,
                    fileConfigType != null ? new PropertyModel<String>(fileConfigType, "name") : Model.of(""),
                    createStringResource(fileConfigType == null ? ""
                            : (fileConfigType.COMPLEX_TYPE.getLocalPart() + ".name")),
                    "", getInputCssClass(), false, true);
            name.getField().add(new OnChangeAjaxBehavior() {

                private static final long serialVersionUID = 1L;

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    ((FileConfigurationType) item.getModelObject().getValue().getRealValue())
                            .setName(name.getModelObject());
                }
            });
            item.add(name);

            TextFormGroup file = new TextFormGroup(ID_FILE_PATH,
                    fileConfigType != null ? new PropertyModel<String>(fileConfigType, "file") : Model.of(""),
                    createStringResource(fileConfigType == null ? ""
                            : (fileConfigType.COMPLEX_TYPE.getLocalPart() + ".file")),
                    "", getInputCssClass(), false, true);
            file.getField().add(new OnChangeAjaxBehavior() {

                private static final long serialVersionUID = 1L;

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    ((FileConfigurationType) item.getModelObject().getValue().getRealValue())
                            .setFile(file.getModelObject());
                }
            });
            item.add(file);

            item.add(new VisibleEnableBehaviour() {

                @Override
                public boolean isVisible() {
                    return fileConfigType != null;
                }
            });
        }
    };
    values.add(new AttributeModifier("class", "col-md-6"));
    values.setReuseItems(true);
    files.add(values);

    AjaxLink addButton = new AjaxLink(ID_ADD_BUTTON) {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            ValueWrapper<FileConfigurationType> newValue = fileConfig.getObject().createAddedValue();
            ((PrismPropertyValue<FileConfigurationType>) newValue.getValue())
                    .setValue(new FileConfigurationType());
            fileConfig.getObject().getValues().add(newValue);
            target.add(files);
        }
    };
    add(addButton);

}

From source file:com.evolveum.midpoint.web.component.dialog.DeleteAllDialog.java

License:Apache License

private void initLayout(WebMarkupContainer content) {

    CheckBox deleteUsersCheckbox = new CheckBox(ID_CHB_USERS,
            new PropertyModel<Boolean>(model, DeleteAllDto.F_USERS));
    deleteUsersCheckbox.add(new OnChangeAjaxBehavior() {

        @Override/*  w  w  w .j ava  2  s .  co m*/
        protected void onUpdate(AjaxRequestTarget target) {
            updateLabelModel(target, ID_TEXT_USERS);
        }
    });
    content.add(deleteUsersCheckbox);

    CheckBox deleteOrgsCheckbox = new CheckBox(ID_CHB_ORG,
            new PropertyModel<Boolean>(model, DeleteAllDto.F_ORGS));
    deleteOrgsCheckbox.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            updateLabelModel(target, ID_TEXT_ORGS);
        }
    });
    content.add(deleteOrgsCheckbox);

    CheckBox deleteAccountShadowsCheckbox = new CheckBox(ID_CHB_ACCOUNT_SHADOW,
            new PropertyModel<Boolean>(model, DeleteAllDto.F_ACC_SHADOW));
    deleteAccountShadowsCheckbox.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            updateLabelModel(target, ID_TEXT_ACC_SHADOWS);
        }
    });
    content.add(deleteAccountShadowsCheckbox);

    CheckBox deleteNonAccountShadowsCheckbox = new CheckBox(ID_CHB_NON_ACCOUNT_SHADOW,
            new PropertyModel<Boolean>(model, DeleteAllDto.F_NON_ACC_SHADOW));
    deleteNonAccountShadowsCheckbox.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            updateLabelModel(target, ID_TEXT_NON_ACC_SHADOW);
        }
    });
    content.add(deleteNonAccountShadowsCheckbox);

    Label usersLabel = new Label(ID_TEXT_USERS, new LoadableModel<String>() {
        @Override
        protected String load() {
            return createDeleteUsersMessage();
        }
    });
    usersLabel.setOutputMarkupId(true);
    content.add(usersLabel);

    Label orgsLabel = new Label(ID_TEXT_ORGS, new LoadableModel<String>() {
        @Override
        protected String load() {
            return createDeleteOrgUnitsMessage();
        }
    });
    orgsLabel.setOutputMarkupId(true);
    content.add(orgsLabel);

    Label accShadowsLabel = new Label(ID_TEXT_ACC_SHADOWS, new LoadableModel<String>() {
        @Override
        protected String load() {
            return createDeleteAccountShadowsMessage();
        }
    });
    accShadowsLabel.setOutputMarkupId(true);
    content.add(accShadowsLabel);

    Label nonAccShadowsLabel = new Label(ID_TEXT_NON_ACC_SHADOW, new LoadableModel<String>() {

        @Override
        protected String load() {
            return createDeleteNonAccountShadowsMessage();
        }
    });
    nonAccShadowsLabel.setOutputMarkupId(true);
    content.add(nonAccShadowsLabel);

    Label countLabel = new Label(ID_TOTAL, new LoadableModel<String>() {
        @Override
        protected String load() {
            return createTotalMessage();
        }
    });
    countLabel.setOutputMarkupId(true);
    content.add(countLabel);

    AjaxButton yesButton = new AjaxButton(ID_YES, new StringResourceModel("deleteAllDialog.yes", this, null)) {

        @Override
        public void onClick(AjaxRequestTarget target) {
            yesPerformed(target);
        }
    };
    content.add(yesButton);

    AjaxButton noButton = new AjaxButton(ID_NO, new StringResourceModel("deleteAllDialog.no", this, null)) {

        @Override
        public void onClick(AjaxRequestTarget target) {
            noPerformed(target);
        }
    };
    content.add(noButton);
}

From source file:com.evolveum.midpoint.web.component.input.RelationDropDownChoicePanel.java

License:Apache License

@Override
protected void onInitialize() {
    super.onInitialize();

    if (!allowNull && defaultRelation == null) {
        defaultRelation = supportedRelations.size() > 0 ? supportedRelations.get(0) : PrismConstants.Q_ANY;
    }/*from  www .ja  v a2s .c o  m*/
    DropDownFormGroup<QName> input = new DropDownFormGroup<QName>(ID_INPUT, Model.of(defaultRelation),
            new ListModel<>(supportedRelations), getRenderer(),
            createStringResource("relationDropDownChoicePanel.relation"),
            "relationDropDownChoicePanel.tooltip.relation", true, "col-md-4", "col-md-8", !allowNull);

    input.getInput().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
    input.getInput().add(new OnChangeAjaxBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            RelationDropDownChoicePanel.this.onValueChanged(target);
        }
    });
    add(input);

    setOutputMarkupId(true);
    setOutputMarkupPlaceholderTag(true);
}

From source file:com.evolveum.midpoint.web.page.admin.configuration.component.LoggingConfigPanel.java

License:Apache License

private void initRoot() {
    DropDownChoice<LoggingLevelType> rootLevel = new DropDownChoice<LoggingLevelType>(ID_ROOT_LEVEL,
            new PropertyModel<LoggingLevelType>(getModel(), LoggingDto.F_ROOT_LEVEL),
            WebMiscUtil.createReadonlyModelFromEnum(LoggingLevelType.class));

    add(rootLevel);//w  w  w .j a  v a2s  .  c o  m

    DropDownChoice<String> rootAppender = new DropDownChoice<String>(ID_ROOT_APPENDER,
            new PropertyModel<String>(getModel(), LoggingDto.F_ROOT_APPENDER), createAppendersListModel());
    rootAppender.setNullValid(true);
    rootAppender.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            rootAppenderChangePerformed(target);
        }
    });
    add(rootAppender);
}

From source file:com.evolveum.midpoint.web.page.admin.configuration.component.NotificationConfigPanel.java

License:Apache License

@Override
protected void initLayout() {
    TextField<String> defaultFromField = WebComponentUtil.createAjaxTextField(ID_DEFAULT_FROM,
            new PropertyModel<String>(getModel(), "defaultFrom"));

    CheckBox debugCheck = WebComponentUtil.createAjaxCheckBox(ID_DEBUG,
            new PropertyModel<Boolean>(getModel(), "debug"));

    DropDownChoice mailServerConfigChooser = new DropDownChoice<>(ID_MAIL_SERVER,
            new PropertyModel<MailServerConfigurationTypeDto>(getModel(),
                    NotificationConfigurationDto.F_SELECTED_SERVER),
            new AbstractReadOnlyModel<List<MailServerConfigurationTypeDto>>() {

                @Override/*from   w ww. ja  v  a2 s .c  o m*/
                public List<MailServerConfigurationTypeDto> getObject() {
                    return getModel().getObject().getServers();
                }
            }, new ChoiceableChoiceRenderer<MailServerConfigurationTypeDto>());
    mailServerConfigChooser.setNullValid(true);
    mailServerConfigChooser.add(new AjaxFormSubmitBehavior("click") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            getForm().onFormSubmitted();
        }
    });
    mailServerConfigChooser.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            preparePasswordFieldPlaceholder();
            target.add(NotificationConfigPanel.this);
        }
    });
    add(mailServerConfigChooser);

    Label serverConfigTooltip = new Label(ID_MAIL_SERVER_TOOLTIP);
    serverConfigTooltip.add(new InfoTooltipBehavior());
    add(serverConfigTooltip);

    WebMarkupContainer serverConfigContainer = new WebMarkupContainer(ID_MAIL_SERVER_CONFIG_CONTAINER);
    serverConfigContainer.setOutputMarkupId(true);
    serverConfigContainer.setOutputMarkupPlaceholderTag(true);
    serverConfigContainer.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            if (getModelObject() != null) {
                return getModelObject().getSelectedServer() != null;
            }

            return false;
        }
    });
    add(serverConfigContainer);

    TextField<String> hostField = WebComponentUtil.createAjaxTextField(ID_HOST,
            new PropertyModel<String>(getModel(), "selectedServer.host"));
    TextField<Integer> portField = WebComponentUtil.createAjaxTextField(ID_PORT,
            new PropertyModel<Integer>(getModel(), "selectedServer.port"));
    TextField<String> userNameField = WebComponentUtil.createAjaxTextField(ID_USERNAME,
            new PropertyModel<String>(getModel(), "selectedServer.username"));
    PasswordTextField passwordField = new PasswordTextField(ID_PASSWORD,
            new PropertyModel<String>(getModel(), "selectedServer.password"));
    passwordField.setRequired(false);
    passwordField.add(new EmptyOnChangeAjaxFormUpdatingBehavior());

    TextField<String> redirectToFileField = WebComponentUtil.createAjaxTextField(ID_REDIRECT_TO_FILE,
            new PropertyModel<String>(getModel(), "redirectToFile"));

    DropDownFormGroup transportSecurity = new DropDownFormGroup<>(ID_TRANSPORT_SECURITY,
            new PropertyModel<MailTransportSecurityType>(getModel(),
                    "selectedServer.mailTransportSecurityType"),
            WebComponentUtil.createReadonlyModelFromEnum(MailTransportSecurityType.class),
            new EnumChoiceRenderer<MailTransportSecurityType>(this),
            createStringResource("SystemConfigPanel.mail.transportSecurity"), ID_LABEL_SIZE, ID_INPUT_SIZE,
            false);
    // transportSecurity.add(new EmptyOnChangeAjaxFormUpdatingBehavior());

    serverConfigContainer.add(hostField);
    serverConfigContainer.add(portField);
    serverConfigContainer.add(userNameField);
    serverConfigContainer.add(passwordField);
    serverConfigContainer.add(transportSecurity);

    add(defaultFromField);
    add(debugCheck);
    add(redirectToFileField);

    AjaxSubmitLink buttonAddNewMailServerConfig = new AjaxSubmitLink(ID_BUTTON_ADD_NEW_MAIL_SERVER_CONFIG) {

        @Override
        protected void onSubmit(AjaxRequestTarget target, org.apache.wicket.markup.html.form.Form<?> form) {
            MailServerConfigurationTypeDto newConfig = new MailServerConfigurationTypeDto();
            newConfig.setHost(getString("SystemConfigPanel.mail.config.placeholder"));

            if (getModelObject() != null) {
                getModelObject().getServers().add(newConfig);
                getModelObject().setSelectedServer(newConfig);
            }

            preparePasswordFieldPlaceholder();
            target.add(NotificationConfigPanel.this, getPageBase().getFeedbackPanel());
        }

        @Override
        protected void onError(AjaxRequestTarget target, org.apache.wicket.markup.html.form.Form<?> form) {
            target.add(getPageBase().getFeedbackPanel());
        }
    };
    add(buttonAddNewMailServerConfig);

    AjaxSubmitLink removeMailServerConfig = new AjaxSubmitLink(ID_BUTTON_REMOVE_MAIL_SERVER_CONFIG) {

        @Override
        protected void onSubmit(AjaxRequestTarget target, org.apache.wicket.markup.html.form.Form<?> form) {
            if (getModelObject() != null) {
                NotificationConfigurationDto notificationConfig = getModelObject();

                MailServerConfigurationTypeDto selected = notificationConfig.getSelectedServer();

                if (notificationConfig.getServers().contains(selected)) {
                    notificationConfig.getServers().remove(selected);
                    notificationConfig.setSelectedServer(null);
                } else {
                    warn(getString("SystemConfigPanel.mail.server.remove.warn"));
                }

                target.add(NotificationConfigPanel.this, getPageBase().getFeedbackPanel());
            }
        }

        @Override
        protected void onError(AjaxRequestTarget target, org.apache.wicket.markup.html.form.Form<?> form) {
            target.add(getPageBase().getFeedbackPanel());
        }
    };
    removeMailServerConfig.add(new AttributeAppender("class", new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (getModelObject() != null && getModelObject().getSelectedServer() != null) {
                return null;
            } else {
                return " disabled";
            }
        }
    }));
    add(removeMailServerConfig);

}