Example usage for org.apache.wicket.markup.repeater.data DataView DataView

List of usage examples for org.apache.wicket.markup.repeater.data DataView DataView

Introduction

In this page you can find the example usage for org.apache.wicket.markup.repeater.data DataView DataView.

Prototype

protected DataView(String id, IDataProvider<T> dataProvider) 

Source Link

Usage

From source file:guru.mmp.application.web.template.pages.ReportDefinitionAdministrationPage.java

License:Apache License

/**
 * Constructs a new <code>ReportDefinitionAdministrationPage</code>.
 *///w w  w.ja  v a2s. c o  m
@SuppressWarnings("unused")
public ReportDefinitionAdministrationPage() {
    super("Report Definitions");

    try {
        /*
         * The table container, which allows the table and its associated navigator to be updated
         * using AJAX.
         */
        WebMarkupContainer tableContainer = new WebMarkupContainer("tableContainer");
        tableContainer.setOutputMarkupId(true);
        add(tableContainer);

        // The dialog used to confirm the removal of a group
        RemoveDialog removeDialog = new RemoveDialog(tableContainer);
        add(removeDialog);

        // The "addLink" link
        Link<Void> addLink = new Link<Void>("addLink") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onClick() {
                AddReportDefinitionPage page = new AddReportDefinitionPage(getPageReference());

                setResponsePage(page);
            }
        };
        tableContainer.add(addLink);

        ReportDefinitionSummaryDataProvider dataProvider = new ReportDefinitionSummaryDataProvider();

        // The report definition data view
        DataView<ReportDefinitionSummary> dataView = new DataView<ReportDefinitionSummary>("reportDefinition",
                dataProvider) {
            private static final long serialVersionUID = 1000000;

            protected void populateItem(Item<ReportDefinitionSummary> item) {
                item.add(new Label("name", new PropertyModel<String>(item.getModel(), "name")));

                // The "updateLink" link
                Link<Void> updateLink = new Link<Void>("updateLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick() {
                        ReportDefinitionSummary reportDefinitionSummary = item.getModelObject();

                        try {
                            ReportDefinition reportDefinition = reportingService
                                    .getReportDefinition(reportDefinitionSummary.getId());

                            UpdateReportDefinitionPage page = new UpdateReportDefinitionPage(getPageReference(),
                                    new Model<>(reportDefinition));

                            setResponsePage(page);
                        } catch (Throwable e) {
                            logger.error(String.format("Failed to retrieve the report definition (%s)",
                                    reportDefinitionSummary.getId()), e);

                            error(String.format("Failed to retrieve the report definition (%s)",
                                    reportDefinitionSummary.getId()));
                        }
                    }
                };

                item.add(updateLink);

                // The "removeLink" link
                AjaxLink<Void> removeLink = new AjaxLink<Void>("removeLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        ReportDefinitionSummary reportDefinitionSummary = item.getModelObject();

                        if (reportDefinitionSummary != null) {
                            removeDialog.show(target, reportDefinitionSummary);
                        } else {
                            target.add(tableContainer);
                        }
                    }
                };
                item.add(removeLink);
            }
        };
        dataView.setItemsPerPage(10);
        dataView.setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
        tableContainer.add(dataView);

        tableContainer.add(new PagingNavigator("navigator", dataView));
    } catch (Throwable e) {
        throw new WebApplicationException("Failed to initialise the ReportDefinitionAdministrationPage", e);
    }
}

From source file:guru.mmp.application.web.template.pages.UserAdministrationPage.java

License:Apache License

/**
 * Constructs a new <code>UserAdministrationPage</code>.
 *//*  w  w w .j a  v  a 2  s  .  c om*/
