Example usage for org.apache.wicket.model AbstractReadOnlyModel AbstractReadOnlyModel

List of usage examples for org.apache.wicket.model AbstractReadOnlyModel AbstractReadOnlyModel

Introduction

In this page you can find the example usage for org.apache.wicket.model AbstractReadOnlyModel AbstractReadOnlyModel.

Prototype

AbstractReadOnlyModel

Source Link

Usage

From source file:de.javakaffee.msm.bench.ListLightPage.java

License:Apache License

/**
 * Constructor that is invoked when page is invoked without a session.
 * /*from   ww w  .  ja  v  a2  s  .com*/
 * @param parameters
 *            Page parameters
 */
public ListLightPage(final PageParameters parameters) {

    setStatelessHint(true);

    // Add the simplest type of label
    add(new Label("message",
            "Just a list of lightweight items. They're not stored directly in the session, but only their ids."));

    final int page = parameters.getInt("page", 1) - 1;
    final String sortProperty = parameters.getString("orderby", "firstName");
    final boolean ascending = parameters.getAsBoolean("asc", true);
    final SortableContactDataProvider dp = new SortableContactDataProvider(sortProperty, ascending);

    final DataView<Contact> dataView = new DataView<Contact>("sorting", dp) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final Item<Contact> item) {
            final Contact contact = item.getModelObject();
            item.add(new ActionPanel("actions", item.getModel()));
            item.add(new Label("contactid", String.valueOf(contact.getId())));
            item.add(new Label("firstname", contact.getFirstName()));
            item.add(new Label("lastname", contact.getLastName()));
            item.add(new Label("homephone", contact.getHomePhone()));
            item.add(new Label("cellphone", contact.getCellPhone()));

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

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

    dataView.setItemsPerPage(8);

    dataView.setCurrentPage(page);

    add(new MyOrderByBorder("orderById", "id", dp));

    add(new MyOrderByBorder("orderByFirstName", "firstName", dp));

    add(new MyOrderByBorder("orderByLastName", "lastName", dp));

    add(dataView);

    add(new PagingNavigator("navigator", dataView) {
        private static final long serialVersionUID = 1L;

        /*
         * (non-Javadoc)
         * 
         * @see
         * org.apache.wicket.markup.html.navigation.paging.PagingNavigator
         * #newPagingNavigationIncrementLink(java.lang.String,
         * org.apache.wicket.markup.html.navigation.paging.IPageable, int)
         */
        @Override
        protected AbstractLink newPagingNavigationIncrementLink(final String id, final IPageable pageable,
                final int increment) {
            return new PagingNavigationIncrementLink<Void>(id, pageable, increment) {
                private static final long serialVersionUID = 1L;

                /*
                 * (non-Javadoc)
                 * 
                 * @seeorg.apache.wicket.markup.html.navigation.paging.
                 * PagingNavigationIncrementLink#onClick()
                 */
                @Override
                public void onClick() {
                    throw new UnsupportedOperationException("OnClick not supported by bookmarkable link");
                }

                /*
                 * (non-Javadoc)
                 * 
                 * @see org.apache.wicket.markup.html.link.Link#getURL()
                 */
                @Override
                protected CharSequence getURL() {
                    final PageParameters params = new PageParameters();
                    final SortParam sort = dp.getSort();
                    params.add("page", String.valueOf(getPageNumber() + 1));
                    params.add("orderby", sort.getProperty());
                    params.add("asc", String.valueOf(sort.isAscending()));

                    return urlFor(ListLightPage.class, params);
                }

                /*
                 * (non-Javadoc)
                 * 
                 * @see
                 * org.apache.wicket.markup.html.link.Link#getStatelessHint
                 * ()
                 */
                @Override
                protected boolean getStatelessHint() {
                    return true;
                }

            };
        }

        /*
         * (non-Javadoc)
         * 
         * @see
         * org.apache.wicket.markup.html.navigation.paging.PagingNavigator
         * #newPagingNavigationLink(java.lang.String,
         * org.apache.wicket.markup.html.navigation.paging.IPageable, int)
         */
        @Override
        protected AbstractLink newPagingNavigationLink(final String id, final IPageable pageable,
                final int pageNumber) {
            return new MyPagingNavigationLink<Void>(id, pageable, pageNumber, dp);
        }

        /*
         * (non-Javadoc)
         * 
         * @see
         * org.apache.wicket.markup.html.navigation.paging.PagingNavigator
         * #newNavigation
         * (org.apache.wicket.markup.html.navigation.paging.IPageable,
         * org.apache
         * .wicket.markup.html.navigation.paging.IPagingLabelProvider)
         */
        @Override
        protected PagingNavigation newNavigation(final IPageable pageable,
                final IPagingLabelProvider labelProvider) {
            return new PagingNavigation("navigation", pageable, labelProvider) {
                private static final long serialVersionUID = 1L;

                /*
                 * (non-Javadoc)
                 * 
                 * @seeorg.apache.wicket.markup.html.navigation.paging.
                 * PagingNavigation
                 * #newPagingNavigationLink(java.lang.String,
                 * org.apache.wicket
                 * .markup.html.navigation.paging.IPageable, int)
                 */
                @Override
                protected AbstractLink newPagingNavigationLink(final String id, final IPageable pageable,
                        final int pageIndex) {
                    return new MyPagingNavigationLink<Void>(id, pageable, pageIndex, dp);
                }

            };
        }

    });
}

