AdminLanguagePageModContentFactoryImpl.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.LanguageData;
  25. import com.hack23.cia.model.internal.application.system.impl.LanguageData_;
  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.sizing.ContentRatio;
  31. import com.hack23.cia.web.impl.ui.application.views.common.viewnames.AdminViews;
  32. import com.hack23.cia.web.impl.ui.application.views.pageclicklistener.PageItemPropertyClickListener;
  33. import com.vaadin.icons.VaadinIcons;
  34. import com.vaadin.server.Responsive;
  35. import com.vaadin.ui.HorizontalLayout;
  36. import com.vaadin.ui.Layout;
  37. import com.vaadin.ui.MenuBar;
  38. import com.vaadin.ui.Panel;
  39. import com.vaadin.ui.VerticalLayout;

  40. /**
  41.  * The Class AdminLanguagePageModContentFactoryImpl.
  42.  */
  43. @Component
  44. public final class AdminLanguagePageModContentFactoryImpl extends AbstractAdminSystemPageModContentFactoryImpl {

  45.     /** The Constant COLUMN_ORDER. */
  46.     private static final String[] COLUMN_ORDER = {
  47.         "hjid",
  48.         "languageName",
  49.         "modelObjectVersion"
  50.     };

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

  59.     /** The Constant LANGUAGE_DATA. */
  60.     private static final String LANGUAGE_DATA = "LanguageData";

  61.     /** The Constant LISTENER. */
  62.     private static final PageItemPropertyClickListener LISTENER =
  63.             new PageItemPropertyClickListener(AdminViews.ADMIN_LANGUAGE_VIEW_NAME, "hjid");

  64.     /** The Constant NAME. */
  65.     public static final String NAME = AdminViews.ADMIN_LANGUAGE_VIEW_NAME;

  66.     /**
  67.      * Instantiates a new admin language page mod content factory impl.
  68.      */
  69.     public AdminLanguagePageModContentFactoryImpl() {
  70.         super(NAME);
  71.     }

  72.     @Secured({ "ROLE_ADMIN" })
  73.     @Override
  74.     public Layout createContent(final String parameters, final MenuBar menuBar, final Panel panel) {
  75.         final VerticalLayout content = new VerticalLayout();
  76.         content.setSizeFull();
  77.         content.setMargin(true);
  78.         content.setSpacing(true);

  79.         getMenuItemFactory().createMainPageMenuBar(menuBar);

  80.         CardInfoRowUtil.createPageHeader(panel, content,
  81.             AdminViewConstants.ADMIN_LANGUAGE_MANAGEMENT,
  82.             AdminViewConstants.LANGUAGE_OVERVIEW,
  83.             AdminViewConstants.LANGUAGE_ADMINISTRATION);

  84.         final HorizontalLayout horizontalLayout = createHorizontalLayout();
  85.         content.addComponent(horizontalLayout);
  86.         content.setExpandRatio(horizontalLayout, ContentRatio.LARGE);

  87.         final DataContainer<LanguageData, Long> dataContainer =
  88.                 getApplicationManager().getDataContainer(LanguageData.class);

  89.         final List<LanguageData> pageOrderBy = dataContainer.getPageOrderBy(
  90.                 getPageNr(parameters),
  91.                 DEFAULT_RESULTS_PER_PAGE,
  92.                 LanguageData_.languageName
  93.         );

  94.         getPagingUtil().createPagingControls(
  95.                 content,
  96.                 NAME,
  97.                 getPageId(parameters),
  98.                 dataContainer.getSize(),
  99.                 getPageNr(parameters),
  100.                 DEFAULT_RESULTS_PER_PAGE
  101.         );

  102.         getGridFactory().createBasicBeanItemGrid(
  103.                 horizontalLayout,
  104.                 LanguageData.class,
  105.                 pageOrderBy,
  106.                 LANGUAGE_DATA,
  107.                 COLUMN_ORDER,
  108.                 HIDE_COLUMNS,
  109.                 LISTENER,
  110.                 null,
  111.                 null
  112.         );

  113.         if (getPageId(parameters) != null && !getPageId(parameters).isEmpty()) {
  114.             final LanguageData languageData = dataContainer.load(Long.valueOf(getPageId(parameters)));
  115.             if (languageData != null) {
  116.                 // Create a card-style panel to display LanguageData details
  117.                 final Panel cardPanel = new Panel();
  118.                 cardPanel.addStyleName("politician-overview-card"); // Reuse existing style
  119.                 cardPanel.setWidth("100%");
  120.                 cardPanel.setHeightUndefined();
  121.                 Responsive.makeResponsive(cardPanel);

  122.                 final VerticalLayout cardContent = new VerticalLayout();
  123.                 cardContent.setMargin(true);
  124.                 cardContent.setSpacing(true);
  125.                 cardContent.setWidth("100%");
  126.                 cardPanel.setContent(cardContent);

  127.                 horizontalLayout.addComponent(cardPanel);
  128.                 horizontalLayout.setExpandRatio(cardPanel, ContentRatio.LARGE_FORM);

  129.                 CardInfoRowUtil.createCardHeader(cardContent, AdminViewConstants.LANGUAGE_DETAILS);

  130.                 // Attributes layout
  131.                 final VerticalLayout attributesLayout = new VerticalLayout();
  132.                 attributesLayout.setSpacing(true);
  133.                 attributesLayout.setWidth("100%");
  134.                 cardContent.addComponent(attributesLayout);

  135.                 // Display each field if not null or empty
  136.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.LANGUAGE_NAME, languageData.getLanguageName(), VaadinIcons.GLOBE);
  137.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.CREATED_DATE, String.valueOf(languageData.getCreatedDate()), VaadinIcons.CALENDAR);
  138.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.LAST_MODIFIED_DATE, String.valueOf(languageData.getLastModifiedDate()), VaadinIcons.CALENDAR_CLOCK);
  139.                 CardInfoRowUtil.addInfoRowIfNotNull(attributesLayout, AdminViewConstants.LANGUAGE_ENABLED, String.valueOf(languageData.isLanguageEnabled()), VaadinIcons.CHECK);
  140.             }
  141.         }

  142.         getPageActionEventHelper().createPageEvent(
  143.                 ViewAction.VISIT_ADMIN_LANGUAGE_VIEW,
  144.                 ApplicationEventGroup.ADMIN,
  145.                 NAME,
  146.                 null,
  147.                 getPageId(parameters)
  148.         );

  149.         return content;
  150.     }

  151. }