public UserAdministrationPage() {
    super("Users");

    try {
        /*
         * Retrieve the list of user directories for the organisation the currently logged on user
         * is associated with and default to the first user directory.
         */
        List<UserDirectory> userDirectories = getUserDirectories();

        userDirectory = userDirectories.get(0);

        /*
         * The table container, which allows the table and its associated navigator to be updated
         * using AJAX.
         */
        WebMarkupContainer tableContainer = new WebMarkupContainer("tableContainer");
        tableContainer.setOutputMarkupId(true);
        add(tableContainer);

        // The dialog used to confirm the removal of a user
        RemoveDialog removeDialog = new RemoveDialog(tableContainer);
        add(removeDialog);

        // The "addLink" used to add a new user
        Link<Void> addLink = new Link<Void>("addLink") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onClick() {
                AddUserPage page = new AddUserPage(getPageReference(), userDirectory.getId());

                setResponsePage(page);
            }
        };
        tableContainer.add(addLink);

        FilteredUserDataProvider dataProvider = new FilteredUserDataProvider(userDirectory.getId());

        // The "userDirectoryDropdownMenu" dropdown button
        DropdownMenu<UserDirectory> userDirectoryDropdownMenu = new DropdownMenu<UserDirectory>(
                "userDirectoryDropdownMenu", new PropertyModel<>(this, "userDirectory"), userDirectories,
                "fa fa-users") {
            @Override
            protected String getDisplayValue(UserDirectory menuItem) {
                return menuItem.getName();
            }

            @Override
            protected void onMenuItemSelected(AjaxRequestTarget target, UserDirectory menuItem) {
                dataProvider.setUserDirectoryId(userDirectory.getId());

                if (target != null) {
                    target.add(tableContainer);

                    target.appendJavaScript(
                            "jQuery('[data-toggle=\"tooltip\"]').tooltip({container: 'body', animation: false});");
                }
            }
        };
        userDirectoryDropdownMenu.setVisible(userDirectories.size() > 1);
        tableContainer.add(userDirectoryDropdownMenu);

        // The "filterForm" form
        Form<Void> filterForm = new Form<>("filterForm");
        filterForm.setMarkupId("filterForm");
        filterForm.setOutputMarkupId(true);

        // The "filter" field
        TextField<String> filterField = new TextField<>("filter", new PropertyModel<>(dataProvider, "filter"));
        filterForm.add(filterField);

        // The "filterButton" button
        Button filterButton = new Button("filterButton") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onSubmit() {
            }
        };
        filterButton.setDefaultFormProcessing(true);
        filterForm.add(filterButton);

        // The "resetButton" button
        Button resetButton = new Button("resetButton") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onSubmit() {
                dataProvider.setFilter("");
            }
        };
        filterForm.add(resetButton);

        tableContainer.add(filterForm);

        // The user data view
        DataView<User> dataView = new DataView<User>("user", dataProvider) {
            private static final long serialVersionUID = 1000000;

            @Override
            protected void populateItem(Item<User> item) {
                User user = item.getModelObject();

                item.add(new Label("username", new PropertyModel<String>(item.getModel(), "username")));
                item.add(new Label("firstName", new PropertyModel<String>(item.getModel(), "firstName")));
                item.add(new Label("lastName", new PropertyModel<String>(item.getModel(), "lastName")));

                // The "userGroupsLink" link
                Link<Void> userGroupsLink = new Link<Void>("userGroupsLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick() {
                        User user = item.getModelObject();

                        if (!user.getUsername().equalsIgnoreCase("Administrator")) {
                            UserGroupsPage page = new UserGroupsPage(getPageReference(), userDirectory.getId(),
                                    user.getUsername());

                            setResponsePage(page);
                        }
                    }
                };
                item.add(userGroupsLink);

                // The "updateLink" link
                Link<Void> updateLink = new Link<Void>("updateLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick() {
                        User user = item.getModelObject();

                        if (!user.getUsername().equalsIgnoreCase("Administrator")) {
                            UpdateUserPage page = new UpdateUserPage(getPageReference(), item.getModel());

                            setResponsePage(page);
                        }
                    }
                };
                updateLink.setVisible(!user.isReadOnly());
                item.add(updateLink);

                // The "resetPassword" link
                Link<Void> resetPasswordLink = new Link<Void>("resetPasswordLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick() {
                        ResetUserPasswordPage page = new ResetUserPasswordPage(getPageReference(),
                                new Model<>(item.getModelObject()));

                        setResponsePage(page);
                    }
                };
                resetPasswordLink.setVisible(!user.isReadOnly());
                item.add(resetPasswordLink);

                // The "removeLink" link
                AjaxLink<Void> removeLink = new AjaxLink<Void>("removeLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        User user = item.getModelObject();

                        if (user != null) {
                            if (!user.getUsername().equalsIgnoreCase("Administrator")) {
                                removeDialog.show(target, user);
                            }
                        } else {
                            target.add(tableContainer);
                        }
                    }
                };
                removeLink.setVisible(!user.isReadOnly());
                item.add(removeLink);
            }
        };
        dataView.setItemsPerPage(10);
        dataView.setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
        tableContainer.add(dataView);

        tableContainer.add(new PagingNavigator("navigator", dataView));
    } catch (Throwable e) {
        throw new WebApplicationException("Failed to initialise the UserAdministrationPage", e);
    }
}

