/* * Copyright (c) 2010-2013 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.web.component.wf; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.web.component.data.BoxedTablePanel; import com.evolveum.midpoint.web.component.data.column.IconColumn; import com.evolveum.midpoint.web.component.util.ListDataProvider; import com.evolveum.midpoint.web.page.admin.server.dto.ApprovalOutcomeIcon; import com.evolveum.midpoint.web.page.admin.workflow.dto.DecisionDto; import com.evolveum.midpoint.web.session.UserProfileStorage; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; /** * @author lazyman * @author mederly */ public class DecisionsPanel extends BasePanel<List<DecisionDto>> { private static final String ID_DECISIONS_TABLE = "decisionsTable"; // todo options to select which columns will be shown public DecisionsPanel(String id, IModel<List<DecisionDto>> model, UserProfileStorage.TableId tableId, int pageSize) { super(id, model); initLayout(tableId, pageSize); } protected void initLayout(UserProfileStorage.TableId tableId, int pageSize) { List<IColumn<DecisionDto, String>> columns = new ArrayList<>(); columns.add(new PropertyColumn<>(createStringResource("DecisionsPanel.user"), DecisionDto.F_USER)); columns.add(new PropertyColumn<>(createStringResource("DecisionsPanel.originalActor"), DecisionDto.F_ORIGINAL_ACTOR)); columns.add(new PropertyColumn<>(createStringResource("DecisionsPanel.stage"), DecisionDto.F_STAGE)); columns.add(createOutcomeColumn()); columns.add(new PropertyColumn<DecisionDto, String>(createStringResource("DecisionsPanel.comment"), DecisionDto.F_COMMENT){ @Override public void populateItem(Item<ICellPopulator<DecisionDto>> item, String componentId, IModel<DecisionDto> rowModel) { super.populateItem(item, componentId, rowModel); item.add(new AttributeAppender("style", "max-width: 200px; word-wrap: break-word;")); } }); columns.add(new PropertyColumn<>(createStringResource("DecisionsPanel.when"), DecisionDto.F_TIME)); columns.add(new PropertyColumn<>(createStringResource("DecisionsPanel.escalation"), DecisionDto.F_ESCALATION_LEVEL_NUMBER)); ISortableDataProvider provider = new ListDataProvider<>(this, getModel()); BoxedTablePanel decisionsTable = new BoxedTablePanel<>(ID_DECISIONS_TABLE, provider, columns, tableId, pageSize); add(decisionsTable); } @NotNull private IconColumn<DecisionDto> createOutcomeColumn() { return new IconColumn<DecisionDto>(createStringResource("DecisionsPanel.result")) { @Override protected IModel<String> createIconModel(final IModel<DecisionDto> rowModel) { return new AbstractReadOnlyModel<String>() { @Override public String getObject() { return choose(rowModel, ApprovalOutcomeIcon.IN_PROGRESS.getIcon(), ApprovalOutcomeIcon.APPROVED.getIcon(), ApprovalOutcomeIcon.REJECTED.getIcon()); } }; } @Override protected IModel<String> createTitleModel(final IModel<DecisionDto> rowModel) { return new AbstractReadOnlyModel<String>() { @Override public String getObject() { return choose(rowModel, createStringResource("MyRequestsPanel.inProgress").getString(), createStringResource("MyRequestsPanel.approved").getString(), createStringResource("MyRequestsPanel.rejected").getString()); } }; } private String choose(IModel<DecisionDto> rowModel, String inProgress, String approved, String rejected) { DecisionDto dto = rowModel.getObject(); if (dto.getOutcome() == null) { return inProgress; } else { return dto.getOutcome() ? approved : rejected; } } }; } }