AdminPortalPageModContentFactoryImpl.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.ApplicationEventGroup;
  24. import com.hack23.cia.model.internal.application.system.impl.Portal;
  25. import com.hack23.cia.model.internal.application.system.impl.Portal_;
  26. import com.hack23.cia.service.api.DataContainer;
  27. import com.hack23.cia.web.impl.ui.application.action.ViewAction;
  28. import com.hack23.cia.web.impl.ui.application.views.admin.AdminViewConstants;
  29. import com.hack23.cia.web.impl.ui.application.views.common.pagemode.CardInfoRowUtil;
  30. import com.hack23.cia.web.impl.ui.application.views.common.viewnames.AdminViews;
  31. import com.hack23.cia.web.impl.ui.application.views.pageclicklistener.PageItemPropertyClickListener;
  32. import com.vaadin.icons.VaadinIcons;
  33. import com.vaadin.server.Responsive;
  34. import com.vaadin.ui.Layout;
  35. import com.vaadin.ui.MenuBar;
  36. import com.vaadin.ui.Panel;
  37. import com.vaadin.ui.VerticalLayout;

  38. /**
  39.  * The Class AdminPortalPageModContentFactoryImpl.
  40.  */
  41. @Component
  42. public final class AdminPortalPageModContentFactoryImpl extends AbstractAdminSystemPageModContentFactoryImpl {

  43.     /** The Constant COLUMN_ORDER. */
  44.     private static final String[] COLUMN_ORDER = {
  45.         "hjid",
  46.         "portalName",
  47.         "description",
  48.         "portalType",
  49.         "googleMapApiKey",
  50.         "modelObjectVersion"
  51.     };

  52.     /** The Constant HIDE_COLUMNS. */
  53.     private static final String[] HIDE_COLUMNS = {
  54.         "hjid",
  55.         "modelObjectId",
  56.         "googleMapApiKey",
  57.         "modelObjectVersion"
  58.     };

  59.     /** The Constant NAME. */
  60.     public static final String NAME = AdminViews.ADMIN_PORTAL_VIEW_NAME;

  61.     /** The Constant PORTAL2. */
  62.     private static final String PORTAL2 = "Portal";

  63.     /**
  64.      * Instantiates a new admin portal page mod content factory impl.
  65.      */
  66.     public AdminPortalPageModContentFactoryImpl() {
  67.         super(NAME);
  68.     }

  69.     @Secured({ "ROLE_ADMIN" })
  70.     @Override
  71.     public Layout createContent(final String parameters, final MenuBar menuBar, final Panel panel) {
  72.         final VerticalLayout content = createPanelContent();
  73.         content.setStyleName("admin-portal-content");

  74.         final String pageId = getPageId(parameters);
  75.         final int pageNr = getPageNr(parameters);

  76.         getMenuItemFactory().createMainPageMenuBar(menuBar);

  77.         CardInfoRowUtil.createPageHeader(panel, content,
  78.             AdminViewConstants.ADMIN_PORTAL_MANAGEMENT,
  79.             AdminViewConstants.PORTAL_OVERVIEW,
  80.             AdminViewConstants.PORTAL_MANAGEMENT_OVERVIEW
  81.         );

  82.         final DataContainer<Portal, Long> dataContainer = getApplicationManager().getDataContainer(Portal.class);

  83.         final List<Portal> pageOrderBy = dataContainer.getPageOrderBy(
  84.             pageNr,
  85.             DEFAULT_RESULTS_PER_PAGE,
  86.             Portal_.portalName
  87.         );

  88.         getPagingUtil().createPagingControls(
  89.             content,
  90.             NAME,
  91.             pageId,
  92.             dataContainer.getSize(),
  93.             pageNr,
  94.             DEFAULT_RESULTS_PER_PAGE
  95.         );

  96.         getGridFactory().createBasicBeanItemGrid(
  97.             content,
  98.             Portal.class,
  99.             pageOrderBy,
  100.             PORTAL2,
  101.             COLUMN_ORDER,
  102.             HIDE_COLUMNS,
  103.             new PageItemPropertyClickListener(AdminViews.ADMIN_PORTAL_VIEW_NAME, "hjid"),
  104.             null,
  105.             null
  106.         );

  107.         if (pageId != null && !pageId.isEmpty()) {
  108.             final Portal portal = dataContainer.load(Long.valueOf(pageId));
  109.             if (portal != null) {
  110.                 // Create a card-style layout for Portal details
  111.                 final Panel cardPanel = new Panel();
  112.                 cardPanel.addStyleName("politician-overview-card"); // Reuse existing card style
  113.                 cardPanel.setWidth("100%");
  114.                 cardPanel.setHeightUndefined();
  115.                 Responsive.makeResponsive(cardPanel);

  116.                 final VerticalLayout cardContent = new VerticalLayout();
  117.                 cardContent.setMargin(true);
  118.                 cardContent.setSpacing(true);
  119.                 cardContent.setWidth("100%");
  120.                 cardPanel.setContent(cardContent);

  121.                 content.addComponent(cardPanel);

  122.                 CardInfoRowUtil.createCardHeader(cardContent, AdminViewConstants.PORTAL_DETAILS);

  123.                 // Attributes layout
  124.                 final VerticalLayout attributesLayout = new VerticalLayout();
  125.                 attributesLayout.setSpacing(true);
  126.                 attributesLayout.setWidth("100%");
  127.                 cardContent.addComponent(attributesLayout);

  128.                 // Display each field if not null or empty
  129.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.PORTAL_NAME, portal.getPortalName(), VaadinIcons.GLOBE_WIRE);
  130.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.DESCRIPTION, portal.getDescription(), VaadinIcons.FILE_TEXT);
  131.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.PORTAL_TYPE, portal.getPortalType().toString(), VaadinIcons.VIEWPORT);
  132.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.GOOGLE_MAP_API_KEY, portal.getGoogleMapApiKey(), VaadinIcons.KEY);
  133.             }
  134.         }

  135.         getPageActionEventHelper().createPageEvent(
  136.             ViewAction.VISIT_ADMIN_PORTAL_VIEW,
  137.             ApplicationEventGroup.ADMIN,
  138.             NAME,
  139.             null,
  140.             pageId
  141.         );

  142.         return content;
  143.     }

  144. }