From source file:de.tudarmstadt.ukp.clarin.webanno.monitoring.page.AgreementTable.java

License:Apache License

public AgreementTable(String aId, IModel<AgreementFormModel> aSettings,
        IModel<PairwiseAnnotationResult> aModel) {
    super(aId, aModel);

    settings = aSettings;/*from  w ww . j a  v  a 2 s. c  o  m*/

    setOutputMarkupId(true);

    // This model makes sure we add a "null" dummy rater which accounts for the header columns
    // of the table.
    final IModel<List<String>> ratersAdapter = new AbstractReadOnlyModel<List<String>>() {
        private static final long serialVersionUID = 1L;

        @Override
        public List<String> getObject() {
            List<String> raters = new ArrayList<>();
            if (getModelObject() != null) {
                raters.add(null);
                raters.addAll(getModelObject().getRaters());
            }
            return raters;
        }
    };

    rows = new DefaultRefreshingView<String>("rows", ratersAdapter) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final Item<String> aRowItem) {
            // Render regular row
            aRowItem.add(new DefaultRefreshingView<String>("cells", ratersAdapter) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void populateItem(Item<String> aCellItem) {
                    aCellItem.setRenderBodyOnly(true);

                    Fragment cell;
                    // Content cell
                    if (aRowItem.getIndex() == 0 || aCellItem.getIndex() == 0) {
                        cell = new Fragment("cell", "th", AgreementTable.this);
                    }
                    // Header cell
                    else {
                        cell = new Fragment("cell", "td", AgreementTable.this);
                    }

                    // Top-left cell
                    if (aRowItem.getIndex() == 0 && aCellItem.getIndex() == 0) {
                        cell.add(new Label("label", Model.of("")));
                    }
                    // Raters header horizontally
                    else if (aRowItem.getIndex() == 0 && aCellItem.getIndex() != 0) {
                        cell.add(new Label("label", Model.of(aCellItem.getModelObject())));
                    }
                    // Raters header vertically
                    else if (aRowItem.getIndex() != 0 && aCellItem.getIndex() == 0) {
                        cell.add(new Label("label", Model.of(aRowItem.getModelObject())));
                    }
                    // Upper diagonal
                    else if (aCellItem.getIndex() > aRowItem.getIndex()) {
                        AgreementResult result = AgreementTable.this.getModelObject()
                                .getStudy(aRowItem.getModelObject(), aCellItem.getModelObject());

                        boolean noDataRater0 = result.isAllNull(result.getCasGroupIds().get(0));
                        boolean noDataRater1 = result.isAllNull(result.getCasGroupIds().get(1));

                        String label;
                        if (result.getStudy().getItemCount() == 0) {
                            label = "no positions";
                        } else if (noDataRater0 && noDataRater1) {
                            label = "no labels";
                        } else if (noDataRater0) {
                            label = "no labels from " + result.getCasGroupIds().get(0);
                        } else if (noDataRater1) {
                            label = "no labels from " + result.getCasGroupIds().get(1);
                        } else {
                            label = String.format("%.2f", result.getAgreement());
                        }

                        StringBuilder tooltipTitle = new StringBuilder();
                        tooltipTitle.append(result.getCasGroupIds().get(0));
                        tooltipTitle.append('/');
                        tooltipTitle.append(result.getCasGroupIds().get(1));

                        StringBuilder tooltipContent = new StringBuilder();
                        tooltipContent.append("Positions annotated:\n");
                        tooltipContent.append(String.format("- %s: %d/%d%n", result.getCasGroupIds().get(0),
                                result.getNonNullCount(result.getCasGroupIds().get(0)),
                                result.getStudy().getItemCount()));
                        tooltipContent.append(String.format("- %s: %d/%d%n", result.getCasGroupIds().get(1),
                                result.getNonNullCount(result.getCasGroupIds().get(1)),
                                result.getStudy().getItemCount()));
                        tooltipContent.append(String.format("Distinct labels used: %d%n",
                                result.getStudy().getCategoryCount()));

                        Label l = new Label("label", Model.of(label));
                        cell.add(l);
                        l.add(makeDownloadBehavior(aRowItem.getModelObject(), aCellItem.getModelObject()));
                        DescriptionTooltipBehavior tooltip = new DescriptionTooltipBehavior(
                                tooltipTitle.toString(), tooltipContent.toString());
                        tooltip.setOption("position", (Object) null);
                        l.add(tooltip);
                        l.add(new AttributeAppender("style", "cursor: pointer", ";"));
                    }
                    // Lower diagonal
                    else if (aCellItem.getIndex() < aRowItem.getIndex()) {
                        AgreementResult result = AgreementTable.this.getModelObject()
                                .getStudy(aRowItem.getModelObject(), aCellItem.getModelObject());

                        String label = String.format("%d/%d", result.getCompleteSetCount(),
                                result.getRelevantSetCount());

                        String tooltipTitle = "Details about annotations excluded from "
                                + "agreement calculation";

                        StringBuilder tooltipContent = new StringBuilder();
                        if (result.isExcludeIncomplete()) {
                            tooltipContent.append(String.format("- Incomplete (missing): %d%n",
                                    result.getIncompleteSetsByPosition().size()));
                            tooltipContent.append(String.format("- Incomplete (not labeled): %d%n",
                                    result.getIncompleteSetsByLabel().size()));
                        }
                        tooltipContent
                                .append(String.format("- Plurality: %d", result.getPluralitySets().size()));

                        Label l = new Label("label", Model.of(label));
                        DescriptionTooltipBehavior tooltip = new DescriptionTooltipBehavior(
                                tooltipTitle.toString(), tooltipContent.toString());
                        tooltip.setOption("position", (Object) null);
                        l.add(tooltip);
                        l.add(new AttributeAppender("style", "cursor: help", ";"));
                        cell.add(l);
                    }
                    // Rest
                    else {
                        cell.add(new Label("label", Model.of("-")));
                    }

                    aCellItem.add(cell);
                }
            });
            // Odd/even coloring is reversed here to account for the header row at index 0
            aRowItem.add(new AttributeAppender("class", (aRowItem.getIndex() % 2 == 0) ? "odd" : "even"));
        }
    };
    add(rows);
}

