EN · DE · RU · FR · ES

#3271: FavoritesChoicePanel.java

projectforge-wicket/src/main/java/org/projectforge/web/wicket/components/FavoritesChoicePanel.java Тип: Java · Роль: Панель · Исходник: projectforge-wicket/src/main/java/org/projectforge/web/wicket/components/FavoritesChoicePanel.java 218 строк · 147 кода · 44 комментария · 27 пустых
Компонент панели Wicket для FavoritesChoice. Переиспользуемый UI-фрагмент, встраиваемый в страницы или диалоги.

Структура кода

Пакет: org.projectforge.web.wicket.components

Классы: FavoritesChoicePanel

Расширяет: FormComponentPanel

Методы (7): init, getNullKey, onUpdate, createRenderer, onBeforeRender, getSelected, setSelected

Поля (11): serialVersionUID, ADD_NEW_ENTRY, selected, refresh, choice, tabIndex, cssClass, userPrefArea, clearSelectionAfterSelection, nullKey, dummy

Импорты: 12 пакетов

Исходный код (сокращён)

package org.projectforge.web.wicket.components;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.FormComponentUpdatingBehavior;
import org.apache.wicket.model.PropertyModel;
import org.projectforge.business.user.UserPrefDao;
import org.projectforge.framework.persistence.user.api.UserPrefArea;
import org.projectforge.framework.persistence.user.entities.UserPrefDO;
import org.projectforge.web.WicketSupport;
import org.projectforge.web.user.UserPrefEditPage;
import org.projectforge.web.wicket.AbstractSecuredPage;

/**
 * Комбинированный список для быстрого отображения и выбора избранного.
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public abstract class FavoritesChoicePanel<T, F> extends FormComponentPanel<String>
{
  private static final long serialVersionUID = 4605128072052146129L;

  protected static final String ADD_NEW_ENTRY = "ADD_NEW_ENTRY";

  protected String selected;

  private boolean refresh = false;

  private DropDownChoice<String> choice;

  private Integer tabIndex;

  private String cssClass;

  private UserPrefArea userPrefArea;

  private boolean clearSelectionAfterSelection = true;

  private String nullKey;

  @SuppressWarnings("unused")
  private String dummy;

  public FavoritesChoicePanel(final String componentId, final UserPrefArea userPrefArea)
  {
    this(componentId, userPrefArea, null, null);
  }

  public FavoritesChoicePanel(final String componentId, final UserPrefArea userPrefArea, final Integer tabIndex, final String cssClass)
  {
    super(componentId);
    this.userPrefArea = userPrefArea;
    this.tabIndex = tabIndex;
    this.cssClass = cssClass;
    setModel(new PropertyModel<String>(this, "dummy"));
  }

  @SuppressWarnings("serial")
  public DropDownChoice<String> init()
  {
    final LabelValueChoiceRenderer<String> renderer = createRenderer();
    choice = new DropDownChoice<String>("dropDownChoice", new PropertyModel<String>(this, "selected"), renderer.getValues(), renderer)
    {
      @Override
      protected String getNullKey()
      {
        if (nullKey != null) {
          return nullKey;
        }
        return super.getNullKey();
      }
    };
    choice.add(new FormComponentUpdatingBehavior()
    {
      @Override
      public void onUpdate()
      {
        String newSelection = (String) this.getFormComponent().getModelObject();
        if (StringUtils.isNotEmpty(newSelection) == true) {
          if (ADD_NEW_ENTRY.equals(newSelection) == true) {
            final Object favorite = newFavoriteInstance(getCurrentObject());
            final UserPrefEditPage page = new UserPrefEditPage(userPrefArea, favorite);
            page.setReturnToPage((AbstractSecuredPage) FavoritesChoicePanel.this.getPage());
            refresh = true;
            setResponsePage(page);
            selected = "";
            return;
          }
          // Заполнение полей значениями выбранного шаблона:
          final F favorite = getCurrentFavorite();
          if (favorite != null) {
            select(favorite);
          }
          if (FavoritesChoicePanel.this.clearSelectionAfterSelection == true) {
            selected = "";
          }
        }
      }
    });
    choice.setNullValid(true);
    if (tabIndex != null) {
      choice.add(AttributeModifier.replace("tabindex", String.valueOf(tabIndex)));
    }

    if (cssClass != null) {
      choice.add(AttributeModifier.append("class", cssClass));
    }
    add(choice);
    return choice;
  }

  private LabelValueChoiceRenderer<String> createRenderer()
  {
    final String[] entries = WicketSupport.get(UserPrefDao.class).getPrefNames(userPrefArea);
    final LabelValueChoiceRenderer<String> renderer = new LabelValueChoiceRenderer<String>();
    for (final String entry : entries) {
      renderer.addValue(entry, entry);
// ... (сокращено, всего 196 строк)

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024 -> 2025.
011000f03 Миграция в процессе... (все тесты всех пакетов: OK).
b095e6f7d !!!!! Большое изменение обработки транзакций: повторное использование PfPersistenceContext насколько это возможно (ещё не завершено). Тесты пока не запускаются.
4efcbd0fb Миграция в процессе...