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

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

Introduction

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

Prototype

public AjaxFormChoiceComponentUpdatingBehavior() 

Source Link

Document

Construct.

Usage

From source file:com.doculibre.constellio.wicket.panels.admin.collection.AddEditCollectionPanel.java

License:Open Source License

public AddEditCollectionPanel(String id, RecordCollection collection) {
    super(id, false);
    this.collectionModel = new ReloadableEntityModel<RecordCollection>(collection);
    edit = collection.getId() != null;//w  ww  .  ja  v  a2  s  .  com

    final Form form = getForm();
    form.setModel(new CompoundPropertyModel(collectionModel));
    form.add(new SetFocusBehavior(form));

    TextField nameField = new RequiredTextField("name");
    form.add(nameField);
    nameField.setEnabled(collection.getId() == null);
    nameField.setOutputMarkupId(true);
    nameField.add(new StringValidator.MaximumLengthValidator(50));
    nameField.add(new PatternValidator(ConstellioNameUtils.NAME_PATTERN));
    nameField.add(new DuplicateItemValidator() {
        @Override
        protected boolean isDuplicate(Object value) {
            RecordCollectionServices collectionServices = ConstellioSpringUtils.getRecordCollectionServices();
            return collectionServices.get((String) value) != null;
        }
    });

    TextField openSearchURL = new TextField("openSearchURL");
    form.add(openSearchURL);

    final WebMarkupContainer titleContainer = new WebMarkupContainer("titleContainer");
    form.add(titleContainer);
    titleContainer.setOutputMarkupId(true);

    MultiLocaleComponentHolder titleHolder = new MultiLocaleComponentHolder("title", collectionModel,
            new PropertyModel(collectionModel, "locales")) {
        @Override
        protected void onPopulateItem(ListItem item, IModel componentModel, Locale locale) {
            TextField titleLocaleField = new RequiredTextField("titleField", componentModel);
            item.add(titleLocaleField);
            titleLocaleField.setOutputMarkupId(true);
            titleLocaleField.add(new StringValidator.MaximumLengthValidator(255));
            item.add(new LocaleNameLabel("localeName", locale, true) {
                @Override
                public boolean isVisible() {
                    return collectionModel.getObject().getLocales().size() > 1;
                }
            });
        }
    };
    titleContainer.add(titleHolder);

    final WebMarkupContainer descriptionContainer = new WebMarkupContainer("descriptionContainer");
    form.add(descriptionContainer);
    descriptionContainer.setOutputMarkupId(true);

    MultiLocaleComponentHolder descriptionHolder = new MultiLocaleComponentHolder("description",
            collectionModel, new PropertyModel(collectionModel, "locales")) {
        @Override
        protected void onPopulateItem(ListItem item, IModel componentModel, Locale locale) {
            TextArea descriptionLocaleField = new TextArea("descriptionLocale", componentModel);
            item.add(descriptionLocaleField);
            descriptionLocaleField.setOutputMarkupId(true);
            item.add(descriptionLocaleField);
            item.add(new LocaleNameLabel("localeName", locale, true) {
                @Override
                public boolean isVisible() {
                    return collectionModel.getObject().getLocales().size() > 1;
                }
            });
        }
    };
    descriptionContainer.add(descriptionHolder);

    List<Locale> supportedLocales = ConstellioSpringUtils.getSupportedLocales();
    if (collection.getId() == null) {
        collection.setLocales(new HashSet<Locale>(supportedLocales));
    }

    CheckGroup localesCheckGroup = new CheckGroup("localesCheckGroup",
            new PropertyModel(collectionModel, "locales"));
    form.add(localesCheckGroup);
    localesCheckGroup.setOutputMarkupId(true);
    localesCheckGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.addComponent(titleContainer);
            target.addComponent(descriptionContainer);
        }
    });

    final Map<Locale, Check> localeChecks = new HashMap<Locale, Check>();
    localesCheckGroup.add(new ListView("locales", supportedLocales) {
        @Override
        protected void populateItem(ListItem item) {
            final Locale locale = (Locale) item.getModelObject();
            Check localeCheck = localeChecks.get(locale);
            if (localeCheck == null) {
                localeCheck = new Check("localeCheck", new Model(locale));
                localeChecks.put(locale, localeCheck);
            }
            item.add(localeCheck);
            item.add(new LocaleNameLabel("localeName", locale));
        }
    });

    CheckBox publicCollectionCheck = new CheckBox("publicCollection");
    form.add(publicCollectionCheck);
}

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

License:Apache License

private void initLayout() {
    Form mainForm = new Form(ID_MAIN_FORM);
    add(mainForm);/*from w w  w.  ja  va2  s.  c o  m*/

    ImportOptionsPanel importOptions = new ImportOptionsPanel(ID_IMPORT_OPTIONS, model);
    mainForm.add(importOptions);

    final WebMarkupContainer input = new WebMarkupContainer(ID_INPUT);
    input.setOutputMarkupId(true);
    mainForm.add(input);

    final WebMarkupContainer buttonBar = new WebMarkupContainer(ID_BUTTON_BAR);
    buttonBar.setOutputMarkupId(true);
    mainForm.add(buttonBar);

    final IModel<Integer> groupModel = new Model<Integer>(INPUT_FILE);
    RadioGroup importRadioGroup = new RadioGroup(ID_IMPORT_RADIO_GROUP, groupModel);
    importRadioGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.add(input);
            target.add(buttonBar);
        }
    });
    mainForm.add(importRadioGroup);

    Radio fileRadio = new Radio(ID_FILE_RADIO, new Model(INPUT_FILE), importRadioGroup);
    importRadioGroup.add(fileRadio);

    Radio xmlRadio = new Radio(ID_XML_RADIO, new Model(INPUT_XML), importRadioGroup);
    importRadioGroup.add(xmlRadio);

    WebMarkupContainer inputAce = new WebMarkupContainer(ID_INPUT_ACE);
    addVisibileForInputType(inputAce, INPUT_XML, groupModel);
    input.add(inputAce);

    AceEditor aceEditor = new AceEditor(ID_ACE_EDITOR, xmlEditorModel);
    aceEditor.setOutputMarkupId(true);
    inputAce.add(aceEditor);

    WebMarkupContainer inputFileLabel = new WebMarkupContainer(ID_INPUT_FILE_LABEL);
    addVisibileForInputType(inputFileLabel, INPUT_FILE, groupModel);
    input.add(inputFileLabel);

    WebMarkupContainer inputFile = new WebMarkupContainer(ID_INPUT_FILE);
    addVisibileForInputType(inputFile, INPUT_FILE, groupModel);
    input.add(inputFile);

    FileUploadField fileInput = new FileUploadField(ID_FILE_INPUT);
    inputFile.add(fileInput);

    initButtons(buttonBar, groupModel);
}

