Package org.odlabs.wiquery.template

Source Code of org.odlabs.wiquery.template.MainTemplate$NavigationMenuItemListView

package org.odlabs.wiquery.template;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.odlabs.wiquery.accordion.AccordionPage;
import org.odlabs.wiquery.autocomplete.AutocompletePage;
import org.odlabs.wiquery.button.ButtonPage;
import org.odlabs.wiquery.datepicker.DatePickerPage;
import org.odlabs.wiquery.dialog.DialogPage;
import org.odlabs.wiquery.home.HomePage;
import org.odlabs.wiquery.progressbar.ProgressBarPage;
import org.odlabs.wiquery.resizable.ResizePage;
import org.odlabs.wiquery.slider.SliderPage;
import org.odlabs.wiquery.sortable.SortablePage;
import org.odlabs.wiquery.tab.TabsPage;
import org.odlabs.wiquery.template.style.BootstrapCdnCssResourceReference;
import org.odlabs.wiquery.template.style.StylesCssResourceReference;

public abstract class MainTemplate extends WebPage {

  private static final long serialVersionUID = -1312989780696228848L;
 
  private static final IModel<String> DEMO_TITLE_MODEL = Model.of("WiQuery-demo");
 
  public MainTemplate(PageParameters parameters) {
    super(parameters);
   
    MarkupContainer htmlRootElement = new TransparentWebMarkupContainer("htmlRootElement");
    htmlRootElement.add(AttributeAppender.append("lang", WebSession.get().getLocale().getLanguage()));
    add(htmlRootElement);
   
    MarkupContainer bodyElement = new TransparentWebMarkupContainer("bodyElement");
    add(bodyElement);
   
    add(new Label("headPageTitle", DEMO_TITLE_MODEL));
   
    Link<Void> homePageLink = new BookmarkablePageLink<Void>("homePageLink", HomePage.class);
    homePageLink.setBody(DEMO_TITLE_MODEL);
    add(homePageLink);
   
    // Main navigation list
    add(new ListView<NavigationCategory>("navigation", Arrays.asList(NavigationCategory.values())) {
      private static final long serialVersionUID = 1L;

      @Override
      protected void populateItem(ListItem<NavigationCategory> item) {
        final NavigationCategory category = item.getModelObject();
        item.add(new Label("navHeader", category.getLabel()));
       
        item.add(new NavigationMenuItemListView("categoryMenuItems", NavigationMenuItem.getByCategory(category)));
      }
    });
  }
 
  @Override
  public void renderHead(IHeaderResponse response) {
    super.renderHead(response);
   
    response.render(CssHeaderItem.forReference(BootstrapCdnCssResourceReference.get()));
    response.render(CssHeaderItem.forReference(StylesCssResourceReference.get()));
  }

  protected abstract Class<? extends WebPage> getMenuPage();
 
  private class NavigationMenuItemListView extends ListView<NavigationMenuItem> {

    private static final long serialVersionUID = -7806328643699956632L;

    public NavigationMenuItemListView(String id, List<? extends NavigationMenuItem> list) {
      super(id, list);
    }
   
    @Override
    protected void populateItem(ListItem<NavigationMenuItem> item) {
      NavigationMenuItem navItem = item.getModelObject();
      Class<? extends Page> navItemPageClass = navItem.getPageClass();
     
      BookmarkablePageLink<Void> navLink = new BookmarkablePageLink<Void>("navLink", navItemPageClass,
          navItem.getPageParameters());
      navLink.add(new Label("navLabel", navItem.getLabelModel()));
     
      if (navItemPageClass.equals(MainTemplate.this.getMenuPage())) {
        item.add(new AttributeAppender("class", "active"));
      }
     
      item.add(navLink);
    }
   
    @Override
    protected void onConfigure() {
      super.onConfigure();
      setVisible(getViewSize() > 0);
    }
  }

  private enum NavigationCategory {
    INTERACTIONS("Interactions"),
    WIDGETS("Widgets"),
    EFFECTS("Effects");
   
    private final String label;
   
    private NavigationCategory(String label) {
      this.label = label;
    }
   
    public String getLabel() {
      return label;
    }
  }
 
  private enum NavigationMenuItem {
    // Interactions
    SORTABLE("Sortable", NavigationCategory.INTERACTIONS, SortablePage.class),
    // Widgets
    ACCORDION("Accordion", NavigationCategory.WIDGETS, AccordionPage.class),
    AUTOCOMPLETE("Autocomplete", NavigationCategory.WIDGETS, AutocompletePage.class),
    BUTTON("Button", NavigationCategory.WIDGETS, ButtonPage.class),
    DATEPICKER("DatePicker", NavigationCategory.WIDGETS, DatePickerPage.class),
    DIALOG("Dialog", NavigationCategory.WIDGETS, DialogPage.class),
    PROGRESSBAR("Progress bar", NavigationCategory.WIDGETS, ProgressBarPage.class),
    RESIZE("Resize", NavigationCategory.WIDGETS, ResizePage.class),
    SLIDER("Slider", NavigationCategory.WIDGETS, SliderPage.class),
    TABS("Tabs", NavigationCategory.WIDGETS, TabsPage.class);
   
    private final IModel<String> labelModel;
   
    private final NavigationCategory category;
   
    private final Class<? extends WebPage> pageClass;
   
    private final PageParameters pageParameters;
   
    private NavigationMenuItem(String label, NavigationCategory category, Class<? extends WebPage> pageClass) {
      this(label, category, pageClass, null);
    }
   
    private NavigationMenuItem(String label, NavigationCategory category, Class<? extends WebPage> pageClass,
        PageParameters pageParameters) {
      this.labelModel = Model.of(label);
      this.pageClass = pageClass;
      this.category = category;
      this.pageParameters = pageParameters;
    }
   
    public IModel<String> getLabelModel() {
      return labelModel;
    }
   
    public Class<? extends WebPage> getPageClass() {
      return pageClass;
    }
   
    public PageParameters getPageParameters() {
      return pageParameters;
    }
   
    public static final List<NavigationMenuItem> getByCategory(NavigationCategory category) {
      List<NavigationMenuItem> results = new ArrayList<NavigationMenuItem>();
      for (NavigationMenuItem menuItem : values()) {
        if (category.equals(menuItem.category)) {
          results.add(menuItem);
        }
      }
      return results;
    }
  }
}
TOP

Related Classes of org.odlabs.wiquery.template.MainTemplate$NavigationMenuItemListView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.