From source file:de.tudarmstadt.ukp.clarin.webanno.monitoring.support.DynamicColumnMetaData.java

License:Apache License

public DynamicColumnMetaData(final TableDataProvider prov, final int colNumber) {
    super(new AbstractReadOnlyModel<String>() {
        private static final long serialVersionUID = 1L;

        @Override/*  w  w w . j av  a 2 s .co  m*/
        public String getObject() {
            return prov.getColNames().get(colNumber);

        }
    });
    columnNumber = colNumber;
}

From source file:de.tudarmstadt.ukp.csniper.webapp.support.wicket.RepeatingItem.java

License:Apache License

public RepeatingItem(String id, int index) {
    super(id, index);
    setModel(new AbstractReadOnlyModel<T>() {
        private static final long serialVersionUID = 1L;

        @SuppressWarnings("unchecked")
        @Override/*  www. j a v a2  s .c  o m*/
        public T getObject() {
            return ((RepeatingEditor<T>) RepeatingItem.this.getParent()).items.get(getIndex());
        }

    });
}

From source file:dk.frankbille.scoreboard.BasePage.java

License:Open Source License

public BasePage() {
    MenuPanel menuPanel = new MenuPanel("menu", new PropertyModel<MenuItemType>(this, "menuItemType"));
    menuPanel.setRenderBodyOnly(true);//  www.j a v a2  s. co  m
    add(menuPanel);

    add(new Label("copyrightDate", new AbstractReadOnlyModel<CharSequence>() {
        private static final long serialVersionUID = 1L;

        @Override
        public CharSequence getObject() {
            int inceptionYear = 2012;
            int thisYear = new DateMidnight().getYear();

            StringBuilder sb = new StringBuilder();
            sb.append(inceptionYear);
            if (inceptionYear != thisYear) {
                sb.append("-");
                sb.append(thisYear);
            }
            return sb;
        }
    }));
}

