From e3f12b5eafc759dc933c258130f5ad490cc5a06d Mon Sep 17 00:00:00 2001
From: Lars Johansson <lars.johansson@ess.eu>
Date: Mon, 3 Jul 2023 09:14:00 +0200
Subject: [PATCH] Refactor report about Naming application

---
 .../rest/controller/ReportController.java     | 476 ++++++++----------
 1 file changed, 200 insertions(+), 276 deletions(-)

diff --git a/src/main/java/org/openepics/names/rest/controller/ReportController.java b/src/main/java/org/openepics/names/rest/controller/ReportController.java
index ee209e5f..d564efbb 100644
--- a/src/main/java/org/openepics/names/rest/controller/ReportController.java
+++ b/src/main/java/org/openepics/names/rest/controller/ReportController.java
@@ -20,8 +20,8 @@ package org.openepics.names.rest.controller;
 
 import java.text.DateFormat;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.TreeMap;
 import java.util.UUID;
 
 import org.apache.commons.lang3.StringUtils;
@@ -48,6 +48,11 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
 
+/**
+ * This part of REST API provides reports for Naming application.
+ *
+ * @author Lars Johansson
+ */
 @Tag(name        = "Report",
      description = "provide reports for Naming application")
 @RestController
@@ -144,272 +149,95 @@ public class ReportController {
         ResponsePageNameElements nameElementsEssNamesNotDeleted = namesService.readNames(Boolean.FALSE, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null);
         ResponsePageNameElements nameElementsEssNamesNotDeletedLegacy = namesService.readNamesLegacy(null, null, null, null, null);
 
-        long nbrEssNameSystemstructure = 0;
-        long nbrEssNameSystemstructureDevicestructure = 0;
-        long nbrEssNameSystemstructureDevicestructureIndex = 0;
-        long nbrEssNameOther = 0;
+        HolderReportName holderReportName = new HolderReportName(nameElementsEssNamesNotDeleted);
         long nbrEssNameLegacy = nameElementsEssNamesNotDeletedLegacy.getTotalCount();
 
-        for (NameElement nameElement : nameElementsEssNamesNotDeleted.getList()) {
-            if (!StringUtils.isEmpty(nameElement.getSystemStructure())
-                    && StringUtils.isEmpty(nameElement.getDeviceStructure())
-                    && StringUtils.isEmpty(nameElement.getIndex())) {
-                nbrEssNameSystemstructure++;
-            } else if (!StringUtils.isEmpty(nameElement.getSystemStructure())
-                    && !StringUtils.isEmpty(nameElement.getDeviceStructure())
-                    && StringUtils.isEmpty(nameElement.getIndex())) {
-                nbrEssNameSystemstructureDevicestructure++;
-            } else if (!StringUtils.isEmpty(nameElement.getSystemStructure())
-                    && !StringUtils.isEmpty(nameElement.getDeviceStructure())
-                    && !StringUtils.isEmpty(nameElement.getIndex())) {
-                nbrEssNameSystemstructureDevicestructureIndex++;
-            } else {
-                nbrEssNameOther++;
-            }
-        }
-
         // prepare metrics
         //     read structures - latest
         //     count structures - status
-        ResponsePageStructureElements structureElementsSystemgroup = structuresService.readStructures(Type.SYSTEMGROUP, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
+        ResponsePageStructureElements structureElementsSystemGroup = structuresService.readStructures(Type.SYSTEMGROUP, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
         ResponsePageStructureElements structureElementsSystem = structuresService.readStructures(Type.SYSTEM, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
         ResponsePageStructureElements structureElementsSubsystem = structuresService.readStructures(Type.SUBSYSTEM, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
         ResponsePageStructureElements structureElementsDiscipline = structuresService.readStructures(Type.DISCIPLINE, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
-        ResponsePageStructureElements structureElementsDevicegroup = structuresService.readStructures(Type.DEVICEGROUP, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
-        ResponsePageStructureElements structureElementsDevicetype = structuresService.readStructures(Type.DEVICETYPE, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
-
-        Map<UUID, Long> mapUuidCountSystemGroup = new TreeMap<>();
-        Map<UUID, Long> mapUuidCountSystem = new TreeMap<>();
-        Map<UUID, Long> mapUuidCountSubsystem = new TreeMap<>();
-        Map<UUID, Long> mapUuidCountDiscipline = new TreeMap<>();
-        Map<UUID, Long> mapUuidCountDeviceGroup = new TreeMap<>();
-        Map<UUID, Long> mapUuidCountDeviceType = new TreeMap<>();
-        long nbrActiveSystemGroup = 0;
-        long nbrActiveSystem = 0;
-        long nbrActiveSubsystem = 0;
-        long nbrActiveDiscipline = 0;
-        long nbrActiveDeviceGroup = 0;
-        long nbrActiveDeviceType = 0;
-        long nbrDeletedSystemGroup = 0;
-        long nbrDeletedSystem = 0;
-        long nbrDeletedSubsystem = 0;
-        long nbrDeletedDiscipline = 0;
-        long nbrDeletedDeviceGroup = 0;
-        long nbrDeletedDeviceType = 0;
-        long nbrPendingSystemGroup = 0;
-        long nbrPendingSystem = 0;
-        long nbrPendingSubsystem = 0;
-        long nbrPendingDiscipline = 0;
-        long nbrPendingDeviceGroup = 0;
-        long nbrPendingDeviceType = 0;
-        long nbrCancelledSystemGroup = 0;
-        long nbrCancelledSystem = 0;
-        long nbrCancelledSubsystem = 0;
-        long nbrCancelledDiscipline = 0;
-        long nbrCancelledDeviceGroup = 0;
-        long nbrCancelledDeviceType = 0;
-        long nbrRejectedSystemGroup = 0;
-        long nbrRejectedSystem = 0;
-        long nbrRejectedSubsystem = 0;
-        long nbrRejectedDiscipline = 0;
-        long nbrRejectedDeviceGroup = 0;
-        long nbrRejectedDeviceType = 0;
-        long nbrOtherSystemGroup = 0;
-        long nbrOtherSystem = 0;
-        long nbrOtherSubsystem = 0;
-        long nbrOtherDiscipline = 0;
-        long nbrOtherDeviceGroup = 0;
-        long nbrOtherDeviceType = 0;
-
-        for (StructureElement structureElement : structureElementsSystemgroup.getList()) {
-            addOne(structureElement.getUuid(), mapUuidCountSystemGroup);
-            if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.FALSE.equals(structureElement.isDeleted())) {
-                nbrActiveSystemGroup++;
-            } else if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.TRUE.equals(structureElement.isDeleted())) {
-                nbrDeletedSystemGroup++;
-            } else if (Status.PENDING.equals(structureElement.getStatus())) {
-                nbrPendingSystemGroup++;
-            } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
-                nbrCancelledSystemGroup++;
-            } else if (Status.REJECTED.equals(structureElement.getStatus())) {
-                nbrRejectedSystemGroup++;
-            } else {
-                nbrOtherSystemGroup++;
-            }
-        }
-        for (StructureElement structureElement : structureElementsSystem.getList()) {
-            addOne(structureElement.getUuid(), mapUuidCountSystem);
-            if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.FALSE.equals(structureElement.isDeleted())) {
-                nbrActiveSystem++;
-            } else if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.TRUE.equals(structureElement.isDeleted())) {
-                nbrDeletedSystem++;
-            } else if (Status.PENDING.equals(structureElement.getStatus())) {
-                nbrPendingSystem++;
-            } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
-                nbrCancelledSystem++;
-            } else if (Status.REJECTED.equals(structureElement.getStatus())) {
-                nbrRejectedSystem++;
-            } else {
-                nbrOtherSystem++;
-            }
-        }
-        for (StructureElement structureElement : structureElementsSubsystem.getList()) {
-            addOne(structureElement.getUuid(), mapUuidCountSubsystem);
-            if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.FALSE.equals(structureElement.isDeleted())) {
-                nbrActiveSubsystem++;
-            } else if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.TRUE.equals(structureElement.isDeleted())) {
-                nbrDeletedSubsystem++;
-            } else if (Status.PENDING.equals(structureElement.getStatus())) {
-                nbrPendingSubsystem++;
-            } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
-                nbrCancelledSubsystem++;
-            } else if (Status.REJECTED.equals(structureElement.getStatus())) {
-                nbrRejectedSubsystem++;
-            } else {
-                nbrOtherSubsystem++;
-            }
-        }
-        for (StructureElement structureElement : structureElementsDiscipline.getList()) {
-            addOne(structureElement.getUuid(), mapUuidCountDiscipline);
-            if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.FALSE.equals(structureElement.isDeleted())) {
-                nbrActiveDiscipline++;
-            } else if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.TRUE.equals(structureElement.isDeleted())) {
-                nbrDeletedDiscipline++;
-            } else if (Status.PENDING.equals(structureElement.getStatus())) {
-                nbrPendingDiscipline++;
-            } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
-                nbrCancelledDiscipline++;
-            } else if (Status.REJECTED.equals(structureElement.getStatus())) {
-                nbrRejectedDiscipline++;
-            } else {
-                nbrOtherDiscipline++;
-            }
-        }
-        for (StructureElement structureElement : structureElementsDevicegroup.getList()) {
-            addOne(structureElement.getUuid(), mapUuidCountDeviceGroup);
-            if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.FALSE.equals(structureElement.isDeleted())) {
-                nbrActiveDeviceGroup++;
-            } else if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.TRUE.equals(structureElement.isDeleted())) {
-                nbrDeletedDeviceGroup++;
-            } else if (Status.PENDING.equals(structureElement.getStatus())) {
-                nbrPendingDeviceGroup++;
-            } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
-                nbrCancelledDeviceGroup++;
-            } else if (Status.REJECTED.equals(structureElement.getStatus())) {
-                nbrRejectedDeviceGroup++;
-            } else {
-                nbrOtherDeviceGroup++;
-            }
-        }
-        for (StructureElement structureElement : structureElementsDevicetype.getList()) {
-            addOne(structureElement.getUuid(), mapUuidCountDeviceType);
-            if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.FALSE.equals(structureElement.isDeleted())) {
-                nbrActiveDeviceType++;
-            } else if (Status.APPROVED.equals(structureElement.getStatus())
-                    && Boolean.TRUE.equals(structureElement.isLatest())
-                    && Boolean.TRUE.equals(structureElement.isDeleted())) {
-                nbrDeletedDeviceType++;
-            } else if (Status.PENDING.equals(structureElement.getStatus())) {
-                nbrPendingDeviceType++;
-            } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
-                nbrCancelledDeviceType++;
-            } else if (Status.REJECTED.equals(structureElement.getStatus())) {
-                nbrRejectedDeviceType++;
-            } else {
-                nbrOtherDeviceType++;
-            }
-        }
+        ResponsePageStructureElements structureElementsDeviceGroup = structuresService.readStructures(Type.DEVICEGROUP, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
+        ResponsePageStructureElements structureElementsDeviceType = structuresService.readStructures(Type.DEVICETYPE, null, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE);
+
+        HolderReportStructure holderReportStructureSystemGroup = new HolderReportStructure(structureElementsSystemGroup);
+        HolderReportStructure holderReportStructureSystem = new HolderReportStructure(structureElementsSystem);
+        HolderReportStructure holderReportStructureSubsystem = new HolderReportStructure(structureElementsSubsystem);
+        HolderReportStructure holderReportStructureDiscipline = new HolderReportStructure(structureElementsDiscipline);
+        HolderReportStructure holderReportStructureDeviceGroup = new HolderReportStructure(structureElementsDeviceGroup);
+        HolderReportStructure holderReportStructureDeviceType = new HolderReportStructure(structureElementsDeviceType);
 
         // prepare text
         int spaceUntilSizeStructure = 16;
 
         String metricsOverviewEssName     = NBR_ACTIVE + nameElementsEssNamesNotDeleted.getListSize();
-        String metricsOverviewSystemGroup = NBR_ACTIVE + nbrActiveSystemGroup;
-        String metricsOverviewSystem      = NBR_ACTIVE + nbrActiveSystem;
-        String metricsOverviewSubsystem   = NBR_ACTIVE + nbrActiveSubsystem;
-        String metricsOverviewDiscipline  = NBR_ACTIVE + nbrActiveDiscipline;
-        String metricsOverviewDeviceGroup = NBR_ACTIVE + nbrActiveDeviceGroup;
-        String metricsOverviewDeviceType  = NBR_ACTIVE + nbrActiveDeviceType;
-
-        String metricsEssName = NBR_ALL + addSpaceUntilSize(nameElementsEssNames.getListSize(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nameElementsEssNamesNotDeleted.getListSize(), spaceUntilSizeStructure)
+        String metricsOverviewSystemGroup = NBR_ACTIVE + holderReportStructureSystemGroup.getNumberActive();
+        String metricsOverviewSystem      = NBR_ACTIVE + holderReportStructureSystem.getNumberActive();
+        String metricsOverviewSubsystem   = NBR_ACTIVE + holderReportStructureSubsystem.getNumberActive();
+        String metricsOverviewDiscipline  = NBR_ACTIVE + holderReportStructureDiscipline.getNumberActive();
+        String metricsOverviewDeviceGroup = NBR_ACTIVE + holderReportStructureDeviceGroup.getNumberActive();
+        String metricsOverviewDeviceType  = NBR_ACTIVE + holderReportStructureDeviceType.getNumberActive();
+
+        String metricsEssName =
+                  NBR_ALL     + addSpaceUntilSize(nameElementsEssNames.getListSize(), spaceUntilSizeStructure)
+                + NBR_ACTIVE  + addSpaceUntilSize(nameElementsEssNamesNotDeleted.getListSize(), spaceUntilSizeStructure)
                 + NBR_DELETED + addSpaceUntilSize(nameElementsEssNamesDeleted.getListSize(), spaceUntilSizeStructure);
-        String metricsEssNameSystemstructure                     = NBR + nbrEssNameSystemstructure;
-        String metricsEssNameSystemstructureDevicestructure      = NBR + nbrEssNameSystemstructureDevicestructure;
-        String metricsEssNameSystemstructureDevicestructureIndex = NBR + nbrEssNameSystemstructureDevicestructureIndex;
-        String metricsEssNameOther                               = NBR + nbrEssNameOther;
+        String metricsEssNameSystemstructure                     = NBR + holderReportName.getNumberEssNameSystemstructure();
+        String metricsEssNameSystemstructureDevicestructure      = NBR + holderReportName.getNumberEssNameSystemstructureDevicestructure();
+        String metricsEssNameSystemstructureDevicestructureIndex = NBR + holderReportName.getNumberEssNameSystemstructureDevicestructureIndex();
+        String metricsEssNameOther                               = NBR + holderReportName.getNumberEssNameOther();
 
         String metricsSystemstructureSystemGroup =
-                NBR_ALL + addSpaceUntilSize(mapUuidCountSystemGroup.size(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nbrActiveSystemGroup, spaceUntilSizeStructure)
-                + NBR_DELETED + addSpaceUntilSize(nbrDeletedSystemGroup, spaceUntilSizeStructure)
-                + NBR_PENDING + addSpaceUntilSize(nbrPendingSystemGroup, spaceUntilSizeStructure)
-                + NBR_CANCELLED + addSpaceUntilSize(nbrCancelledSystemGroup, spaceUntilSizeStructure)
-                + NBR_REJECTED + addSpaceUntilSize(nbrRejectedSystemGroup, spaceUntilSizeStructure)
-                + NBR_OTHER + addSpaceUntilSize(nbrOtherSystemGroup, spaceUntilSizeStructure);
+                  NBR_ALL       + addSpaceUntilSize(holderReportStructureSystemGroup.getSizeMapUuidCount(), spaceUntilSizeStructure)
+                + NBR_ACTIVE    + addSpaceUntilSize(holderReportStructureSystemGroup.getNumberActive(), spaceUntilSizeStructure)
+                + NBR_DELETED   + addSpaceUntilSize(holderReportStructureSystemGroup.getNumberDeleted(), spaceUntilSizeStructure)
+                + NBR_PENDING   + addSpaceUntilSize(holderReportStructureSystemGroup.getNumberPending(), spaceUntilSizeStructure)
+                + NBR_CANCELLED + addSpaceUntilSize(holderReportStructureSystemGroup.getNumberCancelled(), spaceUntilSizeStructure)
+                + NBR_REJECTED  + addSpaceUntilSize(holderReportStructureSystemGroup.getNumberRejected(), spaceUntilSizeStructure)
+                + NBR_OTHER     + addSpaceUntilSize(holderReportStructureSystemGroup.getNumberOther(), spaceUntilSizeStructure);
         String metricsSystemstructureSystem =
-                NBR_ALL + addSpaceUntilSize(mapUuidCountSystem.size(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nbrActiveSystem, spaceUntilSizeStructure)
-                + NBR_DELETED + addSpaceUntilSize(nbrDeletedSystem, spaceUntilSizeStructure)
-                + NBR_PENDING + addSpaceUntilSize(nbrPendingSystem, spaceUntilSizeStructure)
-                + NBR_CANCELLED + addSpaceUntilSize(nbrCancelledSystem, spaceUntilSizeStructure)
-                + NBR_REJECTED + addSpaceUntilSize(nbrRejectedSystem, spaceUntilSizeStructure)
-                + NBR_OTHER + addSpaceUntilSize(nbrOtherSystem, spaceUntilSizeStructure);
+                  NBR_ALL       + addSpaceUntilSize(holderReportStructureSystem.getSizeMapUuidCount(), spaceUntilSizeStructure)
+                + NBR_ACTIVE    + addSpaceUntilSize(holderReportStructureSystem.getNumberActive(), spaceUntilSizeStructure)
+                + NBR_DELETED   + addSpaceUntilSize(holderReportStructureSystem.getNumberDeleted(), spaceUntilSizeStructure)
+                + NBR_PENDING   + addSpaceUntilSize(holderReportStructureSystem.getNumberPending(), spaceUntilSizeStructure)
+                + NBR_CANCELLED + addSpaceUntilSize(holderReportStructureSystem.getNumberCancelled(), spaceUntilSizeStructure)
+                + NBR_REJECTED  + addSpaceUntilSize(holderReportStructureSystem.getNumberRejected(), spaceUntilSizeStructure)
+                + NBR_OTHER     + addSpaceUntilSize(holderReportStructureSystem.getNumberOther(), spaceUntilSizeStructure);
         String metricsSystemstructureSubsystem =
-                NBR_ALL + addSpaceUntilSize(mapUuidCountSubsystem.size(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nbrActiveSubsystem, spaceUntilSizeStructure)
-                + NBR_DELETED + addSpaceUntilSize(nbrDeletedSubsystem, spaceUntilSizeStructure)
-                + NBR_PENDING + addSpaceUntilSize(nbrPendingSubsystem, spaceUntilSizeStructure)
-                + NBR_CANCELLED + addSpaceUntilSize(nbrCancelledSubsystem, spaceUntilSizeStructure)
-                + NBR_REJECTED + addSpaceUntilSize(nbrRejectedSubsystem, spaceUntilSizeStructure)
-                + NBR_OTHER + addSpaceUntilSize(nbrOtherSubsystem, spaceUntilSizeStructure);
+                  NBR_ALL       + addSpaceUntilSize(holderReportStructureSubsystem.getSizeMapUuidCount(), spaceUntilSizeStructure)
+                + NBR_ACTIVE    + addSpaceUntilSize(holderReportStructureSubsystem.getNumberActive(), spaceUntilSizeStructure)
+                + NBR_DELETED   + addSpaceUntilSize(holderReportStructureSubsystem.getNumberDeleted(), spaceUntilSizeStructure)
+                + NBR_PENDING   + addSpaceUntilSize(holderReportStructureSubsystem.getNumberPending(), spaceUntilSizeStructure)
+                + NBR_CANCELLED + addSpaceUntilSize(holderReportStructureSubsystem.getNumberCancelled(), spaceUntilSizeStructure)
+                + NBR_REJECTED  + addSpaceUntilSize(holderReportStructureSubsystem.getNumberRejected(), spaceUntilSizeStructure)
+                + NBR_OTHER     + addSpaceUntilSize(holderReportStructureSubsystem.getNumberOther(), spaceUntilSizeStructure);
 
         String metricsDevicestructureDiscipline =
-                NBR_ALL + addSpaceUntilSize(mapUuidCountDiscipline.size(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nbrActiveDiscipline, spaceUntilSizeStructure)
-                + NBR_DELETED + addSpaceUntilSize(nbrDeletedDiscipline, spaceUntilSizeStructure)
-                + NBR_PENDING + addSpaceUntilSize(nbrPendingDiscipline, spaceUntilSizeStructure)
-                + NBR_CANCELLED + addSpaceUntilSize(nbrCancelledDiscipline, spaceUntilSizeStructure)
-                + NBR_REJECTED + addSpaceUntilSize(nbrRejectedDiscipline, spaceUntilSizeStructure)
-                + NBR_OTHER + addSpaceUntilSize(nbrOtherDiscipline, spaceUntilSizeStructure);
+                  NBR_ALL       + addSpaceUntilSize(holderReportStructureDiscipline.getSizeMapUuidCount(), spaceUntilSizeStructure)
+                + NBR_ACTIVE    + addSpaceUntilSize(holderReportStructureDiscipline.getNumberActive(), spaceUntilSizeStructure)
+                + NBR_DELETED   + addSpaceUntilSize(holderReportStructureDiscipline.getNumberDeleted(), spaceUntilSizeStructure)
+                + NBR_PENDING   + addSpaceUntilSize(holderReportStructureDiscipline.getNumberPending(), spaceUntilSizeStructure)
+                + NBR_CANCELLED + addSpaceUntilSize(holderReportStructureDiscipline.getNumberCancelled(), spaceUntilSizeStructure)
+                + NBR_REJECTED  + addSpaceUntilSize(holderReportStructureDiscipline.getNumberRejected(), spaceUntilSizeStructure)
+                + NBR_OTHER     + addSpaceUntilSize(holderReportStructureDiscipline.getNumberOther(), spaceUntilSizeStructure);
         String metricsDevicestructureDeviceGroup =
-                NBR_ALL + addSpaceUntilSize(mapUuidCountDeviceGroup.size(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nbrActiveDeviceGroup, spaceUntilSizeStructure)
-                + NBR_DELETED + addSpaceUntilSize(nbrDeletedDeviceGroup, spaceUntilSizeStructure)
-                + NBR_PENDING + addSpaceUntilSize(nbrPendingDeviceGroup, spaceUntilSizeStructure)
-                + NBR_CANCELLED + addSpaceUntilSize(nbrCancelledDeviceGroup, spaceUntilSizeStructure)
-                + NBR_REJECTED + addSpaceUntilSize(nbrRejectedDeviceGroup, spaceUntilSizeStructure)
-                + NBR_OTHER + addSpaceUntilSize(nbrOtherDeviceGroup, spaceUntilSizeStructure);
+                  NBR_ALL       + addSpaceUntilSize(holderReportStructureDeviceGroup.getSizeMapUuidCount(), spaceUntilSizeStructure)
+                + NBR_ACTIVE    + addSpaceUntilSize(holderReportStructureDeviceGroup.getNumberActive(), spaceUntilSizeStructure)
+                + NBR_DELETED   + addSpaceUntilSize(holderReportStructureDeviceGroup.getNumberDeleted(), spaceUntilSizeStructure)
+                + NBR_PENDING   + addSpaceUntilSize(holderReportStructureDeviceGroup.getNumberPending(), spaceUntilSizeStructure)
+                + NBR_CANCELLED + addSpaceUntilSize(holderReportStructureDeviceGroup.getNumberCancelled(), spaceUntilSizeStructure)
+                + NBR_REJECTED  + addSpaceUntilSize(holderReportStructureDeviceGroup.getNumberRejected(), spaceUntilSizeStructure)
+                + NBR_OTHER     + addSpaceUntilSize(holderReportStructureDeviceGroup.getNumberOther(), spaceUntilSizeStructure);
         String metricsDevicestructureDeviceType =
-                NBR_ALL + addSpaceUntilSize(mapUuidCountDeviceType.size(), spaceUntilSizeStructure)
-                + NBR_ACTIVE + addSpaceUntilSize(nbrActiveDeviceType, spaceUntilSizeStructure)
-                + NBR_DELETED + addSpaceUntilSize(nbrDeletedDeviceType, spaceUntilSizeStructure)
-                + NBR_PENDING + addSpaceUntilSize(nbrPendingDeviceType, spaceUntilSizeStructure)
-                + NBR_CANCELLED + addSpaceUntilSize(nbrCancelledDeviceType, spaceUntilSizeStructure)
-                + NBR_REJECTED + addSpaceUntilSize(nbrRejectedDeviceType, spaceUntilSizeStructure)
-                + NBR_OTHER + addSpaceUntilSize(nbrOtherDeviceType, spaceUntilSizeStructure);
+                  NBR_ALL       + addSpaceUntilSize(holderReportStructureDeviceType.getSizeMapUuidCount(), spaceUntilSizeStructure)
+                + NBR_ACTIVE    + addSpaceUntilSize(holderReportStructureDeviceType.getNumberActive(), spaceUntilSizeStructure)
+                + NBR_DELETED   + addSpaceUntilSize(holderReportStructureDeviceType.getNumberDeleted(), spaceUntilSizeStructure)
+                + NBR_PENDING   + addSpaceUntilSize(holderReportStructureDeviceType.getNumberPending(), spaceUntilSizeStructure)
+                + NBR_CANCELLED + addSpaceUntilSize(holderReportStructureDeviceType.getNumberCancelled(), spaceUntilSizeStructure)
+                + NBR_REJECTED  + addSpaceUntilSize(holderReportStructureDeviceType.getNumberRejected(), spaceUntilSizeStructure)
+                + NBR_OTHER     + addSpaceUntilSize(holderReportStructureDeviceType.getNumberOther(), spaceUntilSizeStructure);
 
         StringBuilder metricsPIDDiscipline = new StringBuilder();
         for (String discipline : NamingConventionUtil.getDisciplinesPID()) {
@@ -484,37 +312,6 @@ public class ReportController {
         return sb.toString();
     }
 
-    /**
-     * Add one to count for key in map.
-     *
-     * @param key key
-     * @param map map
-     */
-    private void addOne(UUID key, Map<UUID, Long> map) {
-        addOne(key, map, null);
-    }
-    /**
-     * Add one to count for key in map.
-     *
-     * @param key key
-     * @param map map
-     * @param mapNok map nok
-     */
-    private void addOne(UUID key, Map<UUID, Long> map, Map<UUID, Long> mapNok) {
-        if (key == null) {
-            return;
-        }
-
-        Long no = map.get(key);
-        if (mapNok != null && no == null) {
-            no = mapNok.get(key);
-            no = no != null ? no + 1 : 1;
-            mapNok.put(key, no);
-        } else {
-            no = no != null ? no + 1 : 1;
-            map.put(key, no);
-        }
-    }
     /**
      * Add space to string (for value) until it has size.
      *
@@ -543,4 +340,131 @@ public class ReportController {
         return addSpaceUntilSize(String.valueOf(val), size);
     }
 
+    /**
+     * Utility class and holder of content about names for reporting purposes.
+     *
+     * @author Lars Johansson
+     */
+    private class HolderReportName {
+
+        private int nbrEssNameSystemstructure = 0;
+        private int nbrEssNameSystemstructureDevicestructure = 0;
+        private int nbrEssNameSystemstructureDevicestructureIndex = 0;
+        private int nbrEssNameOther = 0;
+
+        public HolderReportName(ResponsePageNameElements nameElements) {
+            for (NameElement nameElement : nameElements.getList()) {
+                if (!StringUtils.isEmpty(nameElement.getSystemStructure())
+                        && StringUtils.isEmpty(nameElement.getDeviceStructure())
+                        && StringUtils.isEmpty(nameElement.getIndex())) {
+                    nbrEssNameSystemstructure++;
+                } else if (!StringUtils.isEmpty(nameElement.getSystemStructure())
+                        && !StringUtils.isEmpty(nameElement.getDeviceStructure())
+                        && StringUtils.isEmpty(nameElement.getIndex())) {
+                    nbrEssNameSystemstructureDevicestructure++;
+                } else if (!StringUtils.isEmpty(nameElement.getSystemStructure())
+                        && !StringUtils.isEmpty(nameElement.getDeviceStructure())
+                        && !StringUtils.isEmpty(nameElement.getIndex())) {
+                    nbrEssNameSystemstructureDevicestructureIndex++;
+                } else {
+                    nbrEssNameOther++;
+                }
+            }
+        }
+
+        public int getNumberEssNameSystemstructure() {
+            return nbrEssNameSystemstructure;
+        }
+        public int getNumberEssNameSystemstructureDevicestructure() {
+            return nbrEssNameSystemstructureDevicestructure;
+        }
+        public int getNumberEssNameSystemstructureDevicestructureIndex() {
+            return nbrEssNameSystemstructureDevicestructureIndex;
+        }
+        public int getNumberEssNameOther() {
+            return nbrEssNameOther;
+        }
+
+    }
+
+    /**
+     * Utility class and holder of content about structures for reporting purposes.
+     *
+     * @author Lars Johansson
+     */
+    private class HolderReportStructure {
+
+        private Map<UUID, Long> mapUuidCount = new HashMap<>();
+
+        private int nbrActive = 0;
+        private int nbrDeleted = 0;
+        private int nbrPending = 0;
+        private int nbrCancelled = 0;
+        private int nbrRejected = 0;
+        private int nbrOther = 0;
+
+        public HolderReportStructure(ResponsePageStructureElements structureElements) {
+            for (StructureElement structureElement : structureElements.getList()) {
+                addOne(structureElement.getUuid(), mapUuidCount);
+
+                if (Status.APPROVED.equals(structureElement.getStatus())
+                        && Boolean.TRUE.equals(structureElement.isLatest())
+                        && Boolean.FALSE.equals(structureElement.isDeleted())) {
+                    nbrActive++;
+                } else if (Status.APPROVED.equals(structureElement.getStatus())
+                        && Boolean.TRUE.equals(structureElement.isLatest())
+                        && Boolean.TRUE.equals(structureElement.isDeleted())) {
+                    nbrDeleted++;
+                } else if (Status.PENDING.equals(structureElement.getStatus())) {
+                    nbrPending++;
+                } else if (Status.CANCELLED.equals(structureElement.getStatus())) {
+                    nbrCancelled++;
+                } else if (Status.REJECTED.equals(structureElement.getStatus())) {
+                    nbrRejected++;
+                } else {
+                    nbrOther++;
+                }
+            }
+        }
+
+        /**
+         * Add one to count for key in map.
+         *
+         * @param key key
+         * @param map map
+         */
+        private void addOne(UUID key, Map<UUID, Long> map) {
+            if (key == null) {
+                return;
+            }
+
+            Long no = map.get(key);
+            no = no != null ? no + 1 : 1;
+            map.put(key, no);
+        }
+
+        public int getSizeMapUuidCount() {
+            return mapUuidCount.size();
+        }
+        public int getNumberActive() {
+            return nbrActive;
+        }
+        public int getNumberDeleted() {
+            return nbrDeleted;
+        }
+        public int getNumberPending() {
+            return nbrPending;
+        }
+        public int getNumberCancelled() {
+            return nbrCancelled;
+        }
+        public int getNumberRejected() {
+            return nbrRejected;
+        }
+        public int getNumberOther() {
+            return nbrOther;
+        }
+
+    }
+
 }
-- 
GitLab