AdminApplicationSessionPageModContentFactoryImpl.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.admin.system.pagemode;

  20. import java.util.List;

  21. import org.springframework.security.access.annotation.Secured;
  22. import org.springframework.stereotype.Component;

  23. import com.hack23.cia.model.internal.application.system.impl.ApplicationActionEvent;
  24. import com.hack23.cia.model.internal.application.system.impl.ApplicationEventGroup;
  25. import com.hack23.cia.model.internal.application.system.impl.ApplicationSession;
  26. import com.hack23.cia.model.internal.application.system.impl.ApplicationSession_;
  27. import com.hack23.cia.service.api.DataContainer;
  28. import com.hack23.cia.web.impl.ui.application.action.ViewAction;
  29. import com.hack23.cia.web.impl.ui.application.views.admin.AdminViewConstants;
  30. import com.hack23.cia.web.impl.ui.application.views.common.converters.ListPropertyConverter;
  31. import com.hack23.cia.web.impl.ui.application.views.common.menufactory.api.pagecommands.PageCommandAdminConstants;
  32. import com.hack23.cia.web.impl.ui.application.views.common.pagemode.CardInfoRowUtil;
  33. import com.hack23.cia.web.impl.ui.application.views.common.sizing.ContentRatio;
  34. import com.hack23.cia.web.impl.ui.application.views.common.sizing.ContentSize;
  35. import com.hack23.cia.web.impl.ui.application.views.common.viewnames.AdminViews;
  36. import com.hack23.cia.web.impl.ui.application.views.pageclicklistener.PageItemPropertyClickListener;
  37. import com.vaadin.icons.VaadinIcons;
  38. import com.vaadin.server.Responsive;
  39. import com.vaadin.ui.HorizontalLayout;
  40. import com.vaadin.ui.Layout;
  41. import com.vaadin.ui.MenuBar;
  42. import com.vaadin.ui.Panel;
  43. import com.vaadin.ui.VerticalLayout;

  44. /**
  45.  * The Class AdminApplicationSessionPageModContentFactoryImpl.
  46.  */
  47. @Component
  48. public final class AdminApplicationSessionPageModContentFactoryImpl extends AbstractAdminSystemPageModContentFactoryImpl {

  49.     /** The Constant APPLICATION_ACTION_EVENT. */
  50.     private static final String APPLICATION_ACTION_EVENT = "ApplicationActionEvent";

  51.     /** The Constant APPLICATION_SESSION. */
  52.     private static final String APPLICATION_SESSION = "ApplicationSession";

  53.     /** The Constant COLUMN_ORDER. */
  54.     private static final String[] COLUMN_ORDER = {
  55.             "hjid",
  56.             "createdDate",
  57.             "sessionType",
  58.             "userId",
  59.             "events",
  60.             "operatingSystem",
  61.             "locale",
  62.             "ipInformation",
  63.             "userAgentInformation",
  64.             "sessionId"
  65.     };

  66.     /** The Constant COLUMN_ORDER2. */
  67.     private static final String[] COLUMN_ORDER2 = {
  68.             "hjid",
  69.             "createdDate",
  70.             "eventGroup",
  71.             "actionName",
  72.             "applicationOperation",
  73.             "page",
  74.             "pageMode",
  75.             "elementId",
  76.             "errorMessage",
  77.             "applicationMessage",
  78.             "modelObjectVersion"
  79.     };

  80.     /** The Constant HIDE_COLUMNS. */
  81.     private static final String[] HIDE_COLUMNS = {
  82.             "hjid",
  83.             "modelObjectId",
  84.             "modelObjectVersion",
  85.             "userAgentInformation",
  86.             "sessionId",
  87.             "ipInformation"
  88.     };

  89.     /** The Constant HIDE_COLUMNS2. */
  90.     private static final String[] HIDE_COLUMNS2 = {
  91.             "hjid",
  92.             "modelObjectId",
  93.             "modelObjectVersion",
  94.             "userId",
  95.             "sessionId"
  96.     };

  97.     /** The Constant NAME. */
  98.     public static final String NAME = AdminViews.ADMIN_APPLICATIONS_SESSION_VIEW_NAME;

  99.     /**
  100.      * Instantiates a new admin application session page mod content factory impl.
  101.      */
  102.     public AdminApplicationSessionPageModContentFactoryImpl() {
  103.         super(NAME);
  104.     }

  105.     @Secured({ "ROLE_ADMIN" })
  106.     @Override
  107.     public Layout createContent(final String parameters, final MenuBar menuBar, final Panel panel) {
  108.         final VerticalLayout content = createPanelContent();

  109.         final String pageId = getPageId(parameters);
  110.         final int pageNr = getPageNr(parameters);

  111.         getMenuItemFactory().createMainPageMenuBar(menuBar);

  112.         CardInfoRowUtil.createPageHeader(
  113.                 panel,
  114.                 content,
  115.                  AdminViewConstants.ADMIN_APPLICATION_SESSIONS,
  116.                  AdminViewConstants.SESSION_DETAILS,
  117.                  AdminViewConstants.SESSION_OVERVIEW
  118.         );

  119.         final DataContainer<ApplicationSession, Long> dataContainer = getApplicationManager()
  120.                 .getDataContainer(ApplicationSession.class);

  121.         final List<ApplicationSession> pageOrderBy = dataContainer.getPageOrderBy(
  122.                 pageNr,
  123.                 DEFAULT_RESULTS_PER_PAGE,
  124.                 ApplicationSession_.createdDate
  125.         );

  126.         getPagingUtil().createPagingControls(
  127.                 content,
  128.                 NAME,
  129.                 pageId,
  130.                 dataContainer.getSize(),
  131.                 pageNr,
  132.                 DEFAULT_RESULTS_PER_PAGE
  133.         );

  134.         getGridFactory().createBasicBeanItemGrid(
  135.                 content,
  136.                 ApplicationSession.class,
  137.                 pageOrderBy,
  138.                 APPLICATION_SESSION,
  139.                 COLUMN_ORDER,
  140.                 HIDE_COLUMNS,
  141.                 new PageItemPropertyClickListener(AdminViews.ADMIN_APPLICATIONS_SESSION_VIEW_NAME, "hjid"),
  142.                 null,
  143.                 new ListPropertyConverter[] { new ListPropertyConverter("page", "events", "actionName") }
  144.         );

  145.         if (pageId != null && !pageId.isEmpty()) {
  146.             final ApplicationSession applicationSession = dataContainer.load(Long.valueOf(pageId));
  147.             if (applicationSession != null) {
  148.                 // Create container layout for both the session card and the events grid
  149.                 final HorizontalLayout horizontalLayout = new HorizontalLayout();
  150.                 horizontalLayout.setWidth(ContentSize.FULL_SIZE);
  151.                 content.addComponent(horizontalLayout);
  152.                 content.setExpandRatio(horizontalLayout, ContentRatio.GRID);

  153.                 // Left side: card layout for ApplicationSession details
  154.                 final Panel cardPanel = new Panel();
  155.                 cardPanel.addStyleName("politician-overview-card"); // Reuse existing card style
  156.                 cardPanel.setWidth("100%");
  157.                 cardPanel.setHeightUndefined();
  158.                 Responsive.makeResponsive(cardPanel);

  159.                 final VerticalLayout cardContent = new VerticalLayout();
  160.                 cardContent.setMargin(true);
  161.                 cardContent.setSpacing(true);
  162.                 cardContent.setWidth("100%");
  163.                 cardPanel.setContent(cardContent);

  164.                 horizontalLayout.addComponent(cardPanel);
  165.                 horizontalLayout.setExpandRatio(cardPanel, ContentRatio.GRID);

  166.                 CardInfoRowUtil.createCardHeader(cardContent, AdminViewConstants.APPLICATION_SESSION_DETAILS);

  167.                 // Attributes layout
  168.                 final VerticalLayout attributesLayout = new VerticalLayout();
  169.                 attributesLayout.setSpacing(true);
  170.                 attributesLayout.setWidth("100%");
  171.                 cardContent.addComponent(attributesLayout);

  172.                 // Display each field if not null or empty
  173.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.CREATED_DATE, String.valueOf(applicationSession.getCreatedDate()), VaadinIcons.CALENDAR);
  174.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.SESSION_TYPE, applicationSession.getSessionType().toString(), VaadinIcons.CONNECT);
  175.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.USER_ID, applicationSession.getUserId(), VaadinIcons.USER);
  176.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.SESSION_ID, applicationSession.getSessionId(), VaadinIcons.KEY);
  177.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.OPERATING_SYSTEM, applicationSession.getOperatingSystem(), VaadinIcons.DESKTOP);
  178.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.LOCALE, applicationSession.getLocale(), VaadinIcons.GLOBE);
  179.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.IP_INFORMATION, applicationSession.getIpInformation(), VaadinIcons.INFO);
  180.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.USER_AGENT, applicationSession.getUserAgentInformation(), VaadinIcons.BROWSER);

  181.                 // Right side: grid for ApplicationActionEvent (session events)
  182.                 final VerticalLayout rightLayout = new VerticalLayout();
  183.                 rightLayout.setSizeFull();
  184.                 rightLayout.addStyleName("v-layout-content-overview-panel-level2");
  185.                 horizontalLayout.addComponent(rightLayout);
  186.                 horizontalLayout.setExpandRatio(rightLayout, ContentRatio.GRID);

  187.                 getGridFactory().createBasicBeanItemGrid(
  188.                         rightLayout,
  189.                         ApplicationActionEvent.class,
  190.                         applicationSession.getEvents(),
  191.                         APPLICATION_ACTION_EVENT,
  192.                         COLUMN_ORDER2,
  193.                         HIDE_COLUMNS2,
  194.                         new PageItemPropertyClickListener(AdminViews.ADMIN_APPLICATIONS_EVENTS_VIEW_NAME, "hjid"),
  195.                         null,
  196.                         null
  197.                 );
  198.             }
  199.         }

  200.         getPageActionEventHelper().createPageEvent(
  201.                 ViewAction.VISIT_ADMIN_APPLICATION_SESSION_VIEW,
  202.                 ApplicationEventGroup.ADMIN,
  203.                 NAME,
  204.                 null,
  205.                 pageId
  206.         );

  207.         return content;
  208.     }

  209.     @Override
  210.     public boolean matches(final String page, final String parameters) {
  211.         return PageCommandAdminConstants.COMMAND_APPLICATION_SESSION.matches(page, parameters);
  212.     }

  213. }