From source file:dk.frankbille.scoreboard.components.FormatModel.java

License:Open Source License

@SuppressWarnings("unchecked")
public FormatModel(Format format, final Object object) {
    this.format = format;
    if (object instanceof IModel<?>) {
        objectModel = (IModel<Object>) object;
    } else {//from   w  w w. j ava  2  s  .  c om
        this.objectModel = new AbstractReadOnlyModel<Object>() {
            private static final long serialVersionUID = 1L;

            @Override
            public Object getObject() {
                return object;
            }
        };
    }
}

From source file:dk.frankbille.scoreboard.components.GameTeamPanel.java

License:Open Source License

public GameTeamPanel(String id, final IModel<GameTeam> model, final IModel<Player> selectedPlayerModel,
        final RatingCalculator rating) {
    super(id, model);

    final IModel<List<Player>> playersModel = new LoadableDetachableModel<List<Player>>() {
        private static final long serialVersionUID = 1L;

        @Override//from  w  w  w.  ja  v  a2 s .  c o  m
        protected List<Player> load() {
            GameTeam gameTeam = model.getObject();
            Team team = gameTeam.getTeam();
            List<Player> players = new ArrayList<Player>(team.getPlayers());
            Collections.sort(players, new PlayerComparator());
            return players;
        }
    };

    WebMarkupContainer gameTeamPanel = new WebMarkupContainer("gameTeamPanel");
    add(gameTeamPanel);

    // Popover - Only show if RatingCalculator is available
    if (rating != null) {
        gameTeamPanel.add(new PopoverBehavior(new StringResourceModel("rating", null),
                new AbstractReadOnlyModel<CharSequence>() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public CharSequence getObject() {
                        StringBuilder b = new StringBuilder();

                        b.append("<small>");

                        GameTeam gameTeam = model.getObject();
                        List<Player> players = playersModel.getObject();

                        Localizer localizer = Application.get().getResourceSettings().getLocalizer();

                        // Player ratings
                        for (Player player : players) {
                            b.append(player.getName()).append(": ");

                            GamePlayerRatingInterface playerRating = rating
                                    .getGamePlayerRating(gameTeam.getGame().getId(), player.getId());
                            b.append(RATING_VALUE.format(playerRating.getRating()));

                            b.append(" <sup>");
                            b.append(RATING_CHANGE.format(playerRating.getChange()));
                            b.append("</sup><br>");
                        }

                        // Team rating
                        GameRatingInterface gameRatingChange = rating
                                .getGameRatingChange(gameTeam.getGame().getId());
                        b.append("<strong>");
                        b.append(localizer.getString("team", GameTeamPanel.this)).append(": ");
                        b.append(RATING_VALUE.format(gameRatingChange.getRating(gameTeam.getId())));
                        b.append(" ");
                        double change = gameRatingChange.getChange(gameTeam.getId());

                        int playerCount = players.size();
                        if (playerCount > 0) {
                            change /= playerCount;
                        }
                        b.append(" <sup>");
                        b.append(RATING_CHANGE.format(change));

                        b.append("</sup></strong></small>");

                        return b;
                    }
                }));
    }

    // Players
    gameTeamPanel.add(new ListView<Player>("players", playersModel) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<Player> item) {
            final Player player = item.getModelObject();

            PageParameters pp = new PageParameters();
            pp.set(0, player.getId());
            BookmarkablePageLink<Void> playerLink = new BookmarkablePageLink<Void>("playerLink",
                    PlayerPage.class, pp);
            item.add(playerLink);
            playerLink.add(new Label("name", new PropertyModel<String>(item.getModel(), "name")));

            item.add(new Label("plus", "+") {
                private static final long serialVersionUID = 1L;

                @Override
                public boolean isVisible() {
                    return item.getIndex() < getViewSize() - 1;
                }
            });
        }
    });
}