From source file:com.evolveum.midpoint.web.page.admin.reports.PageNewReport.java

License:Apache License

private void initLayout() {
    Form mainForm = new Form(ID_MAIN_FORM);
    add(mainForm);//from   ww w .jav  a 2s  .  c  om

    final WebMarkupContainer input = new WebMarkupContainer(ID_INPUT);
    input.setOutputMarkupId(true);
    mainForm.add(input);

    final WebMarkupContainer buttonBar = new WebMarkupContainer(ID_BUTTON_BAR);
    buttonBar.setOutputMarkupId(true);
    mainForm.add(buttonBar);

    final IModel<Integer> groupModel = new Model<Integer>(INPUT_FILE);
    RadioGroup importRadioGroup = new RadioGroup(ID_IMPORT_RADIO_GROUP, groupModel);
    importRadioGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.add(input);
            target.add(buttonBar);
        }
    });
    mainForm.add(importRadioGroup);

    Radio fileRadio = new Radio(ID_FILE_RADIO, new Model(INPUT_FILE), importRadioGroup);
    importRadioGroup.add(fileRadio);

    Radio xmlRadio = new Radio(ID_XML_RADIO, new Model(INPUT_XML), importRadioGroup);
    importRadioGroup.add(xmlRadio);

    WebMarkupContainer inputAce = new WebMarkupContainer(ID_INPUT_ACE);
    addVisibileForInputType(inputAce, INPUT_XML, groupModel);
    input.add(inputAce);

    AceEditor aceEditor = new AceEditor(ID_ACE_EDITOR, xmlEditorModel);
    aceEditor.setOutputMarkupId(true);
    inputAce.add(aceEditor);

    WebMarkupContainer inputFileLabel = new WebMarkupContainer(ID_INPUT_FILE_LABEL);
    addVisibileForInputType(inputFileLabel, INPUT_FILE, groupModel);
    input.add(inputFileLabel);

    WebMarkupContainer inputFile = new WebMarkupContainer(ID_INPUT_FILE);
    addVisibileForInputType(inputFile, INPUT_FILE, groupModel);
    input.add(inputFile);

    FileUploadField fileInput = new FileUploadField(ID_FILE_INPUT);
    inputFile.add(fileInput);

    initButtons(buttonBar, groupModel);
}

From source file:com.gitblit.wicket.pages.EditRepositoryPage.java

License:Apache License

