Example usage for org.apache.wicket.markup.html.basic Label getDefaultModelObjectAsString

List of usage examples for org.apache.wicket.markup.html.basic Label getDefaultModelObjectAsString

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.basic Label getDefaultModelObjectAsString.

Prototype

public final String getDefaultModelObjectAsString() 

Source Link

Document

Gets a model object as a string.

Usage

From source file:by.parfen.disptaxi.webapp.etc.ChoicePage.java

License:Apache License

/**
 * Constructor.//from  w w w .ja va  2s. c o  m
 */
public ChoicePage() {
    final City city = cityService.get(15L);
    List<Street> streetsList;
    streetsList = streetService.getAllByCity(city);
    for (Street streetItem : streetsList) {
        List<Point> pointsList = pointService.getAllByStreet(streetItem);
        List<String> pointNames = new ArrayList<String>();
        for (Point pointItem : pointsList) {
            pointNames.add(pointItem.getName());
        }
        pointsMap.put(streetItem.getName(), pointNames);
    }
    // pointsMap.put("", Arrays.asList("12", "22", "34"));
    // pointsMap.put("", Arrays.asList("2", "4", "45", "13", "78"));
    // pointsMap.put("", Arrays.asList("10", "12", "22", "4", "6"));

    IModel<List<? extends String>> makeChoices = new AbstractReadOnlyModel<List<? extends String>>() {
        @Override
        public List<String> getObject() {
            return new ArrayList<String>(pointsMap.keySet());
        }

    };

    IModel<List<? extends String>> modelChoices = new AbstractReadOnlyModel<List<? extends String>>() {
        @Override
        public List<String> getObject() {
            List<String> points = pointsMap.get(selectedStreetName);
            if (points == null) {
                points = Collections.emptyList();
            }
            return points;
        }

    };

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

    final DropDownChoice<String> streets = new DropDownChoice<String>("streets",
            new PropertyModel<String>(this, "selectedStreetName"), makeChoices);

    final DropDownChoice<String> points = new DropDownChoice<String>("points", new Model<String>(),
            modelChoices);
    points.setOutputMarkupId(true);

    form.add(streets);
    form.add(points);

    final FeedbackPanel feedback = new FeedbackPanel("feedback");
    feedback.setOutputMarkupId(true);
    add(feedback);

    form.add(new AjaxButton("go") {
        @Override
        protected void onAfterSubmit(AjaxRequestTarget target, Form<?> form) {
            super.onAfterSubmit(target, form);
            info(" : " + streets.getModelObject() + " "
                    + points.getModelObject());
            target.add(feedback);
        }
    });

    streets.add(new AjaxFormComponentUpdatingBehavior("change") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.add(points);
        }
    });

    Form<Void> ajaxForm = new Form<Void>("ajaxForm");
    add(ajaxForm);

    final AutoCompleteTextField<String> field = new AutoCompleteTextField<String>("ac", new Model<String>("")) {
        @Override
        protected Iterator<String> getChoices(String input) {
            if (Strings.isEmpty(input)) {
                List<String> emptyList = Collections.emptyList();
                return emptyList.iterator();
            }

            List<String> choices = new ArrayList<String>(10);

            List<Street> streetsList = streetService.getAllByCity(city);

            for (final Street streetItem : streetsList) {
                final String streetName = streetItem.getName();

                if (streetName.toUpperCase().startsWith(input.toUpperCase())) {
                    choices.add(streetName);
                    if (choices.size() == 10) {
                        break;
                    }
                }
            }

            return choices.iterator();
        }
    };

    ajaxForm.add(field);

    final Label label = new Label("selectedValue", field.getDefaultModel());
    label.setOutputMarkupId(true);
    ajaxForm.add(label);

    field.add(new AjaxFormSubmitBehavior(ajaxForm, "onchange") {
        @Override
        protected void onSubmit(AjaxRequestTarget target) {
            target.add(label);
            List<Street> streetList = streetService.getAllByCityAndName(city,
                    label.getDefaultModelObjectAsString());
            if (streetList.size() == 1) {
                setSelectedStreet(streetList.get(0));
            }
        }

        @Override
        protected void onError(AjaxRequestTarget target) {
        }
    });
}