From source file:guru.mmp.application.web.template.pages.UserDirectoryAdministrationPage.java

License:Apache License

/**
 * Constructs a new <code>UserDirectoryAdministrationPage</code>.
 *//*from   w ww  .  ja  v a  2 s . c o  m*/
public UserDirectoryAdministrationPage() {
    super("User Directories");

    try {
        /*
         * The table container, which allows the table and its associated navigator to be updated
         * using AJAX.
         */
        WebMarkupContainer tableContainer = new WebMarkupContainer("tableContainer");
        tableContainer.setOutputMarkupId(true);
        add(tableContainer);

        // The dialog used to confirm the removal of a user directory
        RemoveDialog removeDialog = new RemoveDialog(tableContainer);
        add(removeDialog);

        // The dialog used to select the type of user directory being added
        AddDialog selectUserDirectoryTypeDialog = new AddDialog();
        add(selectUserDirectoryTypeDialog);

        // The "addLink" used to add a new user directory
        AjaxLink<Void> addLink = new AjaxLink<Void>("addLink") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onClick(AjaxRequestTarget target) {
                selectUserDirectoryTypeDialog.show(target);
            }
        };
        tableContainer.add(addLink);

        FilteredUserDirectoryDataProvider dataProvider = new FilteredUserDirectoryDataProvider();

        // The "filterForm" form
        Form<Void> filterForm = new Form<>("filterForm");
        filterForm.setMarkupId("filterForm");
        filterForm.setOutputMarkupId(true);

        // The "filter" field
        TextField<String> filterField = new TextField<>("filter", new PropertyModel<>(dataProvider, "filter"));
        filterForm.add(filterField);

        // The "filterButton" button
        Button filterButton = new Button("filterButton") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onSubmit() {
            }
        };
        filterButton.setDefaultFormProcessing(true);
        filterForm.add(filterButton);

        // The "resetButton" button
        Button resetButton = new Button("resetButton") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onSubmit() {
                dataProvider.setFilter("");
            }
        };
        filterForm.add(resetButton);

        tableContainer.add(filterForm);

        // The user directory data view
        DataView<UserDirectory> dataView = new DataView<UserDirectory>("userDirectory", dataProvider) {
            private static final long serialVersionUID = 1000000;

            @Override
            protected void populateItem(Item<UserDirectory> item) {
                item.add(new Label("name", new PropertyModel<String>(item.getModel(), "name")));
                item.add(new Label("type", new PropertyModel<String>(item.getModel(), "type.name")));

                // The "updateLink" link
                Link<Void> updateLink = new Link<Void>("updateLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick() {
                        UpdateUserDirectoryPage page = new UpdateUserDirectoryPage(getPageReference(),
                                item.getModel());

                        setResponsePage(page);
                    }
                };
                item.add(updateLink);

                // The "removeLink" link
                AjaxLink<Void> removeLink = new AjaxLink<Void>("removeLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        UserDirectory userDirectory = item.getModelObject();

                        if (userDirectory != null) {
                            removeDialog.show(target, userDirectory);
                        } else {
                            target.add(tableContainer);
                        }
                    }
                };
                item.add(removeLink);
            }
        };
        dataView.setItemsPerPage(10);
        dataView.setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
        tableContainer.add(dataView);

        tableContainer.add(new PagingNavigator("navigator", dataView));
    } catch (Throwable e) {
        throw new WebApplicationException("Failed to initialise the UserDirectoryAdministrationPage", e);
    }
}

