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

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

Introduction

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

Prototype

public Fragment(final String id, final String markupId, final MarkupContainer markupProvider) 

Source Link

Document

Constructor.

Usage

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

License:Apache License

@Override
protected void onInitialize() {
    super.onInitialize();
    setOutputMarkupId(true);//from  www . j  a  v  a 2 s .c om
    add(initObjectListPanel());

    Fragment parametersPanelFragment = new Fragment(ID_PARAMETERS_PANEL, ID_PARAMETERS_PANEL_FRAGMENT, this);
    parametersPanelFragment.setOutputMarkupId(true);

    initParametersPanel(parametersPanelFragment);
    add(parametersPanelFragment);
}

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

License:Apache License

protected void initLayout() {
    PrismContainerPanel<LoggingConfigurationType> loggingPanel = new PrismContainerPanel<LoggingConfigurationType>(
            ID_LOGGING, getModel(), true, new Form<>("form"),
            itemWrapper -> getLoggingVisibility(itemWrapper.getPath()), getPageBase());
    add(loggingPanel);/* ww  w.j  a v a  2 s  . c o m*/

    TableId tableIdLoggers = UserProfileStorage.TableId.LOGGING_TAB_LOGGER_TABLE;
    PageStorage pageStorageLoggers = getPageBase().getSessionStorage()
            .getLoggingConfigurationTabLoggerTableStorage();

    IModel<ContainerWrapper<ClassLoggerConfigurationType>> loggerModel = new ContainerWrapperFromObjectWrapperModel<ClassLoggerConfigurationType, SystemConfigurationType>(
            Model.of(getModelObject().getObjectWrapper()),
            ItemPath.create(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_CLASS_LOGGER));

    MultivalueContainerListPanel<ClassLoggerConfigurationType> loggersMultivalueContainerListPanel = new MultivalueContainerListPanel<ClassLoggerConfigurationType>(
            ID_LOGGERS, loggerModel, tableIdLoggers, pageStorageLoggers) {

        private static final long serialVersionUID = 1L;

        @Override
        protected List<ContainerValueWrapper<ClassLoggerConfigurationType>> postSearch(
                List<ContainerValueWrapper<ClassLoggerConfigurationType>> items) {
            for (int i = 0; i < items.size(); i++) {
                ContainerValueWrapper<ClassLoggerConfigurationType> logger = items.get(i);
                if (ProfilingConfigurationTabPanel.LOGGER_PROFILING
                        .equals(((ClassLoggerConfigurationType) logger.getContainerValue().getRealValue())
                                .getPackage())) {
                    items.remove(logger);
                    continue;
                }
            }
            return items;
        }

        @Override
        protected void newItemPerformed(AjaxRequestTarget target) {
            PrismContainerValue<ClassLoggerConfigurationType> newLogger = loggerModel.getObject().getItem()
                    .createNewValue();
            ContainerValueWrapper<ClassLoggerConfigurationType> newLoggerWrapper = getLoggersMultivalueContainerListPanel()
                    .createNewItemContainerValueWrapper(newLogger, loggerModel);
            newLoggerWrapper.setShowEmpty(true, false);
            newLoggerWrapper.computeStripes();
            loggerEditPerformed(target, Model.of(newLoggerWrapper), null);
        }

        @Override
        protected void initPaging() {
            initLoggerPaging();
        }

        @Override
        protected boolean enableActionNewObject() {
            return true;
        }

        @Override
        protected ObjectQuery createQuery() {
            return null;
        }

        @Override
        protected List<IColumn<ContainerValueWrapper<ClassLoggerConfigurationType>, String>> createColumns() {
            return initLoggersBasicColumns();
        }

        @Override
        protected void initCustomLayout() {

        }

        @Override
        protected void itemPerformedForDefaultAction(AjaxRequestTarget target,
                IModel<ContainerValueWrapper<ClassLoggerConfigurationType>> rowModel,
                List<ContainerValueWrapper<ClassLoggerConfigurationType>> listItems) {
            loggerEditPerformed(target, rowModel, listItems);
        }

        @Override
        protected List<SearchItemDefinition> initSearchableItems(
                PrismContainerDefinition<ClassLoggerConfigurationType> containerDef) {
            List<SearchItemDefinition> defs = new ArrayList<>();

            return defs;
        }
    };
    add(loggersMultivalueContainerListPanel);

    TableId tableIdAppenders = UserProfileStorage.TableId.LOGGING_TAB_APPENDER_TABLE;
    PageStorage pageStorageAppenders = getPageBase().getSessionStorage()
            .getLoggingConfigurationTabAppenderTableStorage();

    IModel<ContainerWrapper<AppenderConfigurationType>> appenderModel = new ContainerWrapperFromObjectWrapperModel<AppenderConfigurationType, SystemConfigurationType>(
            Model.of(getModelObject().getObjectWrapper()),
            ItemPath.create(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_APPENDER));

    MultivalueContainerListPanelWithDetailsPanel<AppenderConfigurationType> appendersMultivalueContainerListPanel = new MultivalueContainerListPanelWithDetailsPanel<AppenderConfigurationType>(
            ID_APPENDERS, appenderModel, tableIdAppenders, pageStorageAppenders) {

        private static final long serialVersionUID = 1L;

        @Override
        protected List<ContainerValueWrapper<AppenderConfigurationType>> postSearch(
                List<ContainerValueWrapper<AppenderConfigurationType>> items) {
            return items;
        }

        @Override
        protected void newItemPerformed(AjaxRequestTarget target) {
            newAppendersClickPerformed(target);
        }

        @Override
        protected void initPaging() {
            initAppenderPaging();
        }

        @Override
        protected boolean enableActionNewObject() {
            return true;
        }

        @Override
        protected ObjectQuery createQuery() {
            return null;
        }

        @Override
        protected List<IColumn<ContainerValueWrapper<AppenderConfigurationType>, String>> createColumns() {
            return initAppendersBasicColumns();
        }

        @Override
        protected MultivalueContainerDetailsPanel<AppenderConfigurationType> getMultivalueContainerDetailsPanel(
                ListItem<ContainerValueWrapper<AppenderConfigurationType>> item) {
            return LoggingConfigurationTabPanel.this.getAppendersMultivalueContainerDetailsPanel(item);
        }

        @Override
        protected List<SearchItemDefinition> initSearchableItems(
                PrismContainerDefinition<AppenderConfigurationType> containerDef) {
            List<SearchItemDefinition> defs = new ArrayList<>();

            return defs;
        }

        @Override
        protected WebMarkupContainer initButtonToolbar(String contentAreaId) {
            Fragment searchContainer = new Fragment(contentAreaId, ID_BUTTON_TOOLBAR_FRAGMENT,
                    LoggingConfigurationTabPanel.this);

            Form appenderTypeForm = new Form(ID_CHOICE_APPENDER_TYPE_FORM);
            searchContainer.add(appenderTypeForm);

            AjaxSubmitButton newObjectIcon = new AjaxSubmitButton(ID_NEW_ITEM_BUTTON,
                    new Model<>("<i class=\"fa fa-plus\"></i>")) {

                private static final long serialVersionUID = 1L;

                @Override
                protected void onSubmit(AjaxRequestTarget target) {
                    newItemPerformed(target);
                }
            };

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

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

                @Override
                public boolean isEnabled() {
                    return isNewObjectButtonEnabled();
                }
            });
            newObjectIcon.add(AttributeModifier.append("class", createStyleClassModelForNewObjectIcon()));
            appenderTypeForm.add(newObjectIcon);
            List<QName> appendersChoicesList = new ArrayList<QName>();
            appendersChoicesList.add(FileAppenderConfigurationType.COMPLEX_TYPE);
            appendersChoicesList.add(SyslogAppenderConfigurationType.COMPLEX_TYPE);
            DropDownChoicePanel<QName> appenderChoise = new DropDownChoicePanel(ID_APPENDERS_CHOICE,
                    new Model(FileAppenderConfigurationType.COMPLEX_TYPE), Model.of(appendersChoicesList),
                    new QNameIChoiceRenderer("LoggingConfigurationTabPanel." + ID_APPENDERS_CHOICE));
            appenderChoise.setOutputMarkupId(true);
            appenderTypeForm.addOrReplace(appenderChoise);
            return searchContainer;
        }

    };
    add(appendersMultivalueContainerListPanel);

    IModel<ContainerWrapper<AuditingConfigurationType>> auditModel = new ContainerWrapperFromObjectWrapperModel<AuditingConfigurationType, SystemConfigurationType>(
            Model.of(getModelObject().getObjectWrapper()),
            ItemPath.create(SystemConfigurationType.F_LOGGING, LoggingConfigurationType.F_AUDITING));
    PrismContainerPanel<AuditingConfigurationType> auditPanel = new PrismContainerPanel<>(ID_AUDITING,
            auditModel, true, new Form<>("form"), null, getPageBase());
    add(auditPanel);
    setOutputMarkupId(true);
}

