/**
* Copyright (C) 2010 Asterios Raptis
*
* Licensed 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 de.alpharogroup.wicket.components.examples.area.publicly;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import de.agilecoders.wicket.core.Bootstrap;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.DropDownButton;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.MenuBookmarkablePageLink;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.MenuDivider;
import de.agilecoders.wicket.core.markup.html.bootstrap.button.dropdown.MenuHeader;
import de.agilecoders.wicket.core.markup.html.bootstrap.image.GlyphIconType;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.ImmutableNavbarComponent;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.NavbarButton;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.NavbarComponents;
import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.NavbarDropDownButton;
import de.agilecoders.wicket.core.settings.IBootstrapSettings;
import de.agilecoders.wicket.core.settings.ITheme;
import de.alpharogroup.wicket.base.util.resource.ResourceModelFactory;
import de.alpharogroup.wicket.components.examples.ajaxtabs.addtab.EditableAjaxTabbedPage;
import de.alpharogroup.wicket.components.examples.alerts.AlertsPage;
import de.alpharogroup.wicket.components.examples.animate.AnimationPage;
import de.alpharogroup.wicket.components.examples.basepage.ApplicationBasePage;
import de.alpharogroup.wicket.components.examples.beaneditor.example.BeanEditorExamplePage;
import de.alpharogroup.wicket.components.examples.buttons.ButtonsPage;
import de.alpharogroup.wicket.components.examples.captcha.ReCaptchaPage;
import de.alpharogroup.wicket.components.examples.captcha.SslReCaptchaPage;
import de.alpharogroup.wicket.components.examples.checkbox.CheckboxesPage;
import de.alpharogroup.wicket.components.examples.collapse.CollapsePage;
import de.alpharogroup.wicket.components.examples.deregistration.DeregistrationPage;
import de.alpharogroup.wicket.components.examples.exceptions.ExceptionPage;
import de.alpharogroup.wicket.components.examples.fragment.replacewith.ReplaceWithPage;
import de.alpharogroup.wicket.components.examples.fragment.swapping.AddressPage;
import de.alpharogroup.wicket.components.examples.fragment.swapping.person.PersonPage;
import de.alpharogroup.wicket.components.examples.home.HomePage;
import de.alpharogroup.wicket.components.examples.imprint.ImprintPage;
import de.alpharogroup.wicket.components.examples.labeled.LabeledComponentsPage;
import de.alpharogroup.wicket.components.examples.navbar.NavbarExamplePanel;
import de.alpharogroup.wicket.components.examples.notifications.NotificationExamplesPage;
import de.alpharogroup.wicket.components.examples.pdfdownload.PdfDownloadPage;
import de.alpharogroup.wicket.components.examples.popupoverlay.PopupoverlayPage;
import de.alpharogroup.wicket.components.examples.radios.RadioComponentsExamplePage;
import de.alpharogroup.wicket.components.examples.resource.loading.ResourceLoadingExamplesPage;
import de.alpharogroup.wicket.components.examples.sign.in.SigninPage;
import de.alpharogroup.wicket.components.examples.sign.up.SignupPage;
import de.alpharogroup.wicket.components.examples.socialnet.SocialNetworksExamplePage;
import de.alpharogroup.wicket.components.examples.termofuse.TermOfUsePage;
import de.alpharogroup.wicket.components.examples.tooltips.TooltipsExamplePage;
import de.alpharogroup.wicket.components.examples.urls.WicketUrlPage;
/**
* The class {@link PubliclyBasePage}.
*
* @author Asterios Raptis
* @param <T>
* the generic type of the page model
*/
public abstract class PubliclyBasePage<T> extends ApplicationBasePage<T>
{
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The logger constant. */
protected static final Logger LOG = Logger.getLogger(PubliclyBasePage.class.getName());
/**
* Default constructor that instantiates a new {@link PubliclyBasePage}.
*/
public PubliclyBasePage()
{
this(new PageParameters());
}
/**
* Instantiates a new {@link PubliclyBasePage} with the given model.
*
* @param model
* the model
*/
public PubliclyBasePage(final IModel<T> model)
{
super(model);
}
/**
* Instantiates a new {@link PubliclyBasePage} with the given {@link PageParameters} object.
*
* @param parameters
* the {@link PageParameters} object
*/
public PubliclyBasePage(final PageParameters parameters)
{
super(parameters);
}
/**
* Factory method for creating a new dropdown navbar item for the features.
*
* @return the component
*/
protected Component newFeaturesDropDownButton()
{
final IModel<String> featuresMainModel = ResourceModelFactory
.newResourceModel("global.menu.features.label", this);
final IModel<String> swapModel = ResourceModelFactory
.newResourceModel("global.menu.swap.label", this);
final IModel<String> swapPersonModel = ResourceModelFactory
.newResourceModel("global.menu.swap.person.label", this);
final IModel<String> replaceWithPanelModel = ResourceModelFactory
.newResourceModel("global.menu.replace.with.panel.label", this);
final IModel<String> popupoverlayPanelModel = ResourceModelFactory
.newResourceModel("global.menu.popupoverlay.label", this);
final IModel<String> tabsModel = ResourceModelFactory
.newResourceModel("global.menu.tabs.label", this);
final IModel<String> signInModel = ResourceModelFactory
.newResourceModel("global.menu.sign.in.label", this);
final IModel<String> signUpModel = ResourceModelFactory
.newResourceModel("global.menu.sign.up.label", this);
final IModel<String> downloadFileModel = ResourceModelFactory
.newResourceModel("global.menu.download.pdf.label", this);
final IModel<String> recaptchaModel = ResourceModelFactory
.newResourceModel("global.menu.recaptcha.label", this);
final IModel<String> sslRecaptchaModel = ResourceModelFactory
.newResourceModel("global.menu.ssl.recaptcha.label", this);
final IModel<String> wicketUrlsModel = ResourceModelFactory
.newResourceModel("global.menu.wicket.urls.label", this);
final IModel<String> alertsModel = ResourceModelFactory
.newResourceModel("global.menu.alerts.label", this);
final IModel<String> labeledModel = ResourceModelFactory
.newResourceModel("global.menu.labeled.label", this);
final IModel<String> buttonsModel = ResourceModelFactory
.newResourceModel("global.menu.buttons.label", this);
final IModel<String> checkboxesModel = ResourceModelFactory
.newResourceModel("global.menu.checkboxes.label", this);
final IModel<String> radiosModel = ResourceModelFactory
.newResourceModel("global.menu.radios.label", this);
final IModel<String> deregistrationModel = ResourceModelFactory
.newResourceModel("global.menu.deregistration.label", this);
final IModel<String> exceptionModel = ResourceModelFactory
.newResourceModel("global.menu.exception.label", this);
final IModel<String> beanEditorExampleModel = ResourceModelFactory
.newResourceModel("global.menu.bean.editor.label", this);
final IModel<String> animationExampleModel = ResourceModelFactory
.newResourceModel("global.menu.animation.label", this);
final IModel<String> collapseExampleModel = ResourceModelFactory
.newResourceModel("global.menu.collapse.label", this);
final IModel<String> toastrExampleModel = ResourceModelFactory
.newResourceModel("global.menu.toastr.label", this);
final IModel<String> socialNetExampleModel = ResourceModelFactory
.newResourceModel("global.menu.social.network.label", this);
final IModel<String> resourceLoadingExampleModel = ResourceModelFactory
.newResourceModel("global.menu.resource.loading.label", this);
final IModel<String> tooltipsExampleModel = ResourceModelFactory
.newResourceModel("global.menu.tooltips.label", this);
return new NavbarDropDownButton(featuresMainModel)
{
private static final long serialVersionUID = 1L;
@Override
protected List<AbstractLink> newSubMenuButtons(final String buttonMarkupId)
{
final List<AbstractLink> subMenu = new ArrayList<>();
subMenu.add(new MenuBookmarkablePageLink<Void>(AddressPage.class, swapModel)
.setIconType(GlyphIconType.eyeopen));
subMenu.add(new MenuBookmarkablePageLink<Void>(PersonPage.class, swapPersonModel)
.setIconType(GlyphIconType.eyeopen));
subMenu.add(new MenuBookmarkablePageLink<Void>(BeanEditorExamplePage.class,
beanEditorExampleModel).setIconType(GlyphIconType.eyeopen));
subMenu.add(
new MenuBookmarkablePageLink<Void>(AnimationPage.class, animationExampleModel)
.setIconType(GlyphIconType.eyeopen));
subMenu.add(
new MenuBookmarkablePageLink<Void>(CollapsePage.class, collapseExampleModel)
.setIconType(GlyphIconType.eyeopen));
subMenu.add(
new MenuBookmarkablePageLink<Void>(ReplaceWithPage.class, replaceWithPanelModel)
.setIconType(GlyphIconType.eyeopen));
subMenu.add(new MenuBookmarkablePageLink<Void>(PopupoverlayPage.class,
popupoverlayPanelModel).setIconType(GlyphIconType.eyeopen));
subMenu
.add(new MenuBookmarkablePageLink<Void>(EditableAjaxTabbedPage.class, tabsModel)
.setIconType(GlyphIconType.picture));
subMenu.add(new MenuBookmarkablePageLink<Void>(SigninPage.class, signInModel)
.setIconType(GlyphIconType.lock));
subMenu.add(new MenuBookmarkablePageLink<Void>(SignupPage.class, signUpModel)
.setIconType(GlyphIconType.zoomin));
subMenu.add(
new MenuBookmarkablePageLink<Void>(PdfDownloadPage.class, downloadFileModel)
.setIconType(GlyphIconType.download));
subMenu.add(new MenuBookmarkablePageLink<Void>(ReCaptchaPage.class, recaptchaModel)
.setIconType(GlyphIconType.check));
subMenu.add(
new MenuBookmarkablePageLink<Void>(SslReCaptchaPage.class, sslRecaptchaModel)
.setIconType(GlyphIconType.bullhorn));
subMenu.add(new MenuBookmarkablePageLink<Void>(WicketUrlPage.class, wicketUrlsModel)
.setIconType(GlyphIconType.file));
subMenu.add(new MenuBookmarkablePageLink<Void>(AlertsPage.class, alertsModel)
.setIconType(GlyphIconType.bell));
subMenu.add(
new MenuBookmarkablePageLink<Void>(LabeledComponentsPage.class, labeledModel)
.setIconType(GlyphIconType.leaf));
subMenu.add(new MenuBookmarkablePageLink<Void>(ButtonsPage.class, buttonsModel)
.setIconType(GlyphIconType.book));
subMenu
.add(new MenuBookmarkablePageLink<Void>(CheckboxesPage.class, checkboxesModel)
.setIconType(GlyphIconType.book));
subMenu.add(new MenuBookmarkablePageLink<Void>(RadioComponentsExamplePage.class,
radiosModel).setIconType(GlyphIconType.book));
subMenu.add(new MenuBookmarkablePageLink<Void>(DeregistrationPage.class,
deregistrationModel).setIconType(GlyphIconType.book));
subMenu.add(new MenuBookmarkablePageLink<Void>(NotificationExamplesPage.class,
toastrExampleModel).setIconType(GlyphIconType.barcode));
subMenu.add(new MenuBookmarkablePageLink<Void>(SocialNetworksExamplePage.class,
socialNetExampleModel).setIconType(GlyphIconType.eyeopen));
subMenu.add(new MenuBookmarkablePageLink<Void>(ResourceLoadingExamplesPage.class,
resourceLoadingExampleModel).setIconType(GlyphIconType.pencil));
subMenu.add(new MenuBookmarkablePageLink<Void>(TooltipsExamplePage.class,
tooltipsExampleModel).setIconType(GlyphIconType.bancircle));
subMenu.add(new MenuBookmarkablePageLink<Void>(ExceptionPage.class, exceptionModel)
.setIconType(GlyphIconType.fire));
return subMenu;
}
}.setIconType(GlyphIconType.folderopen);
}
/**
* Factory method for creating a new dropdown navbar item for the legal issues like term of use.
*
* @return the component
*/
protected Component newLegalDropDownButton()
{
final IModel<String> legacyMainModel = ResourceModelFactory
.newResourceModel("global.menu.legacy.label", this);
final IModel<String> imprintModel = ResourceModelFactory
.newResourceModel("global.menu.imprint.label", this);
final IModel<String> termOfUseModel = ResourceModelFactory
.newResourceModel("global.menu.termofuse.label", this);
final IModel<String> copyrightModel = ResourceModelFactory
.newResourceModel("global.menu.copyright.label", this);
return new NavbarDropDownButton(legacyMainModel)
{
private static final long serialVersionUID = 1L;
@Override
protected List<AbstractLink> newSubMenuButtons(final String buttonMarkupId)
{
final List<AbstractLink> subMenu = new ArrayList<>();
subMenu
.add(new MenuBookmarkablePageLink<ImprintPage>(ImprintPage.class, imprintModel)
.setIconType(GlyphIconType.eyeopen));
subMenu.add(
new MenuBookmarkablePageLink<TermOfUsePage>(TermOfUsePage.class, termOfUseModel)
.setIconType(GlyphIconType.picture));
subMenu.add(
new MenuBookmarkablePageLink<ImprintPage>(ImprintPage.class, copyrightModel)
.setIconType(GlyphIconType.lock));
return subMenu;
}
}.setIconType(GlyphIconType.folderopen)
// .setInverted(true)
;
}
/**
* Factory method for creating a new {@link Navbar} instance.
*
* @param markupId
* The components markup id.
* @return a new {@link Navbar} instance
*/
protected Navbar newNavbar(final String markupId)
{
final Navbar navbar = new Navbar(markupId);
navbar.setPosition(Navbar.Position.TOP);
navbar.setInverted(true);
final IModel<String> brandNameModel = ResourceModelFactory
.newResourceModel("global.slogan.mainhead.label", this);
final IModel<String> overviewModel = ResourceModelFactory
.newResourceModel("global.menu.overview.label", this);
// show brand name
navbar.setBrandName(brandNameModel);
navbar.addComponents(NavbarComponents.transform(Navbar.ComponentPosition.LEFT,
new NavbarButton<Void>(HomePage.class, overviewModel).setIconType(GlyphIconType.home),
newLegalDropDownButton(), newThemesNavbarDropDownButton()));
navbar.addComponents(new ImmutableNavbarComponent(newFeaturesDropDownButton(),
Navbar.ComponentPosition.RIGHT));
return navbar;
}
/**
* Factory method for creating a new {@link Component} for the navigation menu. This method is
* invoked in the constructor from the derived classes and have to be overridden so users can
* provide their own version of a new {@link Component} for the navigation menu.
*
* @param id
* the id
* @param model
* the model
* @return the new {@link Component} for the navigation menu.
*/
protected Component newNavbarPanel(final String id, final IModel<T> model)
{
return newNavbar(id);
}
/**
* Factory method for creating a new dropdown navbar item for the bootstrap themes.
*
* @return the component
*/
protected DropDownButton newThemesNavbarDropDownButton()
{
final DropDownButton dropdown = new NavbarDropDownButton(Model.of("Themes"))
{
private static final long serialVersionUID = 1L;
@Override
public boolean isActive(final Component item)
{
return false;
}
@Override
protected List<AbstractLink> newSubMenuButtons(final String buttonMarkupId)
{
final List<AbstractLink> subMenu = new ArrayList<>();
subMenu.add(new MenuHeader(Model.of("all available themes:")));
subMenu.add(new MenuDivider());
final IBootstrapSettings settings = Bootstrap.getSettings(getApplication());
final List<ITheme> themes = settings.getThemeProvider().available();
for (final ITheme theme : themes)
{
final PageParameters params = new PageParameters();
params.set("theme", theme.name());
subMenu.add(new MenuBookmarkablePageLink<Page>(getPageClass(), params,
Model.of(theme.name())));
}
return subMenu;
}
}.setIconType(GlyphIconType.book);
return dropdown;
}
/**
* {@inheritDoc}
*/
@Override
protected void onInitialize()
{
super.onInitialize();
add(newNavbarPanel(NAVBAR_PANEL_ID, getModel()));
add(feedback = newFeedbackPanel(FEEDBACK_PANEL_ID, getModel()));
add(new NavbarExamplePanel("newnav", Model.of("")));
add(newContainerPanel(CONTAINER_PANEL_ID, getModel()));
add(newFooterPanel(FOOTER_PANEL_ID, getModel()));
}
}