From source file:com.francetelecom.clara.cloud.presentation.designer.EditServiceIT.java

License:Apache License

@Test
public void testEditReadOnly() {

    try {/*  ww w  . j  a  v  a 2 s . c o  m*/
        ApplicationRelease release = manageApplicationRelease.findApplicationReleaseByUID(
                myTester.getLastRenderedPage().getPageParameters().get("releaseUid").toString());
        release.validate();
        release.lock();
        manageApplicationRelease.updateApplicationRelease(release);
    } catch (ObjectNotFoundException e) {
        Assert.fail("could not find application release with id "
                + myTester.getLastRenderedPage().getPageParameters().get("releaseUid").toString());
    }

    // go on designer step one page to access internal services
    NavigationUtils.goOnDesignerPage(myTester, releaseUid);
    myTester.assertRenderedPage(DesignerPage.class);
    for (final LogicalService service : logicalDeployment.listLogicalServices()) {
        // When: I try to edit the service

        int index = GetObjectsUtils.getPositionForItem(myTester, service);
        Assert.assertFalse("service not found in architecture matrix", -1 == index);
        myTester.assertVisible(NavigationUtils.getPathForCell(index, 0) + ":cell-view");
        DeleteEditObjects.viewServiceAtRow(myTester, index);
        myTester.assertVisible(NavigationUtils.modalPath);
        // Then: all displayed fields are read-only
        Form form = GetObjectsUtils.getModalParamsForm(myTester);

        form.visitFormComponents(new IVisitor<FormComponent, Void>() {
            @Override
            public void component(FormComponent formComponent, IVisit<Void> visit) {
                if (!(formComponent instanceof Button)) {
                    TagTester tagTester = myTester.getTagByWicketId(((FormComponent) formComponent).getId());
                    if (tagTester != null) {
                        Assert.assertNotNull(tagTester.getAttribute("disabled"));
                    }
                } else {
                    if ("addUpdateButton".equals(((Button) formComponent).getId())) {
                        Assert.assertFalse("add/update button should not be visible",
                                ((Button) formComponent).isVisible());
                    } else if ("cancelCloseButton".equals(((Button) formComponent).getId())) {
                        Label buttonLabel = (Label) ((FormComponent) formComponent).get("cancelLabel");
                        Assert.assertTrue("cancel/close button should display \"close\"",
                                "close".equals(buttonLabel.getDefaultModelObjectAsString()));
                    }
                }
                visit.dontGoDeeper();
            }
        });
    }
    for (final ProcessingNode node : logicalDeployment.listProcessingNodes()) {
        // When: I try to edit the node

        int index = GetObjectsUtils.getPositionForItem(myTester, node);
        Assert.assertFalse("node not found in architecture matrix", -1 == index);
        myTester.assertVisible(NavigationUtils.getPathForCell(0, index) + ":cell-view");
        DeleteEditObjects.viewNodeAtCol(myTester, index);
        myTester.assertVisible(NavigationUtils.modalPath);
        // Then: all displayed fields are read-only
        Form form = GetObjectsUtils.getModalParamsForm(myTester);
        form.visitFormComponents(new IVisitor<FormComponent, Void>() {
            @Override
            public void component(FormComponent object, IVisit<Void> visit) {
                if (!(object instanceof Button)) {
                    // Assert.assertFalse(((FormComponent)formComponent).getInputName()
                    // + " should be disabled",
                    // ((FormComponent)formComponent).isEnabled());
                }
                visit.dontGoDeeper();
            }
        });
    }
}

From source file:com.koodaripalvelut.common.wicket.webtest.openid.InfoPage.java

License:Open Source License

