Package com.cooldatasoft.horizontal.dropdown.sunrisegloss

Source Code of com.cooldatasoft.horizontal.dropdown.sunrisegloss.SunriseGlossDropDownMenu

package com.cooldatasoft.horizontal.dropdown.sunrisegloss;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import lombok.extern.slf4j.Slf4j;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
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.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.request.resource.ResourceReference;

import com.cooldatasoft.common.DestinationType;
import com.cooldatasoft.common.MenuItem;
import com.cooldatasoft.common.StaticImage;

/**
* http://www.cssmenumaker.com/builder/menu_info.php?menu=003
*
* @author Fatih Mehmet UCAR - fmucar@gmail.com
*
*/
@Slf4j
public class SunriseGlossDropDownMenu extends Panel implements IHeaderContributor {

  private static final long serialVersionUID = 1L;

  private final static ResourceReference CSS_PATH = new CssResourceReference(SunriseGlossDropDownMenu.class,
      "css/SunriseGloss.css");
  private final static ResourceReference BG_LEFT_IMG = new PackageResourceReference(SunriseGlossDropDownMenu.class,
      "images/nav-bg-l.jpg");
  private final static ResourceReference BG_RIGHT_IMG = new PackageResourceReference(SunriseGlossDropDownMenu.class,
      "images/nav-bg-r.jpg");

  @Override
  public void renderHead(IHeaderResponse container) {
    container.render(CssHeaderItem.forReference(CSS_PATH));
  }

  public void processResponse(MenuItem menuItem) {
    switch (menuItem.getDestinationType()) {
    case EXTERNAL_LINK:
      // TODO forward to external link
      menuItem.getExternalLink();
      break;
    case WEB_PAGE_CLASS:
      setResponsePage(menuItem.getResponsePageClass());
      break;
    case WEB_PAGE_INSTANCE:
      setResponsePage(menuItem.getResponsePage());
      break;
    case AJAX_TARGET:
      // DO Nothing as ajax will execute
      break;
    case NONE:
      break;
    default:
      // TODO Throw new exception
      throw new RuntimeException("Destination type not valid!");
    }
  }