From source file:dk.frankbille.scoreboard.components.LeagueSelector.java

License:Open Source License

public LeagueSelector(String id, IModel<League> model) {
    super(id, model);

    setRenderBodyOnly(true);//from ww  w.j  av a2 s.c  om

    final IModel<SortedMap<Boolean, Set<League>>> allLeaguesModel = new LoadableDetachableModel<SortedMap<Boolean, Set<League>>>() {
        @Override
        protected SortedMap<Boolean, Set<League>> load() {
            SortedMap<Boolean, Set<League>> groupedLeagues = new TreeMap<Boolean, Set<League>>(
                    Ordering.natural().reverse());

            List<League> allLeagues = scoreBoardService.getAllLeagues();
            for (League league : allLeagues) {
                Set<League> leaguesByState = groupedLeagues.get(league.isActive());
                if (leaguesByState == null) {
                    leaguesByState = new HashSet<League>();
                    groupedLeagues.put(league.isActive(), leaguesByState);
                }
                leaguesByState.add(league);
            }

            return groupedLeagues;
        }
    };

    IModel<List<Boolean>> leagueStatesModel = new LoadableDetachableModel<List<Boolean>>() {
        @Override
        protected List<Boolean> load() {
            return new ArrayList<Boolean>(allLeaguesModel.getObject().keySet());
        }
    };

    Select<League> select = new Select<League>("select", model) {

    };
    select.add(new Select2Enabler());
    select.add(AttributeAppender.replace("class", new AbstractReadOnlyModel<String>() {
        @Override
        public String getObject() {
            return LeagueSelector.this.getMarkupAttributes().getString("class", "");
        }
    }));
    add(select);

    select.add(new ListView<Boolean>("leagueGroups", leagueStatesModel) {

        @Override
        protected void populateItem(ListItem<Boolean> item) {
            item.add(AttributeAppender.replace("label",
                    new StringResourceModel("active.${modelObject}", new Model<Serializable>(item))));

            List<League> leagueList = Ordering.usingToString()
                    .sortedCopy(allLeaguesModel.getObject().get(item.getModelObject()));

            item.add(new SelectOptions<League>("leagues", leagueList, new IOptionRenderer<League>() {
                @Override
                public String getDisplayValue(League league) {
                    return league.getName();
                }

                @Override
                public IModel<League> getModel(League league) {
                    return new Model<League>(league);
                }
            }));
        }
    });
}

From source file:dk.frankbille.scoreboard.components.menu.MenuItemsPanel.java

License:Open Source License