public InfoPage() {
    add(new AjaxLazyLoadPanel(SIGNIN_PANEL_ID) {

        private static final long serialVersionUID = 1L;

        @Override//w  ww .ja va  2 s  . co  m
        public Component getLazyLoadComponent(final String markupId) {
            return new OpenIDPanel(markupId);
        }

        @Override
        public Component getLoadingComponent(final String markupId) {
            final Label label = (Label) super.getLoadingComponent(markupId);
            final StringBuilder sb = new StringBuilder(label.getDefaultModelObjectAsString());
            sb.append("<div>");
            sb.append(InfoPage.this.getString("loadingMesssage"));
            sb.append("</div>");
            label.setDefaultModel(Model.of(sb.toString()));
            return label;
        }
    });
}

From source file:eu.uqasar.web.pages.qmtree.metric.panels.MetricViewPanel.java

License:Apache License

private IModel<?> replaceBracketsModel(Label label) {
    return Model.of(label.getDefaultModelObjectAsString().replace("[", "").replace("]", ""));
}

From source file:org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2.java

License:Apache License

protected Label createScalarName(final String id, final String labelCaption) {
    final Label scalarName = new Label(id, labelCaption);
    if (getModel().isRequired()) {
        final String label = scalarName.getDefaultModelObjectAsString();
        if (!Strings.isNullOrEmpty(label)) {
            scalarName.add(new CssClassAppender("mandatory"));
        }/* w  w w .j av a2 s  .  c o  m*/
    }
    NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
    if (namedFacet != null) {
        scalarName.setEscapeModelStrings(namedFacet.escaped());
    }
    return scalarName;
}

From source file:org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldAbstract.java

License:Apache License

@Override
protected MarkupContainer addComponentForRegular() {
    textField = createTextFieldForRegular();
    textField.setOutputMarkupId(true);//from   w w  w . j  ava2  s  .  c o m

    addStandardSemantics();
    addSemantics();

    final MarkupContainer labelIfRegular = createFormComponentLabel();
    scalarTypeContainer.add(labelIfRegular);

    final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(textField));
    NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
    if (namedFacet != null) {
        scalarName.setEscapeModelStrings(namedFacet.escaped());
    }

    // find the links...

    final List<LinkAndLabel> entityActions = EntityActionUtil
            .getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());

    addPositioningCssTo(labelIfRegular, entityActions);

    if (getModel().isRequired()) {
        final String label = scalarName.getDefaultModelObjectAsString();
        if (!Strings.isNullOrEmpty(label)) {
            scalarName.add(new CssClassAppender("mandatory"));
        }
    }

    labelIfRegular.add(scalarName);

    final String describedAs = getModel().getDescribedAs();
    if (describedAs != null) {
        labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
    }

    addFeedbackTo(labelIfRegular, textField);

    // ... add entity links to panel (below and to right)
    addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);

    return labelIfRegular;
}

From source file:org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2Panel.java

License:Apache License

@Override
protected MarkupContainer addComponentForRegular() {

    // same pattern as in ReferencePanel
    if (select2 == null) {
        if (getModel().isCollection()) {
            final IModel<ArrayList<ObjectAdapterMemento>> modelObject = ScalarModelWithMultiPending.Util
                    .createModel(this);
            select2 = Select2.newSelect2MultiChoice(ID_SCALAR_VALUE, modelObject, scalarModel);
        } else {//from www  .j  av  a  2 s  .  c  o  m
            final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
            select2 = Select2.newSelect2Choice(ID_SCALAR_VALUE, modelObject, scalarModel);
        }

        final ObjectAdapter[] actionArgsHint = scalarModel.getActionArgsHint();
        setProviderAndCurrAndPending(select2, actionArgsHint);
        addStandardSemantics();
    } else {
        select2.clearInput();
    }

    final MarkupContainer labelIfRegular = createFormComponentLabel();
    if (getModel().isRequired()) {
        labelIfRegular.add(new CssClassAppender("mandatory"));
    }

    addOrReplace(labelIfRegular);

    final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2.component()));
    if (getModel().isRequired()) {
        final String label = scalarName.getDefaultModelObjectAsString();
        if (!Strings.isNullOrEmpty(label)) {
            scalarName.add(new CssClassAppender("mandatory"));
        }
    }
    labelIfRegular.addOrReplace(scalarName);
    NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
    if (namedFacet != null) {
        scalarName.setEscapeModelStrings(namedFacet.escaped());
    }

    // find the links...
    final List<LinkAndLabel> entityActions = EntityActionUtil
            .getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());

    addPositioningCssTo(labelIfRegular, entityActions);

    addFeedbackOnlyTo(labelIfRegular, select2.component());
    addEditPropertyTo(labelIfRegular);

    // ... add entity links to panel (below and to right)
    addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);

    return labelIfRegular;
}

