ParliamentRiskPageModContentFactoryImpl.java

  1. /*
  2.  * Copyright 2010-2024 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.user.parliament.pagemode;

  20. import java.util.ArrayList;
  21. import java.util.Collections;
  22. import java.util.List;
  23. import java.util.Map.Entry;
  24. import java.util.stream.Collectors;

  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.security.access.annotation.Secured;
  27. import org.springframework.stereotype.Component;

  28. import com.github.markash.ui.component.card.CounterStatisticModel;
  29. import com.github.markash.ui.component.card.CounterStatisticsCard;
  30. import com.github.markash.ui.component.card.StatisticShow;
  31. import com.hack23.cia.model.internal.application.data.rules.impl.ResourceType;
  32. import com.hack23.cia.model.internal.application.data.rules.impl.RuleViolation;
  33. import com.hack23.cia.model.internal.application.data.rules.impl.Status;
  34. import com.hack23.cia.model.internal.application.system.impl.ApplicationEventGroup;
  35. import com.hack23.cia.service.api.DataContainer;
  36. import com.hack23.cia.web.impl.ui.application.action.ViewAction;
  37. import com.hack23.cia.web.impl.ui.application.views.common.viewnames.PageMode;
  38. import com.hack23.cia.web.impl.ui.application.views.common.viewnames.RiskIndicators;
  39. import com.hack23.cia.web.impl.ui.application.views.pageclicklistener.ComplianceCheckPageItemRendererClickListener;
  40. import com.hack23.cia.web.impl.ui.application.views.user.parliament.pagemode.risk.ComplianceCheckImpl;
  41. import com.vaadin.icons.VaadinIcons;
  42. import com.vaadin.ui.HorizontalLayout;
  43. import com.vaadin.ui.Layout;
  44. import com.vaadin.ui.MenuBar;
  45. import com.vaadin.ui.Panel;
  46. import com.vaadin.ui.VerticalLayout;

  47. /**
  48.  * The Class ParliamentRiskPageModContentFactoryImpl.
  49.  */
  50. @Component
  51. public final class ParliamentRiskPageModContentFactoryImpl extends AbstractParliamentPageModContentFactoryImpl {

  52.     private static final ComplianceCheckPageItemRendererClickListener CLICK_LISTENER = new ComplianceCheckPageItemRendererClickListener();
  53.     /**
  54.      * Instantiates a new parliament risk page mod content factory impl.
  55.      */
  56.     public ParliamentRiskPageModContentFactoryImpl() {
  57.         super();
  58.     }

  59.     @Secured({ "ROLE_ANONYMOUS", "ROLE_USER", "ROLE_ADMIN" })
  60.     @Override
  61.     public Layout createContent(final String parameters, final MenuBar menuBar, final Panel panel) {
  62.         final VerticalLayout panelContent = createPanelContent();
  63.         getParliamentMenuItemFactory().createParliamentTopicMenu(menuBar);
  64.         createPageHeader(panel, panelContent,
  65.                 "Parliament - Risk Assessment",
  66.                 "Identifying Vulnerabilities",
  67.                 "Identifying institutional vulnerabilities and threats.");


  68.         final String pageId = getPageId(parameters);

  69.         final HorizontalLayout horizontalLayout = new HorizontalLayout();

  70.         final DataContainer<RuleViolation, String> dataContainer = getApplicationManager()
  71.                 .getDataContainer(RuleViolation.class);

  72.         final List<RuleViolation> ruleViolations = dataContainer.getAll();
  73.         final List<ComplianceCheckImpl> checks = new ArrayList<>();

  74.         for (final Entry<String, List<RuleViolation>> idMapViolations : ruleViolations.stream().collect(Collectors.groupingBy(RuleViolation::getReferenceId)).entrySet()) {
  75.             checks.add(new ComplianceCheckImpl(idMapViolations.getValue()));
  76.         }

  77.         Collections.sort(checks, (o1, o2) -> Integer.compare(o2.getRuleViolations().size(), o1.getRuleViolations().size()));

  78.         for (final Entry<Status, List<RuleViolation>> statusEntry : ruleViolations.stream().collect(Collectors.groupingBy(RuleViolation::getStatus)).entrySet()) {
  79.             horizontalLayout.addComponent(new CounterStatisticsCard(
  80.                     VaadinIcons.WARNING,new CounterStatisticModel("ALL:" +statusEntry.getKey(),statusEntry.getValue().size()).withShow(StatisticShow.Sum)
  81.                     .withIconHidden().withShowOnlyStatistic(true),"ALL:" +statusEntry.getKey()));
  82.         }

  83.         for (final Entry<ResourceType, List<RuleViolation>> statusEntry : ruleViolations.stream().collect(Collectors.groupingBy(RuleViolation::getResourceType)).entrySet()) {
  84.             horizontalLayout.addComponent(new CounterStatisticsCard(
  85.                     VaadinIcons.WARNING,new CounterStatisticModel("ALL:" +statusEntry.getKey(),statusEntry.getValue().size()).withShow(StatisticShow.Sum)
  86.                     .withIconHidden().withShowOnlyStatistic(true),"ALL:" +statusEntry.getKey()));
  87.         }


  88.         panelContent.addComponent(horizontalLayout);

  89.         getGridFactory().createBasicBeanItemGrid(panelContent, ComplianceCheckImpl.class, checks, "Risk",
  90.                 new String[] { "name", "resourceType", "numberRuleViolations", "ruleSummary" }, new String[] { "id", "ruleViolations" }, CLICK_LISTENER, null, null);

  91.         getPageActionEventHelper().createPageEvent(ViewAction.VISIT_PARLIAMENT_RANKING_VIEW, ApplicationEventGroup.USER,
  92.                 NAME, parameters, pageId);

  93.         return panelContent;

  94.     }

  95.     @Override
  96.     public boolean matches(final String page, final String parameters) {
  97.         return NAME.equals(page) && StringUtils.contains(parameters, PageMode.RULES.toString())
  98.                 && parameters.contains(RiskIndicators.RISK_SUMMARY.toString());
  99.     }

  100. }