protected void setupPage(RepositoryModel model) {
    this.repositoryModel = model;

    // ensure this user can create or edit this repository
    checkPermissions(repositoryModel);/*  ww w  .ja  va2 s. c  o  m*/

    List<String> indexedBranches = new ArrayList<String>();
    List<String> federationSets = new ArrayList<String>();
    final List<RegistrantAccessPermission> repositoryUsers = new ArrayList<RegistrantAccessPermission>();
    final List<RegistrantAccessPermission> repositoryTeams = new ArrayList<RegistrantAccessPermission>();
    List<String> preReceiveScripts = new ArrayList<String>();
    List<String> postReceiveScripts = new ArrayList<String>();

    GitBlitWebSession session = GitBlitWebSession.get();
    final UserModel user = session.getUser() == null ? UserModel.ANONYMOUS : session.getUser();
    final boolean allowEditName = isCreate || isAdmin
            || repositoryModel.isUsersPersonalRepository(user.username);

    if (isCreate) {
        if (user.canAdmin()) {
            super.setupPage(getString("gb.newRepository"), "");
        } else {
            super.setupPage(getString("gb.newRepository"), user.getDisplayName());
        }
    } else {
        super.setupPage(getString("gb.edit"), repositoryModel.name);
        repositoryUsers.addAll(app().repositories().getUserAccessPermissions(repositoryModel));
        repositoryTeams.addAll(app().repositories().getTeamAccessPermissions(repositoryModel));
        Collections.sort(repositoryUsers);
        Collections.sort(repositoryTeams);

        federationSets.addAll(repositoryModel.federationSets);
        if (!ArrayUtils.isEmpty(repositoryModel.indexedBranches)) {
            indexedBranches.addAll(repositoryModel.indexedBranches);
        }
    }

    final String oldName = repositoryModel.name;

    final RegistrantPermissionsPanel usersPalette = new RegistrantPermissionsPanel("users", RegistrantType.USER,
            app().users().getAllUsernames(), repositoryUsers, getAccessPermissions());
    final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams", RegistrantType.TEAM,
            app().users().getAllTeamNames(), repositoryTeams, getAccessPermissions());

    // owners palette
    List<UserChoice> owners = new ArrayList<UserChoice>();
    List<UserChoice> persons = new ArrayList<UserChoice>();
    for (String owner : repositoryModel.owners) {
        UserModel o = app().users().getUserModel(owner);
        if (o != null) {
            owners.add(new UserChoice(o.getDisplayName(), o.username, o.emailAddress));
        } else {
            UserChoice userChoice = new UserChoice(owner);
            owners.add(userChoice);
            persons.add(userChoice);
        }
    }

    for (String person : app().users().getAllUsernames()) {
        UserModel o = app().users().getUserModel(person);
        if (o != null) {
            persons.add(new UserChoice(o.getDisplayName(), o.username, o.emailAddress));
        } else {
            persons.add(new UserChoice(person));
        }
    }
    final Palette<UserChoice> ownersPalette = new Palette<UserChoice>("owners",
            new ListModel<UserChoice>(owners), new CollectionModel<UserChoice>(persons),
            new ChoiceRenderer<UserChoice>(null, "userId"), 12, false);

    // indexed local branches palette
    List<String> allLocalBranches = new ArrayList<String>();
    allLocalBranches.add(Constants.DEFAULT_BRANCH);
    allLocalBranches.addAll(repositoryModel.getLocalBranches());
    boolean luceneEnabled = app().settings().getBoolean(Keys.web.allowLuceneIndexing, true);
    final Palette<String> indexedBranchesPalette = new Palette<String>("indexedBranches",
            new ListModel<String>(indexedBranches), new CollectionModel<String>(allLocalBranches),
            new StringChoiceRenderer(), 8, false);
    indexedBranchesPalette.setEnabled(luceneEnabled);

    // federation sets palette
    List<String> sets = app().settings().getStrings(Keys.federation.sets);
    final Palette<String> federationSetsPalette = new Palette<String>("federationSets",
            new ListModel<String>(federationSets), new CollectionModel<String>(sets),
            new StringChoiceRenderer(), 8, false);

    // pre-receive palette
    if (!ArrayUtils.isEmpty(repositoryModel.preReceiveScripts)) {
        preReceiveScripts.addAll(repositoryModel.preReceiveScripts);
    }
    final Palette<String> preReceivePalette = new Palette<String>("preReceiveScripts",
            new ListModel<String>(preReceiveScripts),
            new CollectionModel<String>(app().repositories().getPreReceiveScriptsUnused(repositoryModel)),
            new StringChoiceRenderer(), 12, true);

    // post-receive palette
    if (!ArrayUtils.isEmpty(repositoryModel.postReceiveScripts)) {
        postReceiveScripts.addAll(repositoryModel.postReceiveScripts);
    }
    final Palette<String> postReceivePalette = new Palette<String>("postReceiveScripts",
            new ListModel<String>(postReceiveScripts),
            new CollectionModel<String>(app().repositories().getPostReceiveScriptsUnused(repositoryModel)),
            new StringChoiceRenderer(), 12, true);

    // custom fields
    final Map<String, String> customFieldsMap = app().settings().getMap(Keys.groovy.customFields);
    List<String> customKeys = new ArrayList<String>(customFieldsMap.keySet());
    final ListView<String> customFieldsListView = new ListView<String>("customFieldsListView", customKeys) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(ListItem<String> item) {
            String key = item.getModelObject();
            item.add(new Label("customFieldLabel", customFieldsMap.get(key)));

            String value = "";
            if (repositoryModel.customFields != null && repositoryModel.customFields.containsKey(key)) {
                value = repositoryModel.customFields.get(key);
            }
            TextField<String> field = new TextField<String>("customFieldValue", new Model<String>(value));
            item.add(field);
        }
    };
    customFieldsListView.setReuseItems(true);

    CompoundPropertyModel<RepositoryModel> rModel = new CompoundPropertyModel<RepositoryModel>(repositoryModel);
    Form<RepositoryModel> form = new Form<RepositoryModel>("editForm", rModel) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit() {
            try {
                if (!namePanel.updateModel(repositoryModel)) {
                    return;
                }

                // confirm access restriction selection
                if (repositoryModel.accessRestriction == null) {
                    error(getString("gb.selectAccessRestriction"));
                    return;
                }

                // confirm federation strategy selection
                if (repositoryModel.federationStrategy == null) {
                    error(getString("gb.selectFederationStrategy"));
                    return;
                }

                // save federation set preferences
                if (repositoryModel.federationStrategy.exceeds(FederationStrategy.EXCLUDE)) {
                    repositoryModel.federationSets.clear();
                    Iterator<String> sets = federationSetsPalette.getSelectedChoices();
                    while (sets.hasNext()) {
                        repositoryModel.federationSets.add(sets.next());
                    }
                }

                // set author metric exclusions
                String ax = metricAuthorExclusions.getObject();
                if (StringUtils.isEmpty(ax)) {
                    repositoryModel.metricAuthorExclusions = new ArrayList<String>();
                } else {
                    Set<String> list = new HashSet<String>();
                    for (String exclusion : StringUtils.getStringsFromValue(ax, " ")) {
                        if (StringUtils.isEmpty(exclusion)) {
                            continue;
                        }
                        if (exclusion.indexOf(' ') > -1) {
                            list.add("\"" + exclusion + "\"");
                        } else {
                            list.add(exclusion);
                        }
                    }
                    repositoryModel.metricAuthorExclusions = new ArrayList<String>(list);
                }

                // set mailing lists
                String ml = mailingLists.getObject();
                if (StringUtils.isEmpty(ml)) {
                    repositoryModel.mailingLists = new ArrayList<String>();
                } else {
                    Set<String> list = new HashSet<String>();
                    for (String address : ml.split("(,|\\s)")) {
                        if (StringUtils.isEmpty(address)) {
                            continue;
                        }
                        list.add(address.toLowerCase());
                    }
                    repositoryModel.mailingLists = new ArrayList<String>(list);
                }

                // indexed branches
                List<String> indexedBranches = new ArrayList<String>();
                Iterator<String> branches = indexedBranchesPalette.getSelectedChoices();
                while (branches.hasNext()) {
                    indexedBranches.add(branches.next());
                }
                repositoryModel.indexedBranches = indexedBranches;

                // owners
                repositoryModel.owners.clear();
                Iterator<UserChoice> owners = ownersPalette.getSelectedChoices();
                while (owners.hasNext()) {
                    repositoryModel.addOwner(owners.next().getUserId());
                }

                // pre-receive scripts
                List<String> preReceiveScripts = new ArrayList<String>();
                Iterator<String> pres = preReceivePalette.getSelectedChoices();
                while (pres.hasNext()) {
                    preReceiveScripts.add(pres.next());
                }
                repositoryModel.preReceiveScripts = preReceiveScripts;

                // post-receive scripts
                List<String> postReceiveScripts = new ArrayList<String>();
                Iterator<String> post = postReceivePalette.getSelectedChoices();
                while (post.hasNext()) {
                    postReceiveScripts.add(post.next());
                }
                repositoryModel.postReceiveScripts = postReceiveScripts;

                // custom fields
                repositoryModel.customFields = new LinkedHashMap<String, String>();
                Iterator<Component> customFieldsListViewIterator = customFieldsListView.iterator();
                while (customFieldsListViewIterator.hasNext()) {

                    ListItem<String> child = (ListItem<String>) customFieldsListViewIterator.next();
                    String key = child.getModelObject();

                    TextField<String> field = (TextField<String>) child.get("customFieldValue");
                    String value = field.getValue();

                    repositoryModel.customFields.put(key, value);
                }

                // save the repository
                app().gitblit().updateRepositoryModel(oldName, repositoryModel, isCreate);

                // repository access permissions
                if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)) {
                    app().gitblit().setUserAccessPermissions(repositoryModel, repositoryUsers);
                    app().gitblit().setTeamAccessPermissions(repositoryModel, repositoryTeams);
                }
            } catch (GitBlitException e) {
                error(e.getMessage());
                return;
            }
            setResponsePage(SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryModel.name));
        }
    };

    // Determine available refs & branches
    List<String> availableRefs = new ArrayList<String>();
    List<String> availableBranches = new ArrayList<String>();
    if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) {
        for (String ref : repositoryModel.availableRefs) {
            if (!ref.startsWith(Constants.R_TICKET)) {
                availableRefs.add(ref);
                if (ref.startsWith(Constants.R_HEADS)) {
                    availableBranches.add(Repository.shortenRefName(ref));
                }
            }
        }
    }

    // do not let the browser pre-populate these fields
    form.add(new AttributeModifier("autocomplete", "off"));

    //
    //
    // GENERAL
    //
    namePanel = new RepositoryNamePanel("namePanel", repositoryModel);
    namePanel.setEditable(allowEditName);
    form.add(namePanel);

    // XXX AccessPolicyPanel is defined later.

    form.add(new ChoiceOption<String>("head", getString("gb.headRef"), getString("gb.headRefDescription"),
            new PropertyModel<String>(repositoryModel, "HEAD"), availableRefs));

    //
    // PERMISSIONS
    //
    form.add(ownersPalette);
    form.add(usersPalette);
    form.add(teamsPalette);

    //
    // TICKETS
    //
    form.add(new BooleanOption("acceptNewPatchsets", getString("gb.acceptNewPatchsets"),
            getString("gb.acceptNewPatchsetsDescription"),
            new PropertyModel<Boolean>(repositoryModel, "acceptNewPatchsets")));

    form.add(new BooleanOption("acceptNewTickets", getString("gb.acceptNewTickets"),
            getString("gb.acceptNewTicketsDescription"),
            new PropertyModel<Boolean>(repositoryModel, "acceptNewTickets")));

    form.add(new BooleanOption("requireApproval", getString("gb.requireApproval"),
            getString("gb.requireApprovalDescription"),
            new PropertyModel<Boolean>(repositoryModel, "requireApproval")));

    form.add(new ChoiceOption<String>("mergeTo", getString("gb.mergeTo"), getString("gb.mergeToDescription"),
            new PropertyModel<String>(repositoryModel, "mergeTo"), availableBranches));
    form.add(new ChoiceOption<MergeType>("mergeType", getString("gb.mergeType"),
            getString("gb.mergeTypeDescription"), new PropertyModel<MergeType>(repositoryModel, "mergeType"),
            Arrays.asList(MergeType.values())));

    //
    // RECEIVE
    //
    form.add(new BooleanOption("isFrozen", getString("gb.isFrozen"), getString("gb.isFrozenDescription"),
            new PropertyModel<Boolean>(repositoryModel, "isFrozen")));

    form.add(new BooleanOption("incrementalPushTags", getString("gb.enableIncrementalPushTags"),
            getString("gb.useIncrementalPushTagsDescription"),
            new PropertyModel<Boolean>(repositoryModel, "useIncrementalPushTags")));

    final CheckBox verifyCommitter = new CheckBox("checkbox",
            new PropertyModel<Boolean>(repositoryModel, "verifyCommitter"));
    verifyCommitter.setOutputMarkupId(true);
    form.add(new BooleanOption("verifyCommitter", getString("gb.verifyCommitter"),
            getString("gb.verifyCommitterDescription") + "<br/>" + getString("gb.verifyCommitterNote"),
            verifyCommitter).setIsHtmlDescription(true));

    form.add(preReceivePalette);
    form.add(new BulletListPanel("inheritedPreReceive", getString("gb.inherited"),
            app().repositories().getPreReceiveScriptsInherited(repositoryModel)));
    form.add(postReceivePalette);
    form.add(new BulletListPanel("inheritedPostReceive", getString("gb.inherited"),
            app().repositories().getPostReceiveScriptsInherited(repositoryModel)));

    WebMarkupContainer customFieldsSection = new WebMarkupContainer("customFieldsSection");
    customFieldsSection.add(customFieldsListView);
    form.add(customFieldsSection
            .setVisible(!app().settings().getString(Keys.groovy.customFields, "").isEmpty()));

    //
    // FEDERATION
    //
    List<FederationStrategy> federationStrategies = new ArrayList<FederationStrategy>(
            Arrays.asList(FederationStrategy.values()));
    // federation strategies - remove ORIGIN choice if this repository has no origin.
    if (StringUtils.isEmpty(repositoryModel.origin)) {
        federationStrategies.remove(FederationStrategy.FEDERATE_ORIGIN);
    }

    form.add(new ChoiceOption<FederationStrategy>("federationStrategy", getString("gb.federationStrategy"),
            getString("gb.federationStrategyDescription"),
            new DropDownChoice<FederationStrategy>("choice",
                    new PropertyModel<FederationStrategy>(repositoryModel, "federationStrategy"),
                    federationStrategies, new FederationTypeRenderer())));

    form.add(federationSetsPalette);

    //
    // SEARCH
    //
    form.add(indexedBranchesPalette);

    //
    // GARBAGE COLLECTION
    //
    boolean gcEnabled = app().settings().getBoolean(Keys.git.enableGarbageCollection, false);
    int defaultGcPeriod = app().settings().getInteger(Keys.git.defaultGarbageCollectionPeriod, 7);
    if (repositoryModel.gcPeriod == 0) {
        repositoryModel.gcPeriod = defaultGcPeriod;
    }
    List<Integer> gcPeriods = Arrays.asList(1, 2, 3, 4, 5, 7, 10, 14);
    form.add(new ChoiceOption<Integer>("gcPeriod", getString("gb.gcPeriod"),
            getString("gb.gcPeriodDescription"), new DropDownChoice<Integer>("choice",
                    new PropertyModel<Integer>(repositoryModel, "gcPeriod"), gcPeriods, new GCPeriodRenderer()))
                            .setEnabled(gcEnabled));

    form.add(new TextOption("gcThreshold", getString("gb.gcThreshold"), getString("gb.gcThresholdDescription"),
            "span1", new PropertyModel<String>(repositoryModel, "gcThreshold")).setEnabled(gcEnabled));

    //
    // MISCELLANEOUS
    //

    form.add(new TextOption("origin", getString("gb.origin"), getString("gb.originDescription"), "span6",
            new PropertyModel<String>(repositoryModel, "origin")).setEnabled(false));

    form.add(new BooleanOption("showRemoteBranches", getString("gb.showRemoteBranches"),
            getString("gb.showRemoteBranchesDescription"),
            new PropertyModel<Boolean>(repositoryModel, "showRemoteBranches")));

    form.add(new BooleanOption("skipSizeCalculation", getString("gb.skipSizeCalculation"),
            getString("gb.skipSizeCalculationDescription"),
            new PropertyModel<Boolean>(repositoryModel, "skipSizeCalculation")));

    form.add(new BooleanOption("skipSummaryMetrics", getString("gb.skipSummaryMetrics"),
            getString("gb.skipSummaryMetricsDescription"),
            new PropertyModel<Boolean>(repositoryModel, "skipSummaryMetrics")));

    List<Integer> maxActivityCommits = Arrays.asList(-1, 0, 25, 50, 75, 100, 150, 200, 250, 500);
    form.add(new ChoiceOption<Integer>("maxActivityCommits", getString("gb.maxActivityCommits"),
            getString("gb.maxActivityCommitsDescription"),
            new DropDownChoice<Integer>("choice",
                    new PropertyModel<Integer>(repositoryModel, "maxActivityCommits"), maxActivityCommits,
                    new MaxActivityCommitsRenderer())));

    List<CommitMessageRenderer> renderers = Arrays.asList(CommitMessageRenderer.values());
    form.add(new ChoiceOption<CommitMessageRenderer>("commitMessageRenderer",
            getString("gb.commitMessageRenderer"), getString("gb.commitMessageRendererDescription"),
            new DropDownChoice<CommitMessageRenderer>("choice",
                    new PropertyModel<CommitMessageRenderer>(repositoryModel, "commitMessageRenderer"),
                    renderers)));

    metricAuthorExclusions = new Model<String>(ArrayUtils.isEmpty(repositoryModel.metricAuthorExclusions) ? ""
            : StringUtils.flattenStrings(repositoryModel.metricAuthorExclusions, " "));

    form.add(new TextOption("metricAuthorExclusions", getString("gb.metricAuthorExclusions"),
            getString("gb.metricAuthorExclusions"), "span6", metricAuthorExclusions));

    mailingLists = new Model<String>(ArrayUtils.isEmpty(repositoryModel.mailingLists) ? ""
            : StringUtils.flattenStrings(repositoryModel.mailingLists, " "));

    form.add(new TextOption("mailingLists", getString("gb.mailingLists"), getString("gb.mailingLists"), "span6",
            mailingLists));

    // initial enable/disable of permission controls
    if (repositoryModel.accessRestriction.equals(AccessRestrictionType.NONE)) {
        // anonymous everything, disable all controls
        usersPalette.setEnabled(false);
        teamsPalette.setEnabled(false);
        verifyCommitter.setEnabled(false);
    } else {
        // authenticated something
        // enable authorization controls
        verifyCommitter.setEnabled(true);

        boolean allowFineGrainedControls = repositoryModel.authorizationControl
                .equals(AuthorizationControl.NAMED);
        usersPalette.setEnabled(allowFineGrainedControls);
        teamsPalette.setEnabled(allowFineGrainedControls);
    }

    //
    // ACCESS POLICY PANEL (GENERAL)
    //
    AjaxFormChoiceComponentUpdatingBehavior callback = new AjaxFormChoiceComponentUpdatingBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            accessPolicyPanel.updateModel(repositoryModel);

            boolean allowAuthorizationControl = repositoryModel.accessRestriction
                    .exceeds(AccessRestrictionType.NONE);
            verifyCommitter.setEnabled(allowAuthorizationControl);

            boolean allowFineGrainedControls = allowAuthorizationControl
                    && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED);
            usersPalette.setEnabled(allowFineGrainedControls);
            teamsPalette.setEnabled(allowFineGrainedControls);

            if (allowFineGrainedControls) {
                repositoryModel.authorizationControl = AuthorizationControl.NAMED;
            }

            target.add(verifyCommitter);
            target.add(usersPalette);
            target.add(teamsPalette);
        }
    };

    accessPolicyPanel = new AccessPolicyPanel("accessPolicyPanel", repositoryModel, callback);
    form.add(accessPolicyPanel);

    //
    // FORM CONTROLS
    //
    form.add(new Button("save"));
    Button cancel = new Button("cancel") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            if (isCreate) {
                setResponsePage(RepositoriesPage.class);
            } else {
                setResponsePage(SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryModel.name));
            }
        }
    };
    cancel.setDefaultFormProcessing(false);
    form.add(cancel);

    // the user can delete if deletions are allowed AND the user is an admin or the personal owner
    // assigned ownership is not sufficient to allow deletion
    boolean canDelete = !isCreate && app().repositories().canDelete(repositoryModel)
            && (user.canAdmin() || user.isMyPersonalRepository(repositoryModel.name));

    Link<Void> delete = new Link<Void>("delete") {

        private static final long serialVersionUID = 1L;

        @Override
        public void onClick() {
            RepositoryModel latestModel = app().repositories().getRepositoryModel(repositoryModel.name);
            boolean canDelete = app().repositories().canDelete(latestModel);
            if (canDelete) {
                if (app().gitblit().deleteRepositoryModel(latestModel)) {
                    info(MessageFormat.format(getString("gb.repositoryDeleted"), latestModel));
                    if (latestModel.isPersonalRepository()) {
                        // redirect to user's profile page
                        String prefix = app().settings().getString(Keys.git.userRepositoryPrefix, "~");
                        String username = latestModel.projectPath.substring(prefix.length());
                        setResponsePage(UserPage.class, WicketUtils.newUsernameParameter(username));
                    } else {
                        // redirect to server repositories page
                        setResponsePage(RepositoriesPage.class);
                    }
                } else {
                    error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), latestModel));
                }
            } else {
                error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), latestModel));
            }
        }
    };

    if (canDelete) {
        delete.add(new JavascriptEventConfirmation("click",
                MessageFormat.format(getString("gb.deleteRepository"), repositoryModel)));
    }
    form.add(delete.setVisible(canDelete));

    add(form);
}