From source file:com.evolveum.midpoint.web.component.assignment.AbstractRoleAssignmentPanel.java

License:Apache License

protected Fragment initCustomButtonToolbar(String contentAreaId) {
    Fragment searchContainer = new Fragment(contentAreaId, ID_BUTTON_TOOLBAR_FRAGMENT, this);

    AjaxIconButton newObjectIcon = getMultivalueContainerListPanel().getNewItemButton(ID_NEW_ITEM_BUTTON);
    searchContainer.add(newObjectIcon);/*from www .  j ava  2s.co  m*/

    AjaxIconButton showAllAssignmentsButton = new AjaxIconButton(ID_SHOW_ALL_ASSIGNMENTS_BUTTON,
            new Model<>("fa fa-address-card"),
            createStringResource("AssignmentTablePanel.menu.showAllAssignments")) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget ajaxRequestTarget) {
            showAllAssignments(ajaxRequestTarget);
        }
    };
    searchContainer.addOrReplace(showAllAssignmentsButton);
    showAllAssignmentsButton.setOutputMarkupId(true);
    showAllAssignmentsButton.add(new VisibleEnableBehaviour() {

        private static final long serialVersionUID = 1L;

        public boolean isVisible() {
            return showAllAssignmentsVisible();
        }
    });
    return searchContainer;
}