From source file:org.apache.isis.viewer.wicket.ui.components.widgets.valuechoices.ValueChoicesSelect2Panel.java

License:Apache License

@Override
protected MarkupContainer addComponentForRegular() {

    final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
    final ObjectAdapter[] actionArgsHint = getScalarModel().getActionArgsHint();

    // same pattern as in EntityLinkSelect2Panel
    if (select2Field == null) {
        select2Field = Select2ChoiceUtil.newSelect2Choice(ID_SCALAR_VALUE, modelObject, getScalarModel());
        setChoices(actionArgsHint);/*from   ww w  .  j av a2s. c o m*/
        addStandardSemantics();
    } else {
        select2Field.clearInput();
    }

    final MarkupContainer labelIfRegular = createFormComponentLabel();
    if (getModel().isRequired()) {
        labelIfRegular.add(new CssClassAppender("mandatory"));
    }

    addOrReplace(labelIfRegular);

    final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2Field));
    if (getModel().isRequired()) {
        final String label = scalarName.getDefaultModelObjectAsString();
        if (!Strings.isNullOrEmpty(label)) {
            scalarName.add(new CssClassAppender("mandatory"));
        }
    }
    labelIfRegular.addOrReplace(scalarName);
    NamedFacet namedFacet = getModel().getFacet(NamedFacet.class);
    if (namedFacet != null) {
        scalarName.setEscapeModelStrings(namedFacet.escaped());
    }

    // find the links...
    final List<LinkAndLabel> entityActions = EntityActionUtil
            .getEntityActionLinksForAssociation(this.scalarModel, getDeploymentType());

    addPositioningCssTo(labelIfRegular, entityActions);

    addFeedbackTo(labelIfRegular, select2Field);

    // ... add entity links to panel (below and to right)
    addEntityActionLinksBelowAndRight(labelIfRegular, entityActions);

    return labelIfRegular;
}

From source file:org.apache.syncope.client.console.pages.ApprovalModalPage.java

License:Apache License