From source file:com.modusoperandi.dragonfly.widgets.chart.SettingsPanel.java

License:Open Source License

/**
 * Instantiates a new settings page./*from   w w  w  .  j a  va2 s .c  o m*/
 *
 * @param id
 * @param modalWindow
 */
public SettingsPanel(final String id, final ModalWindow modalWindow) {

    super(id);

    configuration = new HashMap<>();

    final Form<?> dataForm = new Form<>("dataForm");
    add(dataForm);

    contentDiv = new WebMarkupContainer("contentDiv");
    contentDiv.setOutputMarkupId(true);
    dataForm.add(contentDiv);

    // ////////////////////////////
    // Type
    final RadioChoice<String> typeField = new RadioChoice<String>("type", new PropertyModel<>(this, "type"),
            Arrays.asList(
                    new String[] { XY, FACET_BAR, SERIES_LINE, FACET_PIE, TIMEWHEEL, HEAT_MAP_RING_MAP })) {

        private static final long serialVersionUID = 1L;

        @Override
        public String getSuffix() {

            return "";
        }
    };

    typeField.add(new AjaxFormChoiceComponentUpdatingBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            type = getComponent().getDefaultModelObjectAsString();

            showDivs();

            target.add(contentDiv);
        }

    });
    contentDiv.add(typeField);

    // ////////////////////////////
    // Index Name
    populateIndices();

    indexDiv = new WebMarkupContainer("indexDiv");
    indexDiv.setOutputMarkupId(true);
    contentDiv.add(indexDiv);

    selectIndex = new DropDownChoice<>("dataSet", new PropertyModel<String>(this, "indexName"), indexList);
    selectIndex.add(new AjaxFormComponentUpdatingBehavior("focus") {

        private static final long serialVersionUID = 2981822623630720652L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            if (populateIndices()) {
                target.add(selectIndex);
            }
        }
    });
    selectIndex.add(new AjaxFormComponentUpdatingBehavior("change") {

        private static final long serialVersionUID = 2981822623630720652L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            populateFieldsList(numericFieldsList, "double");
            populateFieldsList(allFieldsList, null);
            populateFieldsList(timeFieldsList, "date");
            populateFieldsList(locationFieldsList, "geo_point");

            if (numericFieldsList.size() > 0) {

                seriesYField = numericFieldsList.get(0);

                xField = numericFieldsList.get(0);
                yField = numericFieldsList.get(0);
            }

            if (allFieldsList.size() > 0) {

                countField = allFieldsList.get(0);

                pieCountField = allFieldsList.get(0);

                seriesXField = allFieldsList.get(0);

                hmrmLabelField = allFieldsList.get(0);
            }

            if (timeFieldsList.size() > 0) {

                twTimeField = timeFieldsList.get(0);

                hmrmTimeField = timeFieldsList.get(0);
            }

            if (locationFieldsList.size() > 0) {

                hmrmLocationField = locationFieldsList.get(0);
            }

            target.add(xSelectField);
            target.add(ySelectField);
            target.add(countSelectField);
            target.add(seriesXSelectField);
            target.add(seriesYSelectField);
            target.add(pieCountSelectField);
            target.add(twTimeSelectField);
            target.add(hmrmTimeSelectField);
            target.add(hmrmLocationSelectField);
            target.add(hmrmLabelSelectField);
        }
    });
    indexDiv.add(selectIndex);

    // ////////////////////////////
    // Type Panels
    configureXyDiv();
    configureFacetBarDiv();
    configureSeriesDiv();
    configureFacetPieDiv();
    configureTimewheelDiv();
    configureHeatMapRingMapDiv();

    showDivs();

    // ////////////////////////////
    // Buttons
    dataForm.add(new AjaxButton("okButton") {

        private static final long serialVersionUID = 1L;

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

            configuration.clear();

            configuration.put("Index", indexName);
            configuration.put("Type", type);

            switch (type) {
            case XY:
                configuration.put("X", xField);
                configuration.put("Y", yField);
                break;

            case FACET_BAR:
                configuration.put("CountField", countField);
                configuration.put("MaxItems", maxItems);
                break;

            case SERIES_LINE:
                configuration.put("X", seriesXField);
                configuration.put("Y", seriesYField);
                break;

            case FACET_PIE:
                configuration.put("CountField", pieCountField);
                configuration.put("MaxItems", pieMaxItems);
                break;

            case TIMEWHEEL:
                configuration.put("TimeScale", twTimeScaleField);
                configuration.put("TimeField", twTimeField);
                configuration.put("ContrastScale", twContrastScaleField);
                break;

            case HEAT_MAP_RING_MAP:
                configuration.put("TimeScale", hmrmTimeScaleField);
                configuration.put("TimeField", hmrmTimeField);
                configuration.put("LocationField", hmrmLocationField);
                configuration.put("LabelField", hmrmLabelField);
                break;
            }

            ok = true;
            modalWindow.close(target);
        }
    });

    dataForm.add(new AjaxButton("cancelButton") {

        private static final long serialVersionUID = 1L;

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

            configuration.clear();

            ok = false;
            modalWindow.close(target);
        }
    });
}