From source file:guru.mmp.application.web.template.pages.UserGroupsPage.java

License:Apache License

/**
 * Constructs a new <code>UserGroupsPage</code>.
 *
 * @param previousPage    the previous page
 * @param userDirectoryId the Universally Unique Identifier (UUID) used to uniquely identify the
 *                        user directory
 * @param username        the username identifying the user
 *///w  w w.  ja va 2 s .co  m
UserGroupsPage(PageReference previousPage, UUID userDirectoryId, String username) {
    super("User Groups", username);

    try {
        /*
         * The table container, which allows the table and its associated navigator to be updated
         * using AJAX.
         */
        WebMarkupContainer tableContainer = new WebMarkupContainer("tableContainer");
        tableContainer.setOutputMarkupId(true);
        add(tableContainer);

        // The "backLink" link
        Link<Void> backLink = new Link<Void>("backLink") {
            private static final long serialVersionUID = 1000000;

            @Override
            public void onClick() {
                setResponsePage(previousPage.getPage());
            }
        };
        tableContainer.add(backLink);

        // The "addUserToGroupForm" form
        DropDownChoice<String> groupNameField = new DropDownChoice<>("groupName",
                new PropertyModel<>(this, "groupName"), getGroupOptions(userDirectoryId, username));

        groupNameField.setRequired(true);

        Form<Void> addUserToGroupForm = new Form<Void>("addUserToGroupForm") {
            private static final long serialVersionUID = 1000000;

            @Override
            protected void onSubmit() {
                WebSession session = getWebApplicationSession();

                try {
                    securityService.addUserToGroup(userDirectoryId, username, groupName);

                    logger.info(String.format(
                            "User (%s) added the user (%s) to the group (%s) for the user directory (%s)",
                            session.getUsername(), username, groupName, userDirectoryId));

                    groupNameField.setChoices(getGroupOptions(userDirectoryId, username));
                    groupNameField.setModelObject(null);
                } catch (Throwable e) {
                    logger.error(String.format(
                            "Failed to add the user (%s) to the group (%s) for the user directory (%s): %s",
                            username, groupName, userDirectoryId, e.getMessage()), e);

                    UserGroupsPage.this.error(
                            String.format("Failed to add the user %s to the group %s", username, groupName));
                }
            }
        };

        addUserToGroupForm.setMarkupId("addUserToGroupForm");
        addUserToGroupForm.setOutputMarkupId(true);
        tableContainer.add(addUserToGroupForm);

        addUserToGroupForm.add(groupNameField);

        // The group data view
        GroupsForUserDataProvider dataProvider = new GroupsForUserDataProvider(userDirectoryId, username);

        DataView<Group> dataView = new DataView<Group>("group", dataProvider) {
            private static final long serialVersionUID = 1000000;

            @Override
            protected void populateItem(Item<Group> item) {
                Group group = item.getModelObject();

                String name = group.getGroupName();

                item.add(new Label("name", Model.of(name)));

                // The "removeLink" link
                Link<Void> removeLink = new Link<Void>("removeLink") {
                    private static final long serialVersionUID = 1000000;

                    @Override
                    public void onClick() {
                        WebSession session = getWebApplicationSession();

                        Group group = item.getModelObject();

                        try {
                            securityService.removeUserFromGroup(userDirectoryId, username,
                                    group.getGroupName());

                            logger.info(String.format(
                                    "User (%s) removed the user (%s) from the group (%s) for the user directory (%s)",
                                    session.getUsername(), username, group.getGroupName(), userDirectoryId));

                            groupNameField.setChoices(getGroupOptions(userDirectoryId, username));
                            groupNameField.setModelObject(null);
                        } catch (Throwable e) {
                            logger.error(String.format(
                                    "Failed to remove the user (%s) from the group (%s) for the user directory (%s)"
                                            + ": %s",
                                    username, group.getGroupName(), userDirectoryId, e.getMessage()), e);

                            UserGroupsPage.this
                                    .error(String.format("Failed to remove the user %s from the group %s",
                                            username, group.getGroupName()));
                        }
                    }
                };
                item.add(removeLink);
            }
        };

        dataView.setItemsPerPage(10);
        dataView.setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance());
        tableContainer.add(dataView);

        tableContainer.add(new PagingNavigator("navigator", dataView));
    } catch (Throwable e) {
        throw new WebApplicationException("Failed to initialise the UserGroupsPage", e);
    }
}

