EN · DE · RU · FR · ES

#3124: TimesheetEditSelectRecentDialogPanel.java

projectforge-wicket/src/main/java/org/projectforge/web/timesheet/TimesheetEditSelectRecentDialogPanel.java Тип: Java · Роль: Timesheet · Исходник: projectforge-wicket/src/main/java/org/projectforge/web/timesheet/TimesheetEditSelectRecentDialogPanel.java 255 строк · 206 кода · 36 комментариев · 13 пустых
Компонент панели Wicket для TimesheetEditSelectRecentDialog. Многоразовый фрагмент UI, встраиваемый в страницы или диалоги.

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

Пакет: org.projectforge.web.timesheet

Классы: TimesheetEditSelectRecentDialogPanel

Расширяет: ModalDialog

Методы (10): init, addRecentSheetsTable, populateItem, populateItem, getObject, populateItem, newRowItem, createRecentTimeSheetSelectionLink, onClick, renderHead

Поля (4): serialVersionUID, showCost2Column, parentPage, form

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

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

package org.projectforge.web.timesheet;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.OddEvenItem;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.projectforge.business.common.OutputType;
import org.projectforge.business.task.TaskDO;
import org.projectforge.business.task.formatter.WicketTaskFormatter;
import org.projectforge.business.timesheet.TimesheetDO;
import org.projectforge.business.timesheet.TimesheetDao;
import org.projectforge.business.user.UserFormatter;
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
import org.projectforge.web.WicketSupport;
import org.projectforge.web.dialog.ModalDialog;
import org.projectforge.web.task.TaskPropertyColumn;
import org.projectforge.web.wicket.*;
import org.projectforge.web.wicket.flowlayout.DivPanel;
import org.projectforge.web.wicket.flowlayout.TablePanel;

import java.util.ArrayList;
import java.util.List;

public class TimesheetEditSelectRecentDialogPanel extends ModalDialog
{
  private static final long serialVersionUID = -9175062586210446142L;

  private final boolean showCost2Column;

  private final TimesheetEditPage parentPage;

  private final TimesheetEditForm form;

  public TimesheetEditSelectRecentDialogPanel(final String id, final String title, final TimesheetEditPage parentPage,
      final TimesheetEditForm form, final boolean showCost2Column)
  {
    super(id);
    setTitle(title);
    this.parentPage = parentPage;
    this.form = form;
    this.showCost2Column = showCost2Column;
    setBigWindow();
  }

  /**
   * @see org.projectforge.web.dialog.ModalDialog#init()
   */
  @Override
  public void init()
  {
    init(new Form<String>(getFormId()));
    addRecentSheetsTable();
  }

  @SuppressWarnings({ "serial" })
  private void addRecentSheetsTable()
  {
    final List<IColumn<TimesheetDO, String>> columns = new ArrayList<IColumn<TimesheetDO, String>>();
    final CellItemListener<TimesheetDO> cellItemListener = new CellItemListener<TimesheetDO>()
    {
      @Override
      public void populateItem(final Item<ICellPopulator<TimesheetDO>> item, final String componentId,
          final IModel<TimesheetDO> rowModel)
      {
        final TimesheetDO timesheet = rowModel.getObject();
        final int rowIndex = ((Item<?>) item.findParent(Item.class)).getIndex();
        String cssClasses = null;
        if (timesheet.getDeleted() == true) {
          cssClasses = RowCssClass.MARKED_AS_DELETED.getCssClass();
        } else if (rowIndex < TimesheetEditPage.SIZE_OF_FIRST_RECENT_BLOCK) {
          cssClasses = RowCssClass.IMPORTANT_ROW.getCssClass();
        }
        if (cssClasses != null) {
          item.add(AttributeModifier.append("class", cssClasses));
        }
      }
    };
    if (showCost2Column == true) { // Может быть невидимой, но всегда существует, если в системе есть записи cost2.
      columns
          .add(new CellItemListenerPropertyColumn<TimesheetDO>(getString("fibu.kost2"), null, "kost2.displayName",
              cellItemListener)
          {
            @Override
            public void populateItem(final Item<ICellPopulator<TimesheetDO>> item, final String componentId,
                final IModel<TimesheetDO> rowModel)
            {
              final TimesheetDO timesheet = rowModel.getObject();
              final ListSelectActionPanel actionPanel = new ListSelectActionPanel(componentId,
                  createRecentTimeSheetSelectionLink(timesheet), new Model<String>()
              {
                @Override
                public String getObject()
                {
                  final StringBuilder buf = new StringBuilder();
                  if (timesheet.getKost2() != null) {
                    buf.append(timesheet.getKost2().getDisplayName());
                  }
                  if (timesheet.getUserId() != null
                      && timesheet.getUserId().equals(ThreadLocalUserContext.getLoggedInUserId()) == false) {
                    if (timesheet.getKost2() != null) {
                      buf.append(", ");
                    }
                    buf.append(WicketSupport.get(UserFormatter.class).getFormattedUser(timesheet.getUserId()));
                  }
                  return buf.toString();
                }
// ... (сокращено, всего 233 строки)

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024->2025.
3785f8347 Миграция в процессе...
a72903e36 *.java, *.kt: StringBuffer -> StringBuilder.
67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (переименовано для избежания недопонимания в коде).