From source file:com.modusoperandi.dragonfly.widgets.choropleth.ChoroplethWidgetPage.java

License:Open Source License

private void initialize() {

    // ////////////////////////////
    // Form/*  ww  w .ja  v a 2s. c  om*/
    final Form<?> queryForm = new Form<>("queryForm");
    add(queryForm);

    // ////////////////////////////
    // From Data Set
    populateIndices();

    fromIndex = new DropDownChoice<>("fromDataSetName", new PropertyModel<String>(this, "fromIndexName"),
            fromIndexList);
    fromIndex.setOutputMarkupId(true);
    fromIndex.add(new AjaxFormComponentUpdatingBehavior("focus") {

        private static final long serialVersionUID = 2981822623630720652L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            if (populateIndices()) {
                target.add(fromIndex);
            }
        }
    });
    fromIndex.add(new AjaxFormComponentUpdatingBehavior("change") {

        private static final long serialVersionUID = 2981822623630720652L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            populateFieldLists();
            target.add(latField);
            target.add(lonField);
            target.add(valueField);
        }
    });
    queryForm.add(fromIndex);

    // ///////////////////////////////
    // To Data Set
    queryField = new TextField<>("toDataSetName", new PropertyModel<>(this, "toIndexName"));
    queryForm.add(queryField);
    final RadioChoice<String> dataSetAction = new RadioChoice<String>("dataSetAction",
            new PropertyModel<>(this, "indexAction"), Arrays.asList(new String[] { OVERWRITE, APPEND })) {

        private static final long serialVersionUID = 1L;

        @Override
        public String getSuffix() {

            return "";
        }
    };
    dataSetAction.add(new AjaxFormChoiceComponentUpdatingBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            indexAction = getComponent().getDefaultModelObjectAsString();
        }

    });
    queryForm.add(dataSetAction);

    // ////////////////////////////
    // Filter
    final TextField<String> filterField = new TextField<>("filter", new PropertyModel<String>(this, "filter"));

    queryForm.add(filterField);

    // ///////////////////////////////
    // Coordinates
    latField = new DropDownChoice<>("lat", new PropertyModel<String>(this, "lat"), fieldList);
    latField.setOutputMarkupId(true);
    queryForm.add(latField);

    lonField = new DropDownChoice<>("lon", new PropertyModel<String>(this, "lon"), fieldList);
    lonField.setOutputMarkupId(true);
    queryForm.add(lonField);

    // ///////////////////////////////
    // Value
    valueField = new DropDownChoice<>("value", new PropertyModel<String>(this, "value"), fieldList);
    valueField.setOutputMarkupId(true);
    queryForm.add(valueField);

    // //////////////////////////////
    // Limits
    queryForm.add(new TextField<>("upperLimit", new PropertyModel<>(this, "upperLimit")));
    queryForm.add(new TextField<>("lowerLimit", new PropertyModel<>(this, "lowerLimit")));

    // //////////////////////////////
    // Color Action
    final RadioChoice<String> colorAction = new RadioChoice<String>("colorAction",
            new PropertyModel<>(this, "colorActionStr"),
            Arrays.asList(new String[] { AVERAGE, MIN, MAX, TOTAL, COUNT })) {

        private static final long serialVersionUID = 1L;

        @Override
        public String getSuffix() {

            return "";
        }
    };
    colorAction.add(new AjaxFormChoiceComponentUpdatingBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            colorActionStr = getComponent().getDefaultModelObjectAsString();
        }

    });
    queryForm.add(colorAction);

    // ////////////////////////////
    // File
    // Populate the drop down list with the files on the server
    getFileList(fileList, Arrays.asList(".json"), null);
    selectFile = new DropDownChoice<>("fileName", new PropertyModel<String>(this, "fileName"), fileList);
    queryForm.add(selectFile);

    // ///////////////////////////////
    // Search
    queryForm.add(new AnalyzeAjaxButton());
}

