AbstractMenuItemFactoryImpl.java

  1. /*
  2.  * Copyright 2010-2025 James Pether Sörling
  3.  *
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  *
  8.  *   http://www.apache.org/licenses/LICENSE-2.0
  9.  *
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  *
  16.  *  $Id$
  17.  *  $HeadURL$
  18. */
  19. package com.hack23.cia.web.impl.ui.application.views.common.menufactory.impl;

  20. import com.hack23.cia.web.impl.ui.application.util.UserContextUtil;
  21. import com.hack23.cia.web.impl.ui.application.views.common.menufactory.api.pagecommands.PageCommandUserConstants;
  22. import com.jarektoro.responsivelayout.ResponsiveRow;
  23. import com.vaadin.icons.VaadinIcons;
  24. import com.vaadin.server.Resource;
  25. import com.vaadin.server.Responsive;
  26. import com.vaadin.server.Sizeable.Unit;
  27. import com.vaadin.ui.Button;
  28. import com.vaadin.ui.Button.ClickListener;
  29. import com.vaadin.ui.CssLayout;
  30. import com.vaadin.ui.Label;
  31. import com.vaadin.ui.MenuBar;
  32. import com.vaadin.ui.MenuBar.MenuItem;

  33. /**
  34.  * The Class AbstractMenuItemFactoryImpl.
  35.  *
  36.  * This abstract class provides common functionality for creating menu items and
  37.  * button links
  38.  * in the Citizen Intelligence Agency web application. It includes methods for
  39.  * initializing
  40.  * application menus, creating admin menus, and generating button links with
  41.  * descriptions.
  42.  */
  43. public abstract class AbstractMenuItemFactoryImpl implements PageCommandUserConstants {

  44.     /**
  45.      * Instantiates a new abstract menu item factory impl.
  46.      */
  47.     public AbstractMenuItemFactoryImpl() {
  48.         super();
  49.     }

  50.     /**
  51.      * Creates the admin menu.
  52.      *
  53.      * @param mainViewItem
  54.      *                     the main view item
  55.      */
  56.     private static void createAdminMenu(final MenuItem mainViewItem) {
  57.         if (UserContextUtil.allowRoleInSecurityContext(ROLE_ADMIN)) {
  58.             final MenuItem adminMenuItem = mainViewItem.addItem(ADMIN_TEXT, VaadinIcons.SERVER, null);

  59.             final MenuItem configurationMenuItem = adminMenuItem.addItem(CONFIGURATION, VaadinIcons.TOOLS, null);
  60.             configurationMenuItem.addItem(APPLICATION_CONFIGURATION, VaadinIcons.TOOLS,
  61.                     COMMAND_APPLICATION_CONFIGURATION);

  62.             configurationMenuItem.addItem(AGENCY, VaadinIcons.SERVER, COMMAND_AGENCY);
  63.             configurationMenuItem.addItem(PORTAL, VaadinIcons.SITEMAP, COMMAND_PORTAL);
  64.             configurationMenuItem.addItem(COUNTRY, VaadinIcons.FLAG, COMMAND_COUNTRY);
  65.             configurationMenuItem.addItem(LANGUAGE, VaadinIcons.ACCESSIBILITY, COMMAND_LANGUAGE);

  66.             final MenuItem managementMenuItem = adminMenuItem.addItem(MANAGEMENT, VaadinIcons.SERVER, null);

  67.             managementMenuItem.addItem(AGENT_OPERATIONS_TEXT, VaadinIcons.BRIEFCASE, COMMAND_AGENT_OPERATION);

  68.             managementMenuItem.addItem(DATA_SUMMARY_TEXT, VaadinIcons.DATABASE, COMMAND_DATASUMMARY);
  69.             managementMenuItem.addItem(DATA_AUTHOR_SUMMARY, VaadinIcons.DATABASE, COMMAND_AUTHOR_DATASUMMARY);

  70.             managementMenuItem.addItem(EMAIL, VaadinIcons.MAILBOX, COMMAND_EMAIL);

  71.             managementMenuItem.addItem(SYSTEM_PERFORMANCE, VaadinIcons.DASHBOARD, COMMAND_MONITORING);

  72.             final MenuItem userActivityMenuItem = adminMenuItem.addItem(USER_ACTIVITY, VaadinIcons.DATABASE, null);
  73.             userActivityMenuItem.addItem(APPLICATION_SESSION, VaadinIcons.LAPTOP, COMMAND_APPLICATION_SESSION);
  74.             userActivityMenuItem.addItem(APPLICATION_SESSION_CHARTS, VaadinIcons.LAPTOP,
  75.                     COMMAND_APPLICATION_SESSION_CHARTS);
  76.             userActivityMenuItem.addItem(APPLICATION_EVENT, VaadinIcons.ARROWS, COMMAND_APPLICATION_EVENTS);
  77.             userActivityMenuItem.addItem(APPLICATION_EVENT_CHARTS, VaadinIcons.ARROWS,
  78.                     COMMAND_APPLICATION_EVENTS_CHARTS);

  79.             userActivityMenuItem.addItem(USERACCOUNT, VaadinIcons.GROUP, COMMAND_USERACCOUNT);

  80.         }
  81.     }

  82.     /**
  83.      * Creates the button link.
  84.      *
  85.      * @param row
  86.      *                    the panel content
  87.      * @param linkText
  88.      *                    the link text
  89.      * @param icon
  90.      *                    the icon
  91.      * @param command
  92.      *                    the command
  93.      * @param description
  94.      *                    the description
  95.      */
  96.     protected static final void createButtonLink(final ResponsiveRow row, final String linkText, final Resource icon,
  97.             final ClickListener command, final String description) {
  98.         final CssLayout layout = new CssLayout();
  99.         layout.addStyleName("v-layout-content-overview-panel-level2");
  100.         Responsive.makeResponsive(layout);
  101.         layout.setSizeUndefined();

  102.         final Button button = new Button(linkText);
  103.         Responsive.makeResponsive(button);
  104.         button.setStyleName(LINK_STYLE_NAME);
  105.         button.addStyleName("title");
  106.         button.addClickListener(command);
  107.         button.setIcon(icon);
  108.         button.setWidth(100, Unit.PERCENTAGE);

  109.         layout.addComponent(button);

  110.         final Label descriptionLabel = new Label(description);
  111.         descriptionLabel.addStyleName("itembox");
  112.         Responsive.makeResponsive(descriptionLabel);
  113.         descriptionLabel.setWidth(100, Unit.PERCENTAGE);
  114.         layout.addComponent(descriptionLabel);

  115.         row.addColumn().withDisplayRules(DISPLAY_SIZE_XS_DEVICE, DISPLAYS_SIZE_XM_DEVICE, DISPLAY_SIZE_MD_DEVICE,
  116.                 DISPLAY_SIZE_LG_DEVICE).withComponent(layout);
  117.     }

  118.     /**
  119.      * Inits the application menu bar.
  120.      *
  121.      * @param menuBar
  122.      *                the menu bar
  123.      */
  124.     protected static final void initApplicationMenuBar(final MenuBar menuBar) {
  125.         menuBar.removeItems();
  126.         menuBar.setWidth(MENU_BAR_WIDTH);
  127.         menuBar.setStyleName(HEADER_STYLE_NAME);
  128.         final MenuItem mainViewItem = menuBar.addItem(APPLICATION, VaadinIcons.SERVER, null);

  129.         mainViewItem.addItem(START_TEXT, VaadinIcons.HOME, COMMAND_MAINVIEW_OVERVIEW);

  130.         mainViewItem.addItem(DASHBOARD, VaadinIcons.DASHBOARD, COMMAND_DASHBOARDVIEW_OVERVIEW);

  131.         final MenuItem mainItem = mainViewItem.addItem(MAIN, VaadinIcons.STAR, null);

  132.         mainItem.addItem(RANKING_PAGE_VISIT_TEXT, VaadinIcons.CHART, COMMAND_MAINVIEW_PAGEVISITHISTORY);

  133.         if (UserContextUtil.allowRoleInSecurityContext(ROLE_ADMIN)
  134.                 || UserContextUtil.allowRoleInSecurityContext(ROLE_USER)) {
  135.             mainViewItem.addItem(USERHOME, VaadinIcons.USER, COMMAND_USERHOME);
  136.             createAdminMenu(mainViewItem);
  137.             mainViewItem.addItem(LOGOUT, VaadinIcons.SIGN_OUT, COMMAND_LOGOUT);
  138.         } else {
  139.             mainViewItem.addItem(LOGIN, VaadinIcons.SIGN_IN, COMMAND_LOGIN);
  140.             mainViewItem.addItem(REGISTER, VaadinIcons.FILE_ADD, COMMAND_REGISTER);
  141.         }

  142.     }

  143. }