From source file:jdave.wicket.DataViewSpec.java

License:Apache License

@Override
protected DataView<String> newComponent(String id, IModel<List<String>> model) {
    return dataView = new DataView<String>(id,
            new ListDataProvider<String>(Arrays.asList("one", "two", "three"))) {
        @Override/*w  w w  .j a  v a  2s  . com*/
        protected void populateItem(Item<String> item) {
        }
    };
}

From source file:jp.go.nict.langrid.management.web.view.component.list.AbstractListPanel.java

License:Open Source License

/**
 * //from w w  w .  jav a  2s.co  m
 * 
 */
public void makeList(IDataProvider<T> provider) {
    DataView<T> dataView = new DataView<T>(getListId(), provider) {
        @Override
        protected void populateItem(Item<T> item) {
            addListItem(gridId, newChildId(), item);
        }

        @Override
        protected int getViewSize() {
            int size = super.getViewSize();
            emptyPanel.setVisible(size == 0);
            return size;
        }

        private static final long serialVersionUID = 1L;
    };
    dataView.setItemsPerPage(getPAGING_COUNT());
    boolean isVisible = (dataView.getRowCount() > getPAGING_COUNT());
    topPagingNavigator = getPagingNavigator(gridId, getTopNavigatorId(), dataView);
    topPagingNavigator.setVisible(isVisible);
    rewriteWrapper.addOrReplace(topPagingNavigator);
    underPagingNavigator = getPagingNavigator(gridId, getUnderNavigatorId(), dataView);
    underPagingNavigator.setVisible(isVisible);
    rewriteWrapper.addOrReplace(underPagingNavigator);
    rewriteWrapper.addOrReplace(getHeaderPanel());
    emptyPanel = getEmptyRowPanel();
    rewriteWrapper.addOrReplace(emptyPanel);
    pageable = dataView;
    setCurrentIndex(0);
    rewriteWrapper.addOrReplace(dataView);
}

From source file:net.mad.ads.manager.web.pages.manager.campaign.CampaignManagerPage.java

License:Open Source License

public CampaignManagerPage() {
    super();//from  w ww .ja v  a2  s .  c  o  m

    add(new BookmarkablePageLink<Void>("newCampaign", NewCampaignPage.class).add(new ButtonBehavior()));

    DataView<Campaign> dataView = new DataView<Campaign>("pageable", new CampaignDataProvider()) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final Item<Campaign> item) {
            final Campaign campaign = item.getModelObject();
            item.add(new Label("id", String.valueOf(campaign.getId())));
            item.add(new Label("name", campaign.getName()));
            item.add(new Label("created", DateUtil.format(campaign.getCreated())));
            item.add(new EditPanel("editCampaign", item.getModel()));

            item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return (item.getIndex() % 2 == 1) ? "even" : "odd";
                }
            }));
        }
    };

    dataView.setItemsPerPage(5);
    add(dataView);

    add(new PagingNavigator("navigator", dataView));

}