From source file:com.modusoperandi.dragonfly.widgets.map.MapSettingsPanel.java

License:Open Source License

/**
 * Instantiates a new map settings page.
 * //from w  w w.j  a v a  2  s.c  o m
 * @param id
 * @param modalWindow
 */
public MapSettingsPanel(final String id, final ModalWindow modalWindow) {

    super(id);

    populateWmsPresetList();

    configuration = new HashMap<>();

    final Form<?> dataForm = new Form<>("dataForm");
    add(dataForm);

    contentDiv = new WebMarkupContainer("contentDiv");
    contentDiv.setOutputMarkupId(true);
    dataForm.add(contentDiv);

    // ////////////////////////////
    // Type

    final RadioChoice<String> typeField = new RadioChoice<String>("type", new PropertyModel<>(this, "type"),
            Arrays.asList(new String[] { HEAT_MAP, GEO_JSON, WMS })) {

        private static final long serialVersionUID = 1L;

        @Override
        public String getSuffix() {

            return "";
        }
    };

    typeField.add(new AjaxFormChoiceComponentUpdatingBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            type = getComponent().getDefaultModelObjectAsString();

            showDivs();

            target.add(contentDiv);
            target.add(heatmapDiv);
            target.add(geojsonDiv);
            target.add(wmsDiv);
        }

    });
    contentDiv.add(typeField);

    // ////////////////////////////
    // Index Name

    populateIndices();

    indexDiv = new WebMarkupContainer("indexDiv");
    indexDiv.setOutputMarkupId(true);
    contentDiv.add(indexDiv);

    selectIndex = new DropDownChoice<>("dataSet", new PropertyModel<String>(this, "indexName"), indexList);
    selectIndex.setOutputMarkupId(true);
    selectIndex.add(new AjaxFormComponentUpdatingBehavior("focus") {

        private static final long serialVersionUID = 2981822623630720652L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            if (populateIndices()) {
                target.add(selectIndex);
            }
        }
    });
    selectIndex.add(new AjaxFormComponentUpdatingBehavior("change") {

        private static final long serialVersionUID = 2981822623630720652L;

        @Override
        protected void onUpdate(final AjaxRequestTarget target) {

            populateFieldsList(locationFieldList, "geo_point");
            if (locationFieldList.size() > 0) {
                hmLocation = locationFieldList.get(0);
            }

            populateFieldsList(stringFieldList, "string");
            if (stringFieldList.size() > 0) {
                geojson = stringFieldList.get(0);
            }

            target.add(geojsonField);
            target.add(hmLocationField);
        }
    });
    indexDiv.add(selectIndex);

    // ////////////////////////////
    // Type Panels

    configureHeatmapDiv();
    configureGeojsonDiv();
    configureWmsDiv();

    showDivs();

    // ////////////////////////////
    // Buttons

    dataForm.add(new AjaxButton("okButton") {

        private static final long serialVersionUID = 1L;

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

            configuration.clear();

            switch (type) {
            case HEAT_MAP:
                configuration.put("Type", HEAT_MAP);
                configuration.put("Index", indexName);
                configuration.put("Location", hmLocation);
                configuration.put("HmTransparency", hmTransparency);
                configuration.put("HmRadius", hmRadius);
                break;

            case GEO_JSON:
                configuration.put("Type", GEO_JSON);
                configuration.put("Index", indexName);
                configuration.put("GeojsonField", geojson);
                break;

            case WMS:
                configuration.put("Type", WMS);
                configuration.put("TileURL", tileUrl);
                configuration.put("Name", wmsName);
                configuration.put("Format", wmsFormat);
                configuration.put("Attribution", wmsAttribution);
                configuration.put("Layers", wmsLayers);
                break;
            }

            ok = true;
            modalWindow.close(target);
        }
    });

    dataForm.add(new AjaxButton("cancelButton") {

        private static final long serialVersionUID = 1L;

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

            configuration.clear();

            ok = false;
            modalWindow.close(target);
        }
    });
}

