/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.wicket.examples.library; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.Localizer; import org.apache.wicket.examples.library.Book.WritingStyle; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.string.StringList; import org.apache.wicket.util.string.StringValueConversionException; /** * A book details page. Shows information about a book. * * @author Jonathan Locke */ public final class BookDetails extends AuthenticatedWebPage { /** * Constructor for calls from external page links * * @param parameters * Page parameters * @throws StringValueConversionException */ public BookDetails(final PageParameters parameters) throws StringValueConversionException { this(Book.get(parameters.get("id").toLong())); } /** * Constructor * * @param book * The model */ public BookDetails(final Book book) { add(new Label("title", book.getTitle())); add(new Label("author", book.getAuthor())); add(new Label("fiction", Boolean.toString(book.getFiction()))); Localizer localizer = getLocalizer(); add(BookDetails.link("companion", book.getCompanionBook(), localizer.getString("noBookTitle", this))); add(BookDetails.link("related", book.getRelatedBook(), localizer.getString("noBookTitle", this))); String writingStyles; final boolean hasStyles = (book.getWritingStyles() != null) && (book.getWritingStyles().size() > 0); if (hasStyles) { StringList styles = new StringList(); for (WritingStyle style : book.getWritingStyles()) { styles.add(localizer.getString(style.toString(), this)); } writingStyles = styles.toString(); } else { writingStyles = localizer.getString("noWritingStyles", this); } Label writingStylesLabel = new Label("writingStyles", writingStyles); final AttributeModifier italic = new AttributeModifier("class", new Model<>("italic")) { @Override public boolean isEnabled(Component component) { return !hasStyles; } }; add(writingStylesLabel.add(italic)); add(EditBook.link("edit", book.getId())); } /** * Creates an external page link * * @param name * The name of the link component to create * @param book * The book to link to * @param noBookTitle * The title to show if book is null * @return The external page link */ public static BookmarkablePageLink<Void> link(final String name, final Book book, final String noBookTitle) { final BookmarkablePageLink<Void> link = new BookmarkablePageLink<>(name, BookDetails.class); if (book != null) { link.getPageParameters().add("id", book.getId()); link.add(new Label("title", new Model<>(book))); } else { link.add(new Label("title", noBookTitle)); link.setEnabled(false); } return link; } }