PoliticianRankingMenuItemFactoryImpl.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.PoliticianRankingMenuItemFactory;
  24. import com.hack23.cia.web.impl.ui.application.views.common.rows.RowUtil;
  25. import com.jarektoro.responsivelayout.ResponsiveRow;
  26. import com.vaadin.icons.VaadinIcons;
  27. import com.vaadin.ui.MenuBar;
  28. import com.vaadin.ui.MenuBar.MenuItem;
  29. import com.vaadin.ui.VerticalLayout;

  30. /**
  31.  * The Class PoliticianRankingMenuItemFactoryImpl.
  32.  *
  33.  * <p>
  34.  * Builds menus and overviews for politician rankings, enabling analysis of
  35.  * individual politicians' influence, roles, and longevity in various political
  36.  * arenas such as parliament, committees, and parties. Emphasizes political
  37.  * context, strategic influence, and institutional footprints rather than
  38.  * technical details.
  39.  * </p>
  40.  */
  41. @Service
  42. public final class PoliticianRankingMenuItemFactoryImpl extends AbstractMenuItemFactoryImpl
  43.         implements PoliticianRankingMenuItemFactory {

  44.     /** The Constant ALL_PARTIES. */
  45.     // Label constants
  46.     private static final String ALL_PARTIES = "All parties";

  47.     /** The Constant CHART_BY_TOPIC_TEXT. */
  48.     private static final String CHART_BY_TOPIC_TEXT = "Chart by topic";

  49.     /** The Constant CURRENT_PARTIES. */
  50.     private static final String CURRENT_PARTIES = "Current parties";

  51.     /** The Constant OVERVIEW_TEXT. */
  52.     private static final String OVERVIEW_TEXT = "Overview";

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

  55.     /** The Constant POLITICAL_EXPERIENCE_SUMMARY. */
  56.     private static final String POLITICAL_EXPERIENCE_SUMMARY = "Political Experience Summary";

  57.     /** The Constant POLITICIAN_RANKING. */
  58.     private static final String POLITICIAN_RANKING = "Politician Ranking";

  59.     /** The Constant CURRENT_AND_PAST_ASSIGNMENTS_DESCRIPTION. */
  60.     // Description for total experience detail (tooltip)
  61.     private static final String CURRENT_AND_PAST_ASSIGNMENTS_DESCRIPTION =
  62.             "Summarized roles, responsibilities, and tenure influence";

  63.     /** The Constant DESC_POLITICAL_EXPERIENCE. */
  64.     // Politically focused descriptions (~50 chars)
  65.     private static final String DESC_POLITICAL_EXPERIENCE = "Experience metrics: roles shaping political influence.";

  66.     /** The Constant DESC_ALL_PARTIES. */
  67.     private static final String DESC_ALL_PARTIES = "All parties: mapping legislative engagements.";

  68.     /** The Constant DESC_CURRENT_PARTIES. */
  69.     private static final String DESC_CURRENT_PARTIES = "Current parties: active parliamentary presence.";

  70.     /** The Constant DESC_PAGE_HISTORY. */
  71.     private static final String DESC_PAGE_HISTORY = "Visit history: tracing engagement over time.";



  72.     /** The application menu item factory. */
  73.     @Autowired
  74.     private ApplicationMenuItemFactory applicationMenuItemFactory;

  75.     /**
  76.      * Instantiates a new politician ranking menu item factory implementation.
  77.      */
  78.     public PoliticianRankingMenuItemFactoryImpl() {
  79.         super();
  80.     }

  81.     /**
  82.      * Creates the overview page with concise, politically focused descriptions.
  83.      * Each button link offers a ~50 char description emphasizing political dynamics.
  84.      *
  85.      * @param panelContent the vertical layout to hold the overview content
  86.      */
  87.     @Override
  88.     public void createOverviewPage(final VerticalLayout panelContent) {
  89.         final ResponsiveRow grid = RowUtil.createGridLayout(panelContent);

  90.         // Politician experience summary: USER_CLOCK to indicate roles over time
  91.         createButtonLink(grid, POLITICAL_EXPERIENCE_SUMMARY, VaadinIcons.USER_CLOCK,
  92.                 COMMAND_POLITICIAN_RANKING_DATAGRID, DESC_POLITICAL_EXPERIENCE);

  93.         // All parties: analyzing roles, use GROUP icon for multiple parties
  94.         createButtonLink(grid, ALL_PARTIES, VaadinIcons.GROUP,
  95.                 POL_RANK_COMMAND_CHARTS_ALL_PARTIES_BY_HEADCOUNT, DESC_ALL_PARTIES);

  96.         // Current parties: similarly GROUP icon for active parties
  97.         createButtonLink(grid, CURRENT_PARTIES, VaadinIcons.GROUP,
  98.                 POLITICIAN_RANKING_COMMAND_CURRENT_PARTIES, DESC_CURRENT_PARTIES);

  99.         // Page visit history: use HISTORY icon for historical data
  100.         createButtonLink(grid, PAGE_VISIT_HISTORY_TEXT, VaadinIcons.CHART,
  101.                 POLITICIAN_RANKING_COMMAND_PAGEVISIT_HISTORY, DESC_PAGE_HISTORY);
  102.     }

  103.     /**
  104.      * Creates the politician ranking menu bar and integrates it into the main
  105.      * application menu. Ensures logical grouping and context-appropriate icons.
  106.      *
  107.      * @param menuBar the main menu bar to which the politician ranking items are added
  108.      */
  109.     @Override
  110.     public void createPoliticianRankingMenuBar(final MenuBar menuBar) {
  111.         initApplicationMenuBar(menuBar);
  112.         applicationMenuItemFactory.addRankingMenu(menuBar);

  113.         // Politician Ranking: USER icon for individual-centric analysis
  114.         createPoliticianRankingTopics(menuBar.addItem(POLITICIAN_RANKING, VaadinIcons.USER, null));
  115.     }

  116.     /**
  117.      * Adds politician ranking topics to the specified menu item. Uses icons to convey
  118.      * context—e.g., LIST for lists, CHART for data visualization, GROUP for parties,
  119.      * HISTORY for historical data.
  120.      *
  121.      * @param politicianMenuItem the parent menu item for politician ranking topics
  122.      */
  123.     @Override
  124.     public void createPoliticianRankingTopics(final MenuItem politicianMenuItem) {
  125.         // Overview: DASHBOARD for a general overview panel
  126.         politicianMenuItem.addItem(OVERVIEW_TEXT, VaadinIcons.DASHBOARD, COMMAND_POLITICIAN_RANKING_OVERVIEW);

  127.         // Political experience summary: USER_CLOCK indicating experience over time
  128.         final MenuItem listItem = politicianMenuItem.addItem(POLITICAL_EXPERIENCE_SUMMARY, VaadinIcons.USER_CLOCK, COMMAND_POLITICIAN_RANKING_DATAGRID);
  129.         listItem.setDescription(CURRENT_AND_PAST_ASSIGNMENTS_DESCRIPTION);

  130.         // Chart by topic: CHART icon for visual data representation
  131.         final MenuItem chartByTopic = politicianMenuItem.addItem(CHART_BY_TOPIC_TEXT, VaadinIcons.CHART, null);

  132.         chartByTopic.addItem(ALL_PARTIES, VaadinIcons.GROUP, POL_RANK_COMMAND_CHARTS_ALL_PARTIES_BY_HEADCOUNT);
  133.         chartByTopic.addItem(CURRENT_PARTIES, VaadinIcons.GROUP, POLITICIAN_RANKING_COMMAND_CURRENT_PARTIES);

  134.         politicianMenuItem.addItem(PAGE_VISIT_HISTORY_TEXT, VaadinIcons.CHART, POLITICIAN_RANKING_COMMAND_PAGEVISIT_HISTORY);
  135.     }
  136. }