From source file:com.userweave.module.methoden.questionnaire.page.conf.question.QuestionConfigurationPanel.java

License:Open Source License

/**
 * Creates an ajax form updating behavior for choices.
 * //from   ww  w  .  j  a  v a  2 s  . c  o  m
 * @return
 *       Update behavior for ajax form choice components.
 */
protected AjaxFormChoiceComponentUpdatingBehavior getChoiceUpdateBehavior() {
    return new AjaxFormChoiceComponentUpdatingBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.addComponent(QuestionConfigurationPanel.this.get("feedbackPanel"));

            addQuestionToConfigurationAndSave(configurationId);
        }

        @Override
        protected void onBind() {
            try {
                super.onBind();
            } catch (Exception e) {
                // This behavior can only be attached to Choices.
                // If we bind it to another element, the method
                // throws a runtime exception. Since we don't want
                // that, catch the exception here.
            }
        }
    };
}

From source file:com.userweave.module.methoden.questionnaire.page.grouping.multiplepossibleanswers.MultiplePossibleAnswersGroupingPanel.java

License:Open Source License

public MultiplePossibleAnswersGroupingPanel(String id, QuestionWithMultiplePossibleAnswers question, T group,
        final Locale locale, GroupAddedCallback groupAddedCallback) {
    super(id, group, locale, groupAddedCallback);

    questionId = question.getId();//from w  w w.  j  a  v a  2s . c  om

    CheckGroup answers = new CheckGroup("answers",
            new PropertyModel(MultiplePossibleAnswersGroupingPanel.this, "answers"));

    if (isOnChangeAjaxBehaviorNeeded()) {
        answers.add(new AjaxFormChoiceComponentUpdatingBehavior() {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                MultiplePossibleAnswersGroupingPanel.this.onUpdate(target);
            }
        });
    }

    add(answers);

    IModel possibleAnswersModel = new LoadableDetachableModel() {

        @Override
        protected Object load() {
            QuestionWithMultiplePossibleAnswers question = (QuestionWithMultiplePossibleAnswers) questionDao
                    .findById(questionId);
            return question.getPossibleAnswers();
        }

    };

    answers.add(new ListView("values", possibleAnswersModel) {
        @Override
        protected void populateItem(ListItem item) {
            item.add(new Check("check", item.getModel()));
            item.add(new Label("content", new LocalizedModel((Serializable) item.getModelObject(), locale)));
        };
    });
}