public MenuItemsPanel(String id, IModel<List<MenuItem>> itemsModel,
        final IModel<MenuItemType> activeMenuItemModel) {
    super(id, itemsModel);

    add(new ListView<MenuItem>("menuItems", itemsModel) {
        private static final long serialVersionUID = 1L;

        @Override/* w  w  w .  j  av  a2 s  .c om*/
        protected void populateItem(final ListItem<MenuItem> listItem) {
            listItem.add(new AttributeAppender("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    MenuItemType activeMenuType = activeMenuItemModel.getObject();
                    MenuItemType menuItemType = listItem.getModelObject().getMenuItemType();

                    return activeMenuType == menuItemType ? "active" : null;
                }
            }));

            final WebMarkupContainer link;

            final MenuItem menuItem = listItem.getModelObject();
            if (menuItem instanceof MenuItemPageLink) {
                final MenuItemPageLink menuItemLink = (MenuItemPageLink) menuItem;

                link = new BookmarkablePageLink<Void>("menuLink", menuItemLink.getPageClass(),
                        menuItemLink.getPageParameters());
                listItem.add(link);

                link.add(new Label("menuLabel", menuItemLink.getLabel()).setRenderBodyOnly(true));
                link.add(new WebMarkupContainer("downIcon").setVisible(false));

                listItem.add(new WebComponent("subMenu").setVisible(false));
            } else if (menuItem instanceof MenuItemContainer) {
                MenuItemContainer menuItemContainer = (MenuItemContainer) menuItem;

                listItem.add(AttributeModifier.append("class", "dropdown"));

                link = new WebMarkupContainer("menuLink");
                link.setOutputMarkupId(true);
                link.add(AttributeModifier.replace("href", "#"));
                link.add(AttributeModifier.replace("class", "dropdown-toggle"));
                link.add(AttributeModifier.replace("data-toggle", "dropdown"));
                link.add(AttributeModifier.replace("role", "button"));
                listItem.add(link);

                link.add(new Label("menuLabel", menuItemContainer.getLabel()).setRenderBodyOnly(true));
                link.add(new WebMarkupContainer("downIcon").setRenderBodyOnly(true));

                MenuItemsPanel subMenu = new MenuItemsPanel("subMenu",
                        new PropertyModel<List<MenuItem>>(menuItemContainer, "subMenuItems"),
                        new Model<MenuItemType>());
                subMenu.add(AttributeModifier.replace("class", "dropdown-menu"));
                subMenu.add(AttributeModifier.replace("role", "menu"));
                subMenu.add(AttributeModifier.replace("aria-labelledby", new AbstractReadOnlyModel<String>() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public String getObject() {
                        return link.getMarkupId();
                    }
                }));
                listItem.add(subMenu);
            } else {
                throw new IllegalStateException("Unknown menuItem type: " + menuItem);
            }

            // Icon
            WebComponent icon = new WebComponent("icon") {
                private static final long serialVersionUID = 1L;

                @Override
                public boolean isVisible() {
                    return menuItem.getIconName() != null;
                }
            };
            icon.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return "icon-" + menuItem.getIconName();
                }
            }));
            link.add(icon);
        }
    });
}

From source file:dk.frankbille.scoreboard.components.NavigationPanel.java

License:Open Source License

public NavigationPanel(String id, final PaginationModel<T> paginationModel) {
    super(id);/*from   w  w w  . j  av a 2  s .  c om*/

    setOutputMarkupId(true);

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

        @Override
        public void onClick(AjaxRequestTarget target) {
            pageChanged(target, paginationModel.previousPage());
        }

        @Override
        public boolean isEnabled() {
            return paginationModel.isPreviousPossible();
        }
    };
    previousLink.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
        private static final long serialVersionUID = 1L;

        @Override
        public String getObject() {
            if (paginationModel.isPreviousPossible()) {
                return null;
            }

            return "disabled";
        }
    }));
    add(previousLink);

    IModel<List<Integer>> pagesModel = new LoadableDetachableModel<List<Integer>>() {
        private static final long serialVersionUID = 1L;

        @Override
        protected List<Integer> load() {
            List<Integer> pages = new ArrayList<Integer>();
            for (int page = 1; page <= paginationModel.getMaxPage(); page++) {
                pages.add(page);
            }
            return pages;
        }
    };
    add(new ListView<Integer>("pageLinks", pagesModel) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<Integer> item) {
            AjaxLink<Void> pageLink = new AjaxLink<Void>("pageLink") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    paginationModel.setPage(item.getModelObject());
                    pageChanged(target, paginationModel.getPage());
                }

                @Override
                public boolean isEnabled() {
                    return paginationModel.getPage() != item.getModelObject();
                }
            };
            pageLink.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    if (paginationModel.getPage() == item.getModelObject()) {
                        return "btn-primary disabled";
                    }

                    return null;
                }
            }));
            item.add(pageLink);

            pageLink.add(new Label("pageLabel", item.getModel()));
        }
    });

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

        @Override
        public void onClick(AjaxRequestTarget target) {
            pageChanged(target, paginationModel.nextPage());
        }

        @Override
        public boolean isEnabled() {
            return paginationModel.isNextPossible();
        }
    };
    nextLink.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
        private static final long serialVersionUID = 1L;

        @Override
        public String getObject() {
            if (paginationModel.isNextPossible()) {
                return null;
            }

            return "disabled";
        }
    }));
    add(nextLink);
}