EN · DE · RU · FR · ES

#276: ToDoEditForm.java

plugins/org.projectforge.plugins.todo/src/main/java/org/projectforge/plugins/todo/ToDoEditForm.java Type: Java · Role: Form · Source: plugins/org.projectforge.plugins.todo/src/main/java/org/projectforge/plugins/todo/ToDoEditForm.java 372 lines · 289 code · 49 comments · 34 blank
Wicket Form implementation for ToDo editing. Handles form validation, submit logic, and field-to-entity binding.

Code Structure

Package: org.projectforge.plugins.todo

Classes: ToDoEditForm

Extends: AbstractEditForm

Methods (11): init, getDefaultChoice, onUpdate, component, onSubmit, onError, getDueDateProperties, addCloseToDoDialog, init, onCloseButtonSubmit, getLogger

Fields (4): serialVersionUID, templateName, closeToDoDialog, groupSelectPanel

Imports: 32 packages

Source Code (abridged)

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; // Used by 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()) {
      // Favorites
      final String[] templateNames = userPrefDao.getPrefNames(ToDoPlugin.USER_PREF_AREA);
      if (templateNames != null && templateNames.length > 0) {
        // DropDownChoice templates
        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)) {
              // Fill fields with selected template values:
              final UserPrefDO userPref = userPrefDao.selectUserPref(ToDoPlugin.USER_PREF_AREA, newSelection);
              if (userPref != null) {
                userPrefDao.fillFromUserPrefParameters(userPref, data);
              }
              templateName = "";
              // Mark all form components as model changed.
              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);
      }
// ... (truncated, total 350 lines)

Git History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
3785f8347 Migration stuff in progress...
011000f03 Migration stuff in progress... (all tests of all packages: OK).
06828f490 Migration stuff in progress...