PoliticianMenuItemFactoryImpl.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 org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;

  22. import com.hack23.cia.web.impl.ui.application.views.common.menufactory.api.ApplicationMenuItemFactory;
  23. import com.hack23.cia.web.impl.ui.application.views.common.menufactory.api.PoliticianMenuItemFactory;
  24. import com.hack23.cia.web.impl.ui.application.views.common.menufactory.api.PoliticianRankingMenuItemFactory;
  25. import com.hack23.cia.web.impl.ui.application.views.common.menufactory.api.pagecommands.PageCommandPoliticianConstants;
  26. import com.hack23.cia.web.impl.ui.application.views.common.rows.RowUtil;
  27. import com.jarektoro.responsivelayout.ResponsiveRow;
  28. import com.vaadin.icons.VaadinIcons;
  29. import com.vaadin.ui.MenuBar;
  30. import com.vaadin.ui.MenuBar.MenuItem;
  31. import com.vaadin.ui.VerticalLayout;

  32. /**
  33.  * The Class PoliticianMenuItemFactoryImpl.
  34.  *
  35.  * <p>
  36.  * This class builds menus and overview pages for politician-related views,
  37.  * vote histories, and more. It integrates with
  38.  * enabling users to navigate through indicators, roles, document activities,
  39.  * vote histories, and more. It integrates with
  40.  * {@link ApplicationMenuItemFactory}
  41.  * and {@link PoliticianRankingMenuItemFactory} to ensure consistent menu
  42.  * structures within the application.
  43.  * </p>
  44.  */
  45. @Service
  46. public final class PoliticianMenuItemFactoryImpl extends AbstractMenuItemFactoryImpl
  47.                 implements PoliticianMenuItemFactory {

  48.         /** Menu labels. */
  49.         private static final String BALLOT_DECISION_SUMMARY_TEXT = "Ballot Decision Summary";

  50.         /** The Constant BALLOTS_TEXT. */
  51.         private static final String BALLOTS_TEXT = "Ballots";

  52.         /** The Constant DOCUMENT_ACTIVITY_TEXT. */
  53.         private static final String DOCUMENT_ACTIVITY_TEXT = "Document Activity";

  54.         /** The Constant DOCUMENT_HISTORY_TEXT. */
  55.         private static final String DOCUMENT_HISTORY_TEXT = "Document History";

  56.         /** The Constant DOCUMENTS_TEXT. */
  57.         private static final String DOCUMENTS_TEXT = "Documents";

  58.         /** The Constant INDICATORS_TEXT. */
  59.         private static final String INDICATORS_TEXT = "Indicators";

  60.         /** The Constant OVERVIEW_TEXT. */
  61.         private static final String OVERVIEW_TEXT = "Overview";

  62.         /** The Constant PAGE_VISIT_HISTORY_TEXT. */
  63.         private static final String PAGE_VISIT_HISTORY_TEXT = "Page Visit History";

  64.         /** The Constant POLITICIAN_RANKING. */
  65.         private static final String POLITICIAN_RANKING = "Politician Ranking";

  66.         /** The Constant ROLE_GHANT_TEXT. */
  67.         private static final String ROLE_GHANT_TEXT = "Role Gantt";

  68.         /** The Constant ROLE_LIST. */
  69.         private static final String ROLE_LIST = "Role List";

  70.         /** The Constant ROLES_TEXT. */
  71.         private static final String ROLES_TEXT = "Roles";

  72.         /** The Constant TOTAL_EXPERIENCE. */
  73.         private static final String TOTAL_EXPERIENCE = "Total Experience";

  74.         /** The Constant VOTE_HISTORY. */
  75.         private static final String VOTE_HISTORY = "Vote History";

  76.         /** Descriptions (~50 characters). */
  77.         private static final String INDICATORS_DESCRIPTION = "Key performance indicators.";

  78.         /** The Constant TOTAL_EXPERIENCE_DESCRIPTION. */
  79.         private static final String TOTAL_EXPERIENCE_DESCRIPTION = "Summary of political experience.";

  80.         /** The Constant ROLE_LIST_DESCRIPTION. */
  81.         private static final String ROLE_LIST_DESCRIPTION = "Detailed list of roles.";

  82.         /** The Constant ROLE_GHANT_DESCRIPTION. */
  83.         private static final String ROLE_GHANT_DESCRIPTION = "Gantt chart of roles.";

  84.         /** The Constant DOCUMENT_ACTIVITY_DESCRIPTION. */
  85.         private static final String DOCUMENT_ACTIVITY_DESCRIPTION = "Activity by document type.";

  86.         /** The Constant DOCUMENT_HISTORY_DESCRIPTION. */
  87.         private static final String DOCUMENT_HISTORY_DESCRIPTION = "History of document access.";

  88.         /** The Constant VOTE_HISTORY_DESCRIPTION. */
  89.         private static final String VOTE_HISTORY_DESCRIPTION = "Summary of voting records.";

  90.         /** The Constant BALLOT_DECISION_SUMMARY_DESCRIPTION. */
  91.         private static final String BALLOT_DECISION_SUMMARY_DESCRIPTION = "Overview of ballot decisions.";

  92.         /** The Constant PAGE_VISIT_HISTORY_DESCRIPTION. */
  93.         private static final String PAGE_VISIT_HISTORY_DESCRIPTION = "History of page visits.";

  94.         /** The application menu item factory. */
  95.         @Autowired
  96.         private ApplicationMenuItemFactory applicationMenuItemFactory;

  97.         /** The politician ranking menu item factory. */
  98.         @Autowired
  99.         private PoliticianRankingMenuItemFactory politicianRankingMenuItemFactory;

  100.         /**
  101.          * Instantiates a new politician menu item factory impl.
  102.          */
  103.         public PoliticianMenuItemFactoryImpl() {
  104.                 super();
  105.         }

  106.         /**
  107.          * Creates the overview page with quick-access links to various
  108.          * politician-related
  109.          * views such as indicators, roles, document activities, and vote histories.
  110.          *
  111.          * @param panelContent the {@link VerticalLayout} container that holds the
  112.          *                     overview
  113.          *                     content. New UI components (buttons/links) will be added
  114.          *                     here.
  115.          * @param pageId       the identifier for the current page context.
  116.          */
  117.         @Override
  118.         public void createOverviewPage(final VerticalLayout panelContent, final String pageId) {
  119.                 final ResponsiveRow grid = RowUtil.createGridLayout(panelContent);

  120.                 createButtonLink(grid, INDICATORS_TEXT, VaadinIcons.CHART,
  121.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_VIEW_INDICATORS.createItemPageCommand(pageId),
  122.                                 INDICATORS_DESCRIPTION);

  123.                 createButtonLink(grid, TOTAL_EXPERIENCE, VaadinIcons.USER_CLOCK,
  124.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_ROLE_SUMMARY.createItemPageCommand(pageId),
  125.                                 TOTAL_EXPERIENCE_DESCRIPTION);

  126.                 createButtonLink(grid, ROLE_LIST, VaadinIcons.LIST,
  127.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_ROLE_LIST.createItemPageCommand(pageId),
  128.                                 ROLE_LIST_DESCRIPTION);

  129.                 createButtonLink(grid, ROLE_GHANT_TEXT, VaadinIcons.USER_CLOCK,
  130.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_ROLE_GHANT.createItemPageCommand(pageId),
  131.                                 ROLE_GHANT_DESCRIPTION);

  132.                 createButtonLink(grid, DOCUMENT_ACTIVITY_TEXT, VaadinIcons.FILE_TEXT,
  133.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_DOCUMENT_HISTORY.createItemPageCommand(pageId),
  134.                                 DOCUMENT_ACTIVITY_DESCRIPTION);

  135.                 createButtonLink(grid, DOCUMENT_HISTORY_TEXT, VaadinIcons.CHART,
  136.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_DOCUMENT_HISTORY.createItemPageCommand(pageId),
  137.                                 DOCUMENT_HISTORY_DESCRIPTION);

  138.                 createButtonLink(grid, VOTE_HISTORY, VaadinIcons.CHECK_CIRCLE,
  139.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_BALLOT_HISTORY.createItemPageCommand(pageId),
  140.                                 VOTE_HISTORY_DESCRIPTION);

  141.                 createButtonLink(grid, BALLOT_DECISION_SUMMARY_TEXT, VaadinIcons.CHECK,
  142.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_BALLOT_HISTORY.createItemPageCommand(pageId),
  143.                                 BALLOT_DECISION_SUMMARY_DESCRIPTION);

  144.                 createButtonLink(grid, PAGE_VISIT_HISTORY_TEXT, VaadinIcons.CHART,
  145.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_VIEW_OVERVIEW.createItemPageCommand(pageId),
  146.                                 PAGE_VISIT_HISTORY_DESCRIPTION);
  147.         }

  148.         /**
  149.          * Creates the politician menu bar and integrates it into the main application
  150.          * menu.
  151.          * Adds politician ranking topics and specific politician-related menu items.
  152.          *
  153.          * @param menuBar the main application {@link MenuBar} to which the politician
  154.          *                menu will be added.
  155.          * @param pageId  the identifier for the current page context.
  156.          */
  157.         @Override
  158.         public void createPoliticianMenuBar(final MenuBar menuBar, final String pageId) {
  159.                 initApplicationMenuBar(menuBar);
  160.                 applicationMenuItemFactory.addRankingMenu(menuBar);
  161.                 politicianRankingMenuItemFactory.createPoliticianRankingTopics(
  162.                                 menuBar.addItem(POLITICIAN_RANKING, VaadinIcons.USER, null));

  163.                 final MenuItem politicianItem = menuBar.addItem("Politician " + pageId, VaadinIcons.USER, null);

  164.                 politicianItem.addItem(OVERVIEW_TEXT, VaadinIcons.DASHBOARD,
  165.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_VIEW_OVERVIEW.createItemPageCommand(pageId));

  166.                 politicianItem.addItem(INDICATORS_TEXT, VaadinIcons.CHART,
  167.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_VIEW_INDICATORS.createItemPageCommand(pageId));

  168.                 final MenuItem rolesItem = politicianItem.addItem(ROLES_TEXT, VaadinIcons.TAGS, null);

  169.                 rolesItem.addItem(TOTAL_EXPERIENCE, VaadinIcons.USER_CLOCK,
  170.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_ROLE_SUMMARY.createItemPageCommand(pageId));

  171.                 rolesItem.addItem(ROLE_LIST, VaadinIcons.LIST,
  172.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_ROLE_LIST.createItemPageCommand(pageId));

  173.                 rolesItem.addItem(ROLE_GHANT_TEXT, VaadinIcons.USER_CLOCK,
  174.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_ROLE_GHANT.createItemPageCommand(pageId));

  175.                 final MenuItem documentItem = politicianItem.addItem(DOCUMENTS_TEXT, VaadinIcons.FILE_TEXT, null);

  176.                 documentItem.addItem(DOCUMENT_ACTIVITY_TEXT, VaadinIcons.FILE_TEXT,
  177.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_DOCUMENT_HISTORY.createItemPageCommand(pageId));

  178.                 documentItem.addItem(DOCUMENT_HISTORY_TEXT, VaadinIcons.CHART,
  179.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_DOCUMENT_HISTORY.createItemPageCommand(pageId));

  180.                 final MenuItem ballotItem = politicianItem.addItem(BALLOTS_TEXT, VaadinIcons.CHECK, null);

  181.                 ballotItem.addItem(VOTE_HISTORY, VaadinIcons.CHECK_CIRCLE,
  182.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_BALLOT_HISTORY.createItemPageCommand(pageId));

  183.                 ballotItem.addItem(BALLOT_DECISION_SUMMARY_TEXT, VaadinIcons.CHECK,
  184.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_BALLOT_HISTORY.createItemPageCommand(pageId));

  185.                 politicianItem.addItem(PAGE_VISIT_HISTORY_TEXT, VaadinIcons.CHART,
  186.                                 PageCommandPoliticianConstants.COMMAND_POLITICIAN_VIEW_OVERVIEW.createItemPageCommand(pageId));
  187.         }}