  public SunriseGlossDropDownMenu(String id, List<MenuItem> menuItemList) {
    super(id);

    String bgLeftImgPath = RequestCycle.get().urlFor(BG_LEFT_IMG, null).toString();
    String bgRightImgPath = RequestCycle.get().urlFor(BG_RIGHT_IMG, null).toString();

    log.debug("bgLeftImg : {} ", bgLeftImgPath);
    log.debug("bgRightImg : {} ", bgRightImgPath);

    StaticImage bgLeftImage = new StaticImage("bgLeft", new Model<String>(bgLeftImgPath));
    StaticImage bgRightImage = new StaticImage("bgRight", new Model<String>(bgRightImgPath));

    bgLeftImage.add(new AttributeModifier("class", new Model<String>("float-left")));
    bgRightImage.add(new AttributeModifier("class", new Model<String>("float-right")));

    add(bgLeftImage);
    add(bgRightImage);

    ListView<MenuItem> primaryMenuListView = new ListView<MenuItem>("menuItem", menuItemList) {
      private static final long serialVersionUID = 1L;

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

        Link<Void> link = null;
        log.info("Menu : {} , Type : {} ", menuItem.getMenuText(), menuItem.getDestinationType());
        if (DestinationType.AJAX_TARGET == menuItem.getDestinationType()) {
          if ("menuLink".equals(menuItem.getAjaxLink().getId())) {
            throw new RuntimeException("MenuLink needs to have menuLink as wicket id!");
          }
          link = menuItem.getAjaxLink();
        } else {
          link = new Link<Void>("menuLink") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick() {
              if (menuItem != null) {
                processResponse(menuItem);
              }
            }
          };
        }

        Label seperator = new Label("menuSeperator");
        seperator.add(new AttributeModifier("class", new Model<String>("divider divider-vert")));

        Label linkText = new Label("linkText");
        link.add(new AttributeModifier("class", new Model<String>("item-primary")));

        if (menuItem != null && menuItem.getMenuText() != null && !menuItem.isSeperator()) {
          linkText.setDefaultModel(new Model<String>(menuItem.getMenuText()));
          linkText.setRenderBodyOnly(true);
        }
        link.add(linkText);
        if (menuItem.isSeperator()) {
          link.setVisible(false);
        } else {
          seperator.setVisible(false);
        }

        WebMarkupContainer subMenuListContainer = new WebMarkupContainer("subMenuListContainer");
        List<MenuItem> subMenuList = new ArrayList<MenuItem>();
        if (menuItem.getSubMenuItemList() != null) {
          subMenuList = menuItem.getSubMenuItemList();
        }
        ListView<MenuItem> subMenuListView = new ListView<MenuItem>("subMenuItem", subMenuList) {
          private static final long serialVersionUID = 1L;

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

            Link<Void> subMenuLink = null;
            log.info("Submenu : {} , Type : {} ", subMenuItem.getMenuText(), subMenuItem.getDestinationType());
            if (DestinationType.AJAX_TARGET == subMenuItem.getDestinationType()) {
              if (!"subMenuLink".equals(subMenuItem.getAjaxLink().getId())) {
                throw new RuntimeException("Needs to have id as subMenuLink");
              }
              subMenuLink = subMenuItem.getAjaxLink();
            } else {
              subMenuLink = new Link<Void>("subMenuLink") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick() {
                  if (subMenuItem != null) {
                    processResponse(subMenuItem);
                  }
                }
              };
            }

            Label subMenuSeperatorOrSecondaryTitle = new Label("subMenuSeperatorOrSecondaryTitle");

            if (subMenuItem.isSeperator()) {
              subMenuSeperatorOrSecondaryTitle.add(new AttributeModifier("class", new Model<String>(
                  "divider divider-horiz")));
            } else if (subMenuItem.isSubmenuTitle()) {
              subMenuSeperatorOrSecondaryTitle.add(new AttributeModifier("class", new Model<String>(
                  "item-secondary-title")));
              subMenuSeperatorOrSecondaryTitle.setDefaultModel(new Model<String>(subMenuItem.getMenuText()));
            }

            Label subMenuLinkText = new Label("subMenuLinkText");
            if (subMenuItem != null && subMenuItem.getMenuText() != null && !subMenuItem.isSeperator()) {
              subMenuLinkText.setDefaultModel(new Model<String>(subMenuItem.getMenuText()));
              subMenuLinkText.setRenderBodyOnly(true);
            }

            Iterator<Component> iterator = subMenuLink.iterator();
            boolean found = false;
            while (iterator.hasNext()) {
              Component next = iterator.next();
              if (subMenuLinkText.getId().equals(next.getId())) {
                found = true;
                break;
              }
            }
            if (!found) {
              subMenuLink.add(subMenuLinkText);
            }

            if (subMenuItem.isSeperator() || subMenuItem.isSubmenuTitle()) {
              subMenuLink.setVisible(false);
            } else {
              subMenuSeperatorOrSecondaryTitle.setVisible(false);
            }

            item.add(subMenuLink);
            item.add(subMenuSeperatorOrSecondaryTitle);
            item.add(subMenuSeperatorOrSecondaryTitle);
          }
        };
        subMenuListContainer.add(subMenuListView);
        if (menuItem != null && menuItem.getSubMenuItemList() != null && menuItem.getSubMenuItemList().size() == 0) {
          subMenuListContainer.setVisible(false);
        }
        item.add(link);
        item.add(seperator);
        item.add(subMenuListContainer);
      }
    };
    // primaryMenuListView.setReuseItems(true);
    add(primaryMenuListView);
  }
}
TOP

Related Classes of com.cooldatasoft.horizontal.dropdown.sunrisegloss.SunriseGlossDropDownMenu

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.