From source file:com.evolveum.midpoint.web.component.assignment.AbstractRoleAssignmentPanel.java

License:Apache License

@Override
protected Fragment getCustomSpecificContainers(String contentAreaId,
        ContainerValueWrapper<AssignmentType> modelObject) {
    Fragment specificContainers = new Fragment(contentAreaId, AssignmentPanel.ID_SPECIFIC_CONTAINERS_FRAGMENT,
            this);
    specificContainers.add(getSpecificContainerPanel(modelObject));
    return specificContainers;
}

From source file:com.evolveum.midpoint.web.component.assignment.AssignmentPanel.java

License:Apache License

protected Fragment getCustomSpecificContainers(String contentAreaId,
        ContainerValueWrapper<AssignmentType> modelObject) {
    Fragment specificContainers = new Fragment(contentAreaId, AssignmentPanel.ID_SPECIFIC_CONTAINERS_FRAGMENT,
            this);
    specificContainers.add(getSpecificContainerPanel(modelObject));
    return specificContainers;
}

From source file:com.evolveum.midpoint.web.component.assignment.InducedEntitlementsPanel.java

License:Apache License

@Override
protected Fragment getCustomSpecificContainers(String contentAreaId,
        ContainerValueWrapper<AssignmentType> modelObject) {
    Fragment specificContainers = new Fragment(contentAreaId, AssignmentPanel.ID_SPECIFIC_CONTAINERS_FRAGMENT,
            this);
    specificContainers.add(getConstructionAssociationPanel(modelObject));

    specificContainers.add(super.getBasicContainerPanel(ID_ASSIGNMENT_DETAILS, new Model(modelObject)));
    return specificContainers;
}

From source file:com.evolveum.midpoint.web.page.login.PageAbstractFlow.java

License:Apache License

private void initLayout() {

    //      initAccessBehaviour(mainForm);
    //      add(mainForm);

    Form<?> mainForm = new Form<>(ID_MAIN_FORM);
    mainForm.setMultiPart(true);//from   w  w w . j  av a  2 s. com
    add(mainForm);

    WebMarkupContainer content = null;
    Fragment fragment = null;
    if (!isCustomFormDefined()) {
        fragment = new Fragment(ID_CONTENT_AREA, "staticContent", this);
        content = initStaticLayout();

    } else {
        fragment = new Fragment(ID_CONTENT_AREA, "dynamicContent", this);
        content = initDynamicLayout();

    }

    fragment.setOutputMarkupId(true);
    content.setOutputMarkupId(true);
    initCaptchaAndButtons(fragment);
    fragment.add(content);
    mainForm.add(fragment);

}