public ApprovalModalPage(final PageReference pageRef, final ModalWindow window, final WorkflowFormTO formTO) {
    super();/*from  www  .j a v a  2  s  .  com*/

    IModel<List<WorkflowFormPropertyTO>> formProps = new LoadableDetachableModel<List<WorkflowFormPropertyTO>>() {

        private static final long serialVersionUID = 3169142472626817508L;

        @Override
        protected List<WorkflowFormPropertyTO> load() {
            return formTO.getProperties();
        }
    };

    final ListView<WorkflowFormPropertyTO> propView = new AltListView<WorkflowFormPropertyTO>("propView",
            formProps) {

        private static final long serialVersionUID = 9101744072914090143L;

        @Override
        @SuppressWarnings({ "unchecked", "rawtypes" })
        protected void populateItem(final ListItem<WorkflowFormPropertyTO> item) {
            final WorkflowFormPropertyTO prop = item.getModelObject();

            Label label = new Label("key", prop.getName() == null ? prop.getId() : prop.getName());
            item.add(label);

            FieldPanel field;
            switch (prop.getType()) {
            case Boolean:
                field = new AjaxDropDownChoicePanel("value", label.getDefaultModelObjectAsString(),
                        new Model<Boolean>(Boolean.valueOf(prop.getValue())))
                                .setChoices(Arrays.asList(new String[] { "Yes", "No" }));
                break;

            case Date:
                SimpleDateFormat df = StringUtils.isNotBlank(prop.getDatePattern())
                        ? new SimpleDateFormat(prop.getDatePattern())
                        : new SimpleDateFormat();
                Date parsedDate = null;
                if (StringUtils.isNotBlank(prop.getValue())) {
                    try {
                        parsedDate = df.parse(prop.getValue());
                    } catch (ParseException e) {
                        LOG.error("Unparsable date: {}", prop.getValue(), e);
                    }
                }

                field = new DateTimeFieldPanel("value", label.getDefaultModelObjectAsString(),
                        new Model<Date>(parsedDate), df.toLocalizedPattern());
                break;

            case Enum:
                MapChoiceRenderer<String, String> enumCR = new MapChoiceRenderer<String, String>(
                        prop.getEnumValues());

                field = new AjaxDropDownChoicePanel("value", label.getDefaultModelObjectAsString(),
                        new Model(prop.getValue())).setChoiceRenderer(enumCR).setChoices(new Model() {

                            private static final long serialVersionUID = -858521070366432018L;

                            @Override
                            public Serializable getObject() {
                                return new ArrayList<String>(prop.getEnumValues().keySet());
                            }
                        });
                break;

            case Long:
                field = new SpinnerFieldPanel<Long>("value", label.getDefaultModelObjectAsString(), Long.class,
                        new Model<Long>(NumberUtils.toLong(prop.getValue())), null, null);
                break;

            case String:
            default:
                field = new AjaxTextFieldPanel("value", PARENT_PATH, new Model<String>(prop.getValue()));
                break;
            }

            field.setReadOnly(!prop.isWritable());
            if (prop.isRequired()) {
                field.addRequiredLabel();
            }

            item.add(field);
        }
    };

    final AjaxButton userDetails = new IndicatingAjaxButton("userDetails",
            new Model<String>(getString("userDetails"))) {

        private static final long serialVersionUID = -4804368561204623354L;

        @Override
        protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
            editUserWin.setPageCreator(new ModalWindow.PageCreator() {

                private static final long serialVersionUID = -7834632442532690940L;

                @Override
                public Page createPage() {
                    return new ViewUserModalPage(ApprovalModalPage.this.getPageReference(), editUserWin,
                            userRestClient.read(formTO.getUserKey())) {

                        private static final long serialVersionUID = -2819994749866481607L;

                        @Override
                        protected void closeAction(final AjaxRequestTarget target, final Form form) {
                            setResponsePage(ApprovalModalPage.this);
                        }
                    };
                }
            });

            editUserWin.show(target);
        }
    };
    MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE,
            xmlRolesReader.getEntitlement("Users", "read"));

    final AjaxButton submit = new IndicatingAjaxButton(APPLY, new Model<String>(getString(SUBMIT))) {

        private static final long serialVersionUID = -958724007591692537L;

        @Override
        protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {

            Map<String, WorkflowFormPropertyTO> props = formTO.getPropertyMap();

            for (int i = 0; i < propView.size(); i++) {
                @SuppressWarnings("unchecked")
                ListItem<WorkflowFormPropertyTO> item = (ListItem<WorkflowFormPropertyTO>) propView.get(i);
                String input = ((FieldPanel) item.get("value")).getField().getInput();

                if (!props.containsKey(item.getModelObject().getId())) {
                    props.put(item.getModelObject().getId(), new WorkflowFormPropertyTO());
                }

                if (item.getModelObject().isWritable()) {
                    switch (item.getModelObject().getType()) {
                    case Boolean:
                        props.get(item.getModelObject().getId()).setValue(String.valueOf("0".equals(input)));
                        break;

                    case Date:
                    case Enum:
                    case String:
                    case Long:
                    default:
                        props.get(item.getModelObject().getId()).setValue(input);
                        break;
                    }
                }
            }

            formTO.getProperties().clear();
            formTO.getProperties().addAll(props.values());
            try {
                restClient.submitForm(formTO);

                ((Todo) pageRef.getPage()).setModalResult(true);
                window.close(target);
            } catch (SyncopeClientException e) {
                error(getString(Constants.ERROR) + ": " + e.getMessage());
                LOG.error("While submitting form {}", formTO, e);
                feedbackPanel.refresh(target);
            }
        }

        @Override
        protected void onError(final AjaxRequestTarget target, final Form<?> form) {
            feedbackPanel.refresh(target);
        }
    };

    final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) {

        private static final long serialVersionUID = -958724007591692537L;

        @Override
        protected void onSubmit(final AjaxRequestTarget target, final Form form) {
            window.close(target);
        }

        @Override
        protected void onError(final AjaxRequestTarget target, final Form form) {
            // nothing
        }
    };

    cancel.setDefaultFormProcessing(false);

    Form form = new Form(FORM);
    form.add(propView);
    form.add(userDetails);
    form.add(submit);
    form.add(cancel);

    MetaDataRoleAuthorizationStrategy.authorize(form, ENABLE,
            xmlRolesReader.getEntitlement("Approval", SUBMIT));

    editUserWin = new ModalWindow("editUserWin");
    editUserWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
    editUserWin.setInitialHeight(USER_WIN_HEIGHT);
    editUserWin.setInitialWidth(USER_WIN_WIDTH);
    editUserWin.setCookieName("edit-user-modal");
    add(editUserWin);

    add(form);
}

