/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.webui.components; import com.google.common.base.Function; import com.google.common.collect.Lists; import com.vaadin.data.Item; import com.vaadin.data.util.ObjectProperty; import com.vaadin.data.util.PropertysetItem; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import org.activiti.engine.HistoryService; import org.activiti.engine.history.HistoricTaskInstance; import ru.codeinside.adm.AdminServiceProvider; import ru.codeinside.adm.database.Bid; import ru.codeinside.gses.lazyquerycontainer.Query; import ru.codeinside.gses.service.Functions; import ru.codeinside.gses.webui.executor.ArchiveFactory; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class HistoricTaskInstancesQuery implements Query, Serializable { private static final long serialVersionUID = 1L; private String processDefinitionId; private String taskId; public HistoricTaskInstancesQuery(String processDefinitionId, String taskId) { this.processDefinitionId = processDefinitionId; this.taskId = taskId; } @Override public int size() { List<HistoricTaskInstance> histories = Functions .withHistory(new Function<HistoryService, List<HistoricTaskInstance>>() { public List<HistoricTaskInstance> apply(HistoryService srv) { return srv.createHistoricTaskInstanceQuery().processInstanceId(processDefinitionId).list(); } }); return histories.size(); } @Override public List<Item> loadItems(final int startIndex, final int count) { List<HistoricTaskInstance> histories = Functions .withHistory(new Function<HistoryService, List<HistoricTaskInstance>>() { public List<HistoricTaskInstance> apply(HistoryService srv) { return srv.createHistoricTaskInstanceQuery().processInstanceId(processDefinitionId).listPage(startIndex, count); } }); List<Item> items = Lists.newArrayListWithExpectedSize(histories.size()); for (final HistoricTaskInstance i : histories) { String startTime = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(i.getStartTime()); String endTime = (i.getEndTime() != null) ? new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(i.getEndTime()) : ""; Bid bid = AdminServiceProvider.get().getBidByTask(taskId); String bidId = bid != null ? bid.getId().toString() : ""; PropertysetItem item = new PropertysetItem(); item.addItemProperty("id", new ObjectProperty<String>(bidId)); item.addItemProperty("hid", new ObjectProperty<HistoricTaskInstance>(i)); item.addItemProperty("name", new ObjectProperty<String>(i.getName())); item.addItemProperty("startDate", new ObjectProperty<String>(startTime)); item.addItemProperty("endDate", new ObjectProperty<String>(endTime)); item.addItemProperty("assignee", new ObjectProperty<String>(i.getAssignee() != null ? i.getAssignee() : "")); Date time = i.getEndTime() == null ? i.getStartTime() : i.getEndTime(); Button button = new Button("Просмотр", new ArchiveFactory.ShowClickListener(i.getTaskDefinitionKey(), bidId, time)); button.setEnabled(i.getAssignee() != null); item.addItemProperty("form", new ObjectProperty<Component>(button)); items.add(item); } return items; } @Override public void saveItems(List<Item> addedItems, List<Item> modifiedItems, List<Item> removedItems) { throw new UnsupportedOperationException(); } @Override public boolean deleteAllItems() { return true; // throw new UnsupportedOperationException(); } @Override public Item constructItem() { throw new UnsupportedOperationException(); } }