From source file:com.evolveum.midpoint.web.page.login.PageSelfRegistration.java

License:Apache License

@Override
protected void submitRegistration(AjaxRequestTarget target) {

    OperationResult result = runPrivileged(new Producer<OperationResult>() {

        private static final long serialVersionUID = 1L;

        @Override/*w w w .  j av a2s  .  c o m*/
        public OperationResult run() {

            Task task = createAnonymousTask(OPERATION_SAVE_USER);
            task.setChannel(SchemaConstants.CHANNEL_GUI_SELF_REGISTRATION_URI);
            OperationResult result = new OperationResult(OPERATION_SAVE_USER);
            saveUser(task, result);
            result.computeStatus();
            return result;
        }

    });

    if (result.getStatus() == OperationResultStatus.SUCCESS) {
        getSession().success(createStringResource("PageSelfRegistration.registration.success").getString());

        switch (getSelfRegistrationConfiguration().getAuthenticationMethod()) {
        case MAIL:
            target.add(PageSelfRegistration.this);
            break;
        case SMS:
            throw new UnsupportedOperationException();
        case NONE:
            setResponsePage(PageLogin.class);
        }
        LOGGER.trace("Registration for user {} was successfull.", getUserModel().getObject());

    } else {
        getSession().error(createStringResource("PageSelfRegistration.registration.error", result.getMessage())
                .getString());
        // removePassword(target);
        updateCaptcha(target);
        target.add(getFeedbackPanel());
        LOGGER.error("Failed to register user {}. Reason {}", getUserModel().getObject(), result.getMessage());
        return;

    }

    target.add(getFeedbackPanel());
    MultiLineLabel label = new MultiLineLabel(ID_REGISTRATION_SUBMITED,
            createStringResource("PageSelfRegistration.registration.confirm.message"));
    Fragment messageContent = new Fragment("contentArea", "messageContent", this);
    messageContent.add(label);
    getMainForm().replace(messageContent);
    target.add(this);

}

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

License:Apache License

public ActivityPage(PageParameters params) {
    super(params);
    setupPage("", "");

    // parameters
    int daysBack = WicketUtils.getDaysBack(params);
    if (daysBack < 1) {
        daysBack = app().settings().getInteger(Keys.web.activityDuration, 7);
    }// w  w  w .  ja v a  2 s .  c  o m
    String objectId = WicketUtils.getObject(params);

    // determine repositories to view and retrieve the activity
    List<RepositoryModel> models = getRepositories(params);
    List<Activity> recentActivity = ActivityUtils.getRecentActivity(app().settings(), app().repositories(),
            models, daysBack, objectId, getTimeZone());

    String headerPattern;
    if (daysBack == 1) {
        // today
        if (recentActivity.size() == 0) {
            headerPattern = getString("gb.todaysActivityNone");
        } else {
            headerPattern = getString("gb.todaysActivityStats");
        }
    } else {
        // multiple days
        if (recentActivity.size() == 0) {
            headerPattern = getString("gb.recentActivityNone");
        } else {
            headerPattern = getString("gb.recentActivityStats");
        }
    }

    if (recentActivity.size() == 0) {
        // no activity, skip graphs and activity panel
        add(new Label("subheader", MessageFormat.format(headerPattern, daysBack)));
        add(new Label("chartsPanel").setVisible(false));
        add(new Label("activityPanel"));
    } else {
        // calculate total commits and total authors
        int totalCommits = 0;
        Set<String> uniqueAuthors = new HashSet<String>();
        for (Activity activity : recentActivity) {
            totalCommits += activity.getCommitCount();
            uniqueAuthors.addAll(activity.getAuthorMetrics().keySet());
        }
        int totalAuthors = uniqueAuthors.size();

        // add the subheader with stat numbers
        add(new Label("subheader", MessageFormat.format(headerPattern, daysBack, totalCommits, totalAuthors)));

        // create the activity charts
        if (app().settings().getBoolean(Keys.web.generateActivityGraph, true)) {
            Charts charts = createCharts(recentActivity);
            add(charts);
            add(new Fragment("chartsPanel", "chartsFragment", ActivityPage.this));
        } else {
            add(new Label("chartsPanel").setVisible(false));
        }

        // add activity panel
        add(new ActivityPanel("activityPanel", recentActivity));
    }
}

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

