ConsumptionBarPanel.javaПакет: org.projectforge.web.wicket.components
Классы: ConsumptionBarPanel
Расширяет: Panel
Методы (2): onClick, getTooltip
Поля (2): serialVersionUID, tooltip
Импорты: 11 пакетов
package org.projectforge.web.wicket.components;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.projectforge.framework.utils.NumberHelper;
import org.projectforge.web.timesheet.TimesheetListPage;
import org.projectforge.web.wicket.WicketUtils;
import java.math.BigDecimal;
/**
* Отображает слой div с цветной процентной шкалой.
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class ConsumptionBarPanel extends Panel
{
private static final long serialVersionUID = -4328646802035960450L;
private final String tooltip;
/**
* @param id
* @param usage
* @param maxValue
* @param taskId
* @param taskNodeFinished В зависимости от того, завершён ли узел задачи, цвета различаются: например, шкала, использованная на 95%, зелёная для
* завершённых задач, для незавершённых — нет.
* @param unit
* @param linkEnabled Если true, пользователь может нажать на эту шкалу для просмотра всех табелей учёта времени, стоящих за этой шкалой.
*/
public ConsumptionBarPanel(final String id, final BigDecimal usage, BigDecimal maxValue, final Long taskId,
final boolean taskNodeFinished, final String unit, final boolean linkEnabled)
{
super(id);
if (NumberHelper.isNotZero(maxValue) == false) {
maxValue = null;
}
@SuppressWarnings("serial")
final Link< Void> showTimesheetsLink = new Link<Void>("sheets") {
@Override
public void onClick()
{
final PageParameters parameters = new PageParameters();
parameters.add(TimesheetListPage.PARAMETER_KEY_CLEAR_ALL, true);
parameters.add(TimesheetListPage.PARAMETER_KEY_STORE_FILTER, false);
parameters.add(TimesheetListPage.PARAMETER_KEY_TASK_ID, taskId);
final TimesheetListPage timesheetListPage = new TimesheetListPage(parameters);
setResponsePage(timesheetListPage);
}
};
showTimesheetsLink.setEnabled(linkEnabled);
add(showTimesheetsLink);
final WebMarkupContainer bar = new WebMarkupContainer("bar");
final Label progressLabel = new Label("progress", new Model<String>(" "));
final int percentage = maxValue != null ? usage.divide(maxValue, 2, BigDecimal.ROUND_HALF_UP).multiply(NumberHelper.HUNDRED).intValue()
: 0;
final int width = percentage <= 100 ? percentage : 10000 / percentage;
bar.add(AttributeModifier.replace("class", "progress"));
if (percentage <= 80 || (taskNodeFinished == true && percentage <= 100)) {
if (percentage > 0) {
bar.add(AttributeModifier.append("class", "progress-done"));
} else {
bar.add(AttributeModifier.append("class", "progress-none"));
progressLabel.setVisible(false);
}
} else if (percentage <= 90) {
bar.add(AttributeModifier.append("class", "progress-80"));
} else if (percentage <= 100) {
bar.add(AttributeModifier.append("class", "progress-90"));
} else if (taskNodeFinished == true && percentage <= 110) {
bar.add(AttributeModifier.append("class", "progress-overbooked-min"));
} else {
bar.add(AttributeModifier.append("class", "progress-overbooked"));
}
if (maxValue == null && (usage == null || usage.compareTo(BigDecimal.ZERO) == 0)) {
bar.setVisible(false);
}
progressLabel.add(AttributeModifier.replace("style", "width: " + width + "%;"));
final StringBuilder buf = new StringBuilder();
buf.append(NumberHelper.getNumberFractionFormat(getLocale(), usage.scale()).format(usage));
if (unit != null) {
buf.append(unit);
}
if (maxValue != null) {
buf.append("/");
buf.append(NumberHelper.getNumberFractionFormat(getLocale(), maxValue.scale()).format(maxValue));
buf.append(unit);
buf.append(" (").append(percentage).append("%)");
}
tooltip = buf.toString();
WicketUtils.addTooltip(bar, tooltip);
showTimesheetsLink.add(bar);
bar.add(progressLabel);
}
/**
* @return всплывающая подсказка
*/
public String getTooltip()
{
return tooltip;
}
}
868d6abb7 2025 → 2026 63081666f Заголовки исходных файлов: 2024 → 2025. a72903e36 *.java, *.kt: StringBuffer → StringBuilder. 4c04cfd65 КРУПНОЕ ИЗМЕНЕНИЕ! Миграция целочисленных id на Long id (включая внешние ключи и т.д.) b6092df09 Авторские права 2023 → 2024