EN · DE · RU · FR · ES

#276: ToDoEditForm.java

plugins/org.projectforge.plugins.todo/src/main/java/org/projectforge/plugins/todo/ToDoEditForm.java Тип: Java · Роль: Форма · Источник: plugins/org.projectforge.plugins.todo/src/main/java/org/projectforge/plugins/todo/ToDoEditForm.java 372 строки · 289 кода · 49 комментариев · 34 пустых
Реализация формы Wicket для редактирования задач. Обрабатывает валидацию формы, логику отправки и привязку полей к сущности.

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

Пакет: org.projectforge.plugins.todo

Классы: ToDoEditForm

Расширяет: AbstractEditForm

Методы (11): init, getDefaultChoice, onUpdate, component, onSubmit, onError, getDueDateProperties, addCloseToDoDialog, init, onCloseButtonSubmit, getLogger

Поля (4): serialVersionUID, templateName, closeToDoDialog, groupSelectPanel

Импорты: 32 пакета

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

package org.projectforge.plugins.todo;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.FormComponentUpdatingBehavior;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import org.hibernate.Hibernate;
import org.projectforge.business.configuration.ConfigurationService;
import org.projectforge.business.user.UserGroupCache;
import org.projectforge.business.user.UserPrefDao;
import org.projectforge.common.i18n.Priority;
import org.projectforge.framework.persistence.user.entities.PFUserDO;
import org.projectforge.framework.persistence.user.entities.UserPrefDO;
import org.projectforge.web.WicketSupport;
import org.projectforge.web.dialog.ModalDialog;
import org.projectforge.web.task.TaskSelectPanel;
import org.projectforge.web.user.NewGroupSelectPanel;
import org.projectforge.web.user.UserSelectPanel;
import org.projectforge.web.wicket.AbstractEditForm;
import org.projectforge.web.wicket.WicketUtils;
import org.projectforge.web.wicket.bootstrap.GridSize;
import org.projectforge.web.wicket.components.*;
import org.projectforge.web.wicket.flowlayout.*;
import org.slf4j.Logger;

import java.time.LocalDate;

public class ToDoEditForm extends AbstractEditForm<ToDoDO, ToDoEditPage>
{
  private static final long serialVersionUID = -6208809585214296635L;

  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ToDoEditForm.class);

  protected boolean saveAsTemplate, sendNotification = true, sendShortMessage;

  @SuppressWarnings("unused")
  private String templateName; // Используется Wicket

  private ModalDialog closeToDoDialog;

  private MaxLengthTextArea commentTextArea, closeToDoDialogCommentTextArea;

  protected NewGroupSelectPanel groupSelectPanel;

  public ToDoEditForm(final ToDoEditPage parentPage, final ToDoDO data)
  {
    super(parentPage, data);
  }

  @SuppressWarnings("serial")
  @Override
  protected void init()
  {
    super.init();
    gridBuilder.newGridPanel();
    UserPrefDao userPrefDao = WicketSupport.get(UserPrefDao.class);
    if (isNew()) {
      // Избранное
      final String[] templateNames = userPrefDao.getPrefNames(ToDoPlugin.USER_PREF_AREA);
      if (templateNames != null && templateNames.length > 0) {
        // Выпадающий список шаблонов
        final FieldsetPanel fs = gridBuilder.newFieldset(getString("templates"));
        final LabelValueChoiceRenderer<String> templateNamesChoiceRenderer = new LabelValueChoiceRenderer<>();
        templateNamesChoiceRenderer.addValue("", getString("userPref.template.select"));
        for (final String name : templateNames) {
          templateNamesChoiceRenderer.addValue(name, name);
        }
        final DropDownChoice<String> templateNamesChoice = new DropDownChoice<String>(fs.getDropDownChoiceId(),
            new PropertyModel<>(
                this, "templateName"),
            templateNamesChoiceRenderer.getValues(), templateNamesChoiceRenderer)
        {
          @Override
          protected CharSequence getDefaultChoice(final String selected)
          {
            return "";
          }
        };

        templateNamesChoice.add(new FormComponentUpdatingBehavior()
        {
          @SuppressWarnings({ "unchecked", "rawtypes" })
          @Override
          public void onUpdate()
          {
            final String newSelection = (String) this.getFormComponent().getModelObject();
            if (StringUtils.isNotEmpty(newSelection)) {
              // Заполнить поля значениями выбранного шаблона:
              final UserPrefDO userPref = userPrefDao.selectUserPref(ToDoPlugin.USER_PREF_AREA, newSelection);
              if (userPref != null) {
                userPrefDao.fillFromUserPrefParameters(userPref, data);
              }
              templateName = "";
              // Отметить все компоненты формы как изменённые.
              visitFormComponents(new IVisitor()
              {
                @Override
                public void component(final Object object, final IVisit visit)
                {
                  final FormComponent<?> fc = (FormComponent<?>) object;
                  fc.modelChanged();
                  visit.dontGoDeeper();
                }
              });
            }
          }
        });
        templateNamesChoice.setNullValid(true);
        fs.add(templateNamesChoice);
      }
// ... (сокращено, всего 350 строк)

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024 -> 2025.
3785f8347 Работа над миграцией в процессе...
011000f03 Работа над миграцией в процессе... (все тесты всех пакетов: OK).
06828f490 Работа над миграцией в процессе...