License:Apache License

public ComparePage(PageParameters params) {
    super(params);
    Repository r = getRepository();//from w  w w. j  av a2  s  .c  o  m
    RepositoryModel repository = getRepositoryModel();

    if (StringUtils.isEmpty(objectId)) {
        // seleciton form
        add(new Label("comparison").setVisible(false));
    } else {
        // active comparison
        Fragment comparison = new Fragment("comparison", "comparisonFragment", ComparePage.this);
        add(comparison);

        RevCommit fromCommit;
        RevCommit toCommit;

        String[] parts = objectId.split("\\.\\.");
        if (parts[0].startsWith("refs/") && parts[1].startsWith("refs/")) {
            // set the ref models
            fromRefId.setObject(parts[0]);
            toRefId.setObject(parts[1]);

            fromCommit = getCommit(r, fromRefId.getObject());
            toCommit = getCommit(r, toRefId.getObject());
        } else {
            // set the id models
            fromCommitId.setObject(parts[0]);
            toCommitId.setObject(parts[1]);

            fromCommit = getCommit(r, fromCommitId.getObject());
            toCommit = getCommit(r, toCommitId.getObject());
        }

        // prepare submodules
        getSubmodules(toCommit);

        final String startId = fromCommit.getId().getName();
        final String endId = toCommit.getId().getName();

        // commit ids
        fromCommitId.setObject(startId);
        toCommitId.setObject(endId);

        final List<String> imageExtensions = app().settings().getStrings(Keys.web.imageExtensions);
        final ImageDiffHandler handler = new ImageDiffHandler(this, repositoryName, fromCommit.getName(),
                toCommit.getName(), imageExtensions);
        final DiffComparator diffComparator = WicketUtils.getDiffComparator(params);
        final int tabLength = app().settings().getInteger(Keys.web.tabLength, 4);
        final DiffOutput diff = DiffUtils.getDiff(r, fromCommit, toCommit, diffComparator, DiffOutputType.HTML,
                handler, tabLength);
        if (handler.getImgDiffCount() > 0) {
            addBottomScript("scripts/imgdiff.js"); // Tiny support script for image diffs
        }

        // add compare diffstat
        int insertions = 0;
        int deletions = 0;
        for (PathChangeModel pcm : diff.stat.paths) {
            insertions += pcm.insertions;
            deletions += pcm.deletions;
        }
        comparison.add(new DiffStatPanel("diffStat", insertions, deletions));

        // compare page links
        //         comparison.add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class,
        //               WicketUtils.newRangeParameter(repositoryName, fromCommitId.toString(), toCommitId.getObject())));

        // display list of commits
        comparison.add(
                new LogPanel("commitList", repositoryName, objectId, r, 0, 0, repository.showRemoteBranches));

        // changed paths list
        comparison.add(new CommitLegendPanel("commitLegend", diff.stat.paths));
        ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(diff.stat.paths);
        DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {
            private static final long serialVersionUID = 1L;
            int counter;

            @Override
            public void populateItem(final Item<PathChangeModel> item) {
                final PathChangeModel entry = item.getModelObject();
                Label changeType = new Label("changeType", "");
                WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);
                setChangeTypeTooltip(changeType, entry.changeType);
                item.add(changeType);
                item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true));

                boolean hasSubmodule = false;
                String submodulePath = null;
                if (entry.isTree()) {
                    // tree
                    item.add(new LinkPanel("pathName", null, entry.path, TreePage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path)));
                } else if (entry.isSubmodule()) {
                    // submodule
                    String submoduleId = entry.objectId;
                    SubmoduleModel submodule = getSubmodule(entry.path);
                    submodulePath = submodule.gitblitPath;
                    hasSubmodule = submodule.hasSubmodule;

                    // add relative link
                    item.add(new LinkPanel("pathName", "list",
                            entry.path + " @ " + getShortObjectId(submoduleId), "#n" + entry.objectId));
                } else {
                    // add relative link
                    item.add(new LinkPanel("pathName", "list", entry.path, "#n" + entry.objectId));
                }

                // quick links
                if (entry.isSubmodule()) {
                    // submodule
                    item.add(new ExternalLink("patch", "").setEnabled(false));
                    item.add(new BookmarkablePageLink<Void>("view", CommitPage.class,
                            WicketUtils.newObjectParameter(submodulePath, entry.objectId))
                                    .setEnabled(hasSubmodule));
                    item.add(new ExternalLink("raw", "").setEnabled(false));
                    item.add(new ExternalLink("blame", "").setEnabled(false));
                    item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
                } else {
                    // tree or blob
                    item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class,
                            WicketUtils.newBlobDiffParameter(repositoryName, startId, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    item.add(new BookmarkablePageLink<Void>("view", BlobPage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, endId, entry.path);
                    item.add(new ExternalLink("raw", rawUrl)
                            .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.ADD)
                                            && !entry.changeType.equals(ChangeType.DELETE)));
                    item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
                }
                WicketUtils.setAlternatingBackground(item, counter);
                counter++;
            }
        };
        comparison.add(pathsView);
        comparison.add(new Label("diffText", diff.content).setEscapeModelStrings(false));
    }

    // set the default DiffComparator
    DiffComparator diffComparator = WicketUtils.getDiffComparator(params);
    ignoreWhitespace.setObject(DiffComparator.IGNORE_WHITESPACE == diffComparator);

    //
    // ref selection form
    //
    SessionlessForm<Void> refsForm = new SessionlessForm<Void>("compareRefsForm", getClass(),
            getPageParameters()) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            String from = ComparePage.this.fromRefId.getObject();
            String to = ComparePage.this.toRefId.getObject();
            boolean ignoreWS = ignoreWhitespace.getObject();

            PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to);
            if (ignoreWS) {
                params.add("w", 1);
            }

            String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(ComparePage.class, params);
            getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl));
        }
    };

    List<String> refs = new ArrayList<String>();
    for (RefModel ref : JGitUtils.getLocalBranches(r, true, -1)) {
        refs.add(ref.getName());
    }
    if (repository.showRemoteBranches) {
        for (RefModel ref : JGitUtils.getRemoteBranches(r, true, -1)) {
            refs.add(ref.getName());
        }
    }
    for (RefModel ref : JGitUtils.getTags(r, true, -1)) {
        refs.add(ref.getName());
    }
    refsForm.add(new DropDownChoice<String>("fromRef", fromRefId, refs).setEnabled(refs.size() > 0));
    refsForm.add(new DropDownChoice<String>("toRef", toRefId, refs).setEnabled(refs.size() > 0));
    refsForm.add(new Label("ignoreWhitespaceLabel",
            getString(DiffComparator.IGNORE_WHITESPACE.getTranslationKey())));
    refsForm.add(new CheckBox("ignoreWhitespaceCheckbox", ignoreWhitespace));
    add(refsForm);

    //
    // manual ids form
    //
    SessionlessForm<Void> idsForm = new SessionlessForm<Void>("compareIdsForm", getClass(),
            getPageParameters()) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            String from = ComparePage.this.fromCommitId.getObject();
            String to = ComparePage.this.toCommitId.getObject();
            boolean ignoreWS = ignoreWhitespace.getObject();

            PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to);
            if (ignoreWS) {
                params.add("w", 1);
            }
            String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(ComparePage.class, params);
            getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl));
        }
    };

    TextField<String> fromIdField = new TextField<String>("fromId", fromCommitId);
    WicketUtils.setInputPlaceholder(fromIdField, getString("gb.from") + "...");
    idsForm.add(fromIdField);

    TextField<String> toIdField = new TextField<String>("toId", toCommitId);
    WicketUtils.setInputPlaceholder(toIdField, getString("gb.to") + "...");
    idsForm.add(toIdField);
    idsForm.add(new Label("ignoreWhitespaceLabel",
            getString(DiffComparator.IGNORE_WHITESPACE.getTranslationKey())));
    idsForm.add(new CheckBox("ignoreWhitespaceCheckbox", ignoreWhitespace));
    add(idsForm);

    r.close();
}