From source file:com.userweave.module.methoden.questionnaire.page.grouping.rating.RatingGroupingPanel.java

License:Open Source License

public RatingGroupingPanel(String id, Integer numberOfRatingSteps, T group, final Locale locale,
        GroupAddedCallback groupAddedCallback, boolean groupMissingValues) {
    super(id, group, locale, groupAddedCallback);

    this.group = group;

    setDefaultModel(new CompoundPropertyModel(group));

    final FormComponent lowerBoundTextField = new TextField("lowerBound") {
        @Override/* ww  w  .ja  va  2  s . c  om*/
        public boolean isVisible() {
            return operator != null && !operator.equals(Operator.LESS)
                    && !operator.equals(Operator.MISSING_VALUE);
        }

    };

    setValidation(lowerBoundTextField, numberOfRatingSteps);

    add(lowerBoundTextField);

    final FormComponent upperBoundTextField = new TextField("upperBound") {
        @Override
        public boolean isVisible() {
            return operator != null && !operator.equals(Operator.GREATER)
                    && !operator.equals(Operator.MISSING_VALUE);
        }
    };

    setValidation(upperBoundTextField, numberOfRatingSteps);

    add(upperBoundTextField);

    final Component and = new WebMarkupContainer("and") {
        @Override
        public boolean isVisible() {
            return operator != null && operator.equals(Operator.BETWEEN)
                    && !operator.equals(Operator.MISSING_VALUE);
        }
    }.setOutputMarkupPlaceholderTag(true);

    add(and);

    List<Operator> operators = new ArrayList<Operator>();
    for (Operator op : Operator.values()) {
        if (!op.equals(Operator.MISSING_VALUE) || groupMissingValues) {
            operators.add(op);
        }
    }

    add(new RadioChoice("operator", new PropertyModel(this, "operator"), operators, new ChoiceRenderer("name"))
            .setRequired(true).add(new AjaxFormChoiceComponentUpdatingBehavior() {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    target.addComponent(lowerBoundTextField);
                    target.addComponent(upperBoundTextField);
                    target.addComponent(and);
                }
            })

    );

}