From source file:net.mad.ads.manager.web.pages.manager.site.edit.EditSitePage.java

License:Open Source License

public EditSitePage(final Site site) {
    super();/*www  .ja v  a 2s . co m*/

    add(new Label("sitename", site.getName()));

    add(new FeedbackPanel("feedback"));
    add(new InputForm("inputForm", site));

    final FeedbackPanel placeFeed = new FeedbackPanel("placeFeedback");
    add(placeFeed);

    add(new Link<Void>("newPlace") {
        @Override
        public void onClick() {
            setResponsePage(new NewPlacePage(site));
        }
    }.add(new ButtonBehavior()));

    add(new Link<Void>("backLink") {
        @Override
        public void onClick() {
            setResponsePage(new SiteManagerPage());
        }
    }.add(new ButtonBehavior()));

    DataView<Place> dataView = new DataView<Place>("pageable", new PlaceDataProvider(site)) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final Item<Place> item) {
            final Place place = item.getModelObject();
            item.add(new Label("id", String.valueOf(place.getId())));
            item.add(new Label("name", place.getName()));
            item.add(new Label("created", DateUtil.format(place.getCreated())));
            item.add(new EditPanel("editPlace", item.getModel()));

            item.add(new ConfirmLink<Void>("deletePlace", getPage().getString("dialog.confirm.message")) {
                @Override
                public void onClick() {
                    try {
                        RuntimeContext.getPlaceService().delete(place);
                        setResponsePage(getPage());
                    } catch (Exception e) {
                        logger.error("", e);
                        placeFeed.error(getPage().getString("place.delete.error"));
                    }
                }
            });

            item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return (item.getIndex() % 2 == 1) ? "even" : "odd";
                }
            }));
        }
    };

    dataView.setItemsPerPage(5);
    add(dataView);

    add(new PagingNavigator("navigator", dataView));
}

From source file:net.mad.ads.manager.web.pages.manager.site.SiteManagerPage.java

License:Open Source License

public SiteManagerPage() {
    super();//from w  w  w  .  j a  v a2s .c om

    add(new BookmarkablePageLink<Void>("newSite", NewSitePage.class).add(new ButtonBehavior()));

    DataView<Site> dataView = new DataView<Site>("pageable", new SiteDataProvider()) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final Item<Site> item) {
            final Site site = item.getModelObject();
            item.add(new Label("id", String.valueOf(site.getId())));
            item.add(new Label("name", site.getName()));
            item.add(new Label("url", site.getUrl()));
            item.add(new Label("created", DateUtil.format(site.getCreated())));
            item.add(new EditPanel("editSite", item.getModel()));

            item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return (item.getIndex() % 2 == 1) ? "even" : "odd";
                }
            }));
        }
    };

    dataView.setItemsPerPage(5);
    add(dataView);

    add(new PagingNavigator("navigator", dataView));
}

From source file:org.antbear.jee.wicket.PlainDataView.java

License:Apache License

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

    add(new FeedbackPanel("feedback"));

    final DataView<Integer> dataView = new DataView<Integer>("list", new IntegerDataProvider()) {
        private static final long serialVersionUID = 1L;

        @Override/*from w  ww.ja  va  2s.  c  o m*/
        protected void populateItem(Item item) {
            item.add(new Label("text", item.getDefaultModelObjectAsString()));
        }
    };

    final Form<Void> form = new Form<Void>("form") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit() {
            ++submitCount;
            info("Form submitted " + submitCount + " times");
        }
    };

    final Button submitButton = new Button("submit") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            IntegerDatabase db = DatabaseLocator.locate();
            if (db.size() > 0) {
                db.removeLast();
            } else {
                error("No more items.");
            }
        }
    };

    add(form);
    form.add(dataView);
    form.add(submitButton);

    form.add(new SubmitLink("restoreDatabase") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            info("Database restored");
            DatabaseLocator.locate().restore();
        }
    });
}