EN · DE · RU · FR · ES

#276: ToDoEditForm.java

plugins/org.projectforge.plugins.todo/src/main/java/org/projectforge/plugins/todo/ToDoEditForm.java Tipo: Java · Rol: Formulario · Fuente: plugins/org.projectforge.plugins.todo/src/main/java/org/projectforge/plugins/todo/ToDoEditForm.java 372 líneas · 289 código · 49 comentarios · 34 en blanco
Implementación de formulario Wicket para la edición de ToDo. Maneja validación de formularios, lógica de envío y vinculación campo-entidad.

Estructura del código

Paquete: org.projectforge.plugins.todo

Clases: ToDoEditForm

Extiende: AbstractEditForm

Métodos (11): init, getDefaultChoice, onUpdate, component, onSubmit, onError, getDueDateProperties, addCloseToDoDialog, init, onCloseButtonSubmit, getLogger

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

Importaciones: 32 paquetes

Código fuente (resumido)

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; // Usado por 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()) {
      // Favoritos
      final String[] templateNames = userPrefDao.getPrefNames(ToDoPlugin.USER_PREF_AREA);
      if (templateNames != null && templateNames.length > 0) {
        // DropDownChoice plantillas
        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)) {
              // Rellenar campos con los valores de la plantilla seleccionada:
              final UserPrefDO userPref = userPrefDao.selectUserPref(ToDoPlugin.USER_PREF_AREA, newSelection);
              if (userPref != null) {
                userPrefDao.fillFromUserPrefParameters(userPref, data);
              }
              templateName = "";
              // Marcar todos los componentes del formulario como modelo cambiado.
              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);
      }
// ... (truncado, 350 líneas totales)

Historial Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
3785f8347 Migración en progreso...
011000f03 Migración en progreso... (todas las pruebas de todos los paquetes: OK).
06828f490 Migración en progreso...