From source file:org.apache.syncope.console.pages.ApprovalModalPage.java

License:Apache License

public ApprovalModalPage(final PageReference pageRef, final ModalWindow window, final WorkflowFormTO formTO) {
    super();//  ww  w .  j a v a  2s.com

    IModel<List<WorkflowFormPropertyTO>> formProps = new LoadableDetachableModel<List<WorkflowFormPropertyTO>>() {

        private static final long serialVersionUID = 3169142472626817508L;

        @Override
        protected List<WorkflowFormPropertyTO> load() {
            return formTO.getProperties();
        }
    };

    final ListView<WorkflowFormPropertyTO> propView = new AltListView<WorkflowFormPropertyTO>("propView",
            formProps) {

        private static final long serialVersionUID = 9101744072914090143L;

        @Override
        @SuppressWarnings({ "unchecked", "rawtypes" })
        protected void populateItem(final ListItem<WorkflowFormPropertyTO> item) {
            final WorkflowFormPropertyTO prop = item.getModelObject();

            Label label = new Label("key", prop.getName() == null ? prop.getId() : prop.getName());
            item.add(label);

            FieldPanel field;
            switch (prop.getType()) {
            case Boolean:
                field = new AjaxDropDownChoicePanel("value", label.getDefaultModelObjectAsString(),
                        new Model<Boolean>(Boolean.valueOf(prop.getValue())))
                                .setChoices(Arrays.asList(new String[] { "Yes", "No" }));
                break;

            case Date:
                SimpleDateFormat df = StringUtils.isNotBlank(prop.getDatePattern())
                        ? new SimpleDateFormat(prop.getDatePattern())
                        : new SimpleDateFormat();
                Date parsedDate = null;
                if (StringUtils.isNotBlank(prop.getValue())) {
                    try {
                        parsedDate = df.parse(prop.getValue());
                    } catch (ParseException e) {
                        LOG.error("Unparsable date: {}", prop.getValue(), e);
                    }
                }

                field = new DateTimeFieldPanel("value", label.getDefaultModelObjectAsString(),
                        new Model<Date>(parsedDate), df.toLocalizedPattern());
                break;

            case Enum:
                MapChoiceRenderer<String, String> enumCR = new MapChoiceRenderer<String, String>(
                        prop.getEnumValues());

                field = new AjaxDropDownChoicePanel("value", label.getDefaultModelObjectAsString(),
                        new Model(prop.getValue())).setChoiceRenderer(enumCR).setChoices(new Model() {

                            private static final long serialVersionUID = -858521070366432018L;

                            @Override
                            public Serializable getObject() {
                                return new ArrayList<String>(prop.getEnumValues().keySet());
                            }
                        });
                break;

            case Long:
                field = new SpinnerFieldPanel<Long>("value", label.getDefaultModelObjectAsString(), Long.class,
                        new Model<Long>(NumberUtils.toLong(prop.getValue())), null, null);
                break;

            case String:
            default:
                field = new AjaxTextFieldPanel("value", PARENT_PATH, new Model<String>(prop.getValue()));
                break;
            }

            field.setReadOnly(!prop.isWritable());
            if (prop.isRequired()) {
                field.addRequiredLabel();
            }

            item.add(field);
        }
    };

    final AjaxButton userDetails = new IndicatingAjaxButton("userDetails",
            new Model<String>(getString("userDetails"))) {

        private static final long serialVersionUID = -4804368561204623354L;

        @Override
        protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
            editUserWin.setPageCreator(new ModalWindow.PageCreator() {

                private static final long serialVersionUID = -7834632442532690940L;

                @Override
                public Page createPage() {
                    return new ViewUserModalPage(ApprovalModalPage.this.getPageReference(), editUserWin,
                            userRestClient.read(formTO.getUserId())) {

                        private static final long serialVersionUID = -2819994749866481607L;

                        @Override
                        protected void closeAction(final AjaxRequestTarget target, final Form form) {
                            setResponsePage(ApprovalModalPage.this);
                        }
                    };
                }
            });

            editUserWin.show(target);
        }
    };
    MetaDataRoleAuthorizationStrategy.authorize(userDetails, ENABLE,
            xmlRolesReader.getAllAllowedRoles("Users", "read"));

    final AjaxButton submit = new IndicatingAjaxButton(APPLY, new Model<String>(getString(SUBMIT))) {

        private static final long serialVersionUID = -958724007591692537L;

        @Override
        protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {

            Map<String, WorkflowFormPropertyTO> props = formTO.getPropertyMap();

            for (int i = 0; i < propView.size(); i++) {
                @SuppressWarnings("unchecked")
                ListItem<WorkflowFormPropertyTO> item = (ListItem<WorkflowFormPropertyTO>) propView.get(i);
                String input = ((FieldPanel) item.get("value")).getField().getInput();

                if (!props.containsKey(item.getModelObject().getId())) {
                    props.put(item.getModelObject().getId(), new WorkflowFormPropertyTO());
                }

                if (item.getModelObject().isWritable()) {
                    switch (item.getModelObject().getType()) {
                    case Boolean:
                        props.get(item.getModelObject().getId()).setValue(String.valueOf("0".equals(input)));
                        break;

                    case Date:
                    case Enum:
                    case String:
                    case Long:
                    default:
                        props.get(item.getModelObject().getId()).setValue(input);
                        break;
                    }
                }
            }

            formTO.setProperties(props.values());
            try {
                restClient.submitForm(formTO);

                ((Todo) pageRef.getPage()).setModalResult(true);
                window.close(target);
            } catch (SyncopeClientException e) {
                error(getString(Constants.ERROR) + ": " + e.getMessage());
                LOG.error("While submitting form {}", formTO, e);
                feedbackPanel.refresh(target);
            }
        }

        @Override
        protected void onError(final AjaxRequestTarget target, final Form<?> form) {
            feedbackPanel.refresh(target);
        }
    };

    final AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) {

        private static final long serialVersionUID = -958724007591692537L;

        @Override
        protected void onSubmit(final AjaxRequestTarget target, final Form form) {
            window.close(target);
        }

        @Override
        protected void onError(final AjaxRequestTarget target, final Form form) {
            // nothing
        }
    };

    cancel.setDefaultFormProcessing(false);

    Form form = new Form(FORM);
    form.add(propView);
    form.add(userDetails);
    form.add(submit);
    form.add(cancel);

    MetaDataRoleAuthorizationStrategy.authorize(form, ENABLE,
            xmlRolesReader.getAllAllowedRoles("Approval", SUBMIT));

    editUserWin = new ModalWindow("editUserWin");
    editUserWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
    editUserWin.setInitialHeight(USER_WIN_HEIGHT);
    editUserWin.setInitialWidth(USER_WIN_WIDTH);
    editUserWin.setCookieName("edit-user-modal");
    add(editUserWin);

    add(form);
}