# DisplayResultView.java

    /*
     * Copyright (C) 2000 - 2024 Silverpeas
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU Affero General Public License as
     * published by the Free Software Foundation, either version 3 of the
     * License, or (at your option) any later version.
     *
     * As a special exception to the terms and conditions of version 3.0 of
     * the GPL, you may redistribute this Program in connection with Free/Libre
     * Open Source Software ("FLOSS") applications as described in Silverpeas's
     * FLOSS exception.  You should have received a copy of the text describing
     * the FLOSS exception, and it is also available here:
     * "https://www.silverpeas.org/legal/floss_exception.html"
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU Affero General Public License for more details.
     *
     * You should have received a copy of the GNU Affero General Public License
     * along with this program.  If not, see <https://www.gnu.org/licenses/>.
     */

    package org.silverpeas.components.survey.control;

    import org.silverpeas.kernel.util.StringUtil;

    import java.util.List;
    import java.util.stream.Stream;

    import static java.util.stream.Collectors.toList;

    /**
     * Definition of the different views of result page a survey can display.
     * @author silveryocha
     */
    public enum DisplayResultView {
      CLASSIC_GRAPHICAL(Constants.CLASSIC_MAIN_VIEW, Constants.GRAPHICAL_SEC_LEVEL_VIEW),
      CLASSIC_HORIZONTAL_BAR(Constants.CLASSIC_MAIN_VIEW, Constants.HORIZONTAL_BAR_SEC_LEVEL_VIEW),
      DETAIL(Constants.DETAIL_MAIN_VIEW, StringUtil.EMPTY);

      private final String mainLevelView;
      private final String secondaryLevelView;

      DisplayResultView(final String mainView, final String secondaryLevelView) {
        this.mainLevelView = mainView;
        this.secondaryLevelView = secondaryLevelView;
      }

      /**
       * Gets the {@link DisplayResultView} instance that matches the specified result view name or code.
       * @param name the enum name or the full name of a predefined result view in survey component.
       * @return the {@link DisplayResultView} instance having as name the specified role name or
       * {@link DisplayResultView#DETAIL} if no such role exists.
       */
      public static DisplayResultView fromString(String name) {
        if (StringUtil.isNotDefined(name)) {
          return DETAIL;
        }
        final String trimmedName = name.trim();
        return Stream.of(values())
            .filter(r -> r.name().equalsIgnoreCase(trimmedName) || r.getIdentifier().equals(trimmedName))
            .findFirst()
            .orElse(DETAIL);
      }

      /**
       * Gets a list of {@link DisplayResultView} instance from a main view part of identifier.
       * @param mainView a main view part of identifier.
       * @return a list of {@link DisplayResultView} instance.
       */
      public static List<DisplayResultView> fromMainViewOnly(String mainView) {
        final String trimmedMainCode = mainView.trim();
        return Stream.of(values())
            .filter(r -> r.mainLevelView.equalsIgnoreCase(trimmedMainCode))
            .collect(toList());
      }

      /**
       * The code of the view is a combination of the main and sub view separated by an underscore.
       * @return a code as string.
       */
      public String getIdentifier() {
        return mainLevelView + "_" + secondaryLevelView;
      }

      /**
       * Gets the main view.
       * @return a string.
       */
      public String getMainView() {
        return mainLevelView;
      }

      /**
       * Gets the secondary level view.
       * @return a string.
       */
      public String getSecondaryLevelView() {
        return secondaryLevelView;
      }

      /**
       * Gets the bundle key of main view.
       * @return a string representing a bundle key.
       */
      public String getMainViewBundleKey() {
        return String.format("survey.result.view.%s", mainLevelView);
      }

      /**
       * Gets the bundle key of secondary level view.
       * @return a string representing a bundle key.
       */
      public String getSecondaryViewBundleKey() {
        return String.format("survey.result.view.%s", secondaryLevelView);
      }

      public static class Constants {
        public static final String CLASSIC_MAIN_VIEW = "classic";
        public static final String DETAIL_MAIN_VIEW = "detail";
        public static final String GRAPHICAL_SEC_LEVEL_VIEW = "graphical";
        public static final String HORIZONTAL_BAR_SEC_LEVEL_VIEW = "horizontal-bar";

        private Constants() {
        }
      }
    }