Package pl.net.bluesoft.rnd.processtool.ui.activity

Source Code of pl.net.bluesoft.rnd.processtool.ui.activity.MyProcessesListPane

package pl.net.bluesoft.rnd.processtool.ui.activity;

import static org.aperteworkflow.util.vaadin.VaadinExceptionHandler.Util.withErrorHandling;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Set;

import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceFilter;
import pl.net.bluesoft.rnd.processtool.model.QueueType;
import pl.net.bluesoft.rnd.processtool.model.processdata.ProcessDeadline;
import pl.net.bluesoft.rnd.processtool.ui.tasks.TaskTableItem;
import pl.net.bluesoft.rnd.processtool.ui.widgets.taskitem.TaskItemProviderBase;
import pl.net.bluesoft.rnd.processtool.ui.widgets.taskitem.TaskItemProviderParams;

import com.vaadin.ui.Component;

/**
* @author tlipski@bluesoft.net.pl
*/
public class MyProcessesListPane extends ProcessListPane {

    public MyProcessesListPane(ActivityMainPane activityMainPane, String title) {
        super(activityMainPane, title);
    }

    public MyProcessesListPane(ActivityMainPane activityMainPane, ProcessInstanceFilter filter) {
        super(activityMainPane, filter.getName(), filter);
    }

    @Override
    protected ProcessInstanceFilter getDefaultFilter() {
        ProcessInstanceFilter processFilter = new ProcessInstanceFilter();
        ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
        processFilter.setName(getMessage("activity.assigned.tasks"));
        processFilter.addOwner(getBpmSession().getUser(ctx));
        processFilter.setFilterOwner(getBpmSession().getUser(ctx));
        processFilter.addQueueType(QueueType.ASSIGNED_TO_CURRENT_USER);
        return processFilter;
    }

    @Override
    protected Component getTaskItem(final TaskTableItem tti) {
        ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();
        ProcessInstance pi = tti.getTask().getProcessInstance();
        TaskItemProviderBase tip = getTaskItemProvider(ctx, pi);
        TaskItemProviderParams params = getTaskItemProviderParams(ctx, tti);
        return tip.getTaskPane(params);
    }

    @Override
    protected void onClick(final TaskItemProviderParams params) {
        withErrorHandling(getApplication(), new Runnable() {
            @Override
      public void run() {
                displayProcessData(params.getTask());
            }
        });
    }

    @Override
    protected void sortTaskItems(List<TaskTableItem> taskItems) {
        final Date now = new Date();
        ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext();

        List<TaskTableItem> outdatedItems = new ArrayList<TaskTableItem>();
        List<TaskTableItem> recentItems = new ArrayList<TaskTableItem>();
        List<TaskTableItem> finishedItems = new ArrayList<TaskTableItem>();
        for (TaskTableItem tti : taskItems) {
            BpmTask task = tti.getTask();
            if (getBpmSession().isProcessRunning(task.getProcessInstance().getInternalId(), ctx)) {
                if (isOutdated(now, getDeadlineDate(task))) {
                    outdatedItems.add(tti);
                }
                else {
                    recentItems.add(tti);
                }
            }
            else {
                finishedItems.add(tti);
            }
        }
        taskItems.clear();
        for (List<TaskTableItem> list : new List[] {outdatedItems, recentItems, finishedItems}) {
            Collections.sort(list, new Comparator<TaskTableItem>() {
                @Override
                public int compare(TaskTableItem o1, TaskTableItem o2) {
                    return o2.getTask().getCreateDate().compareTo(o1.getTask().getCreateDate());
                }
            });
            taskItems.addAll(list);
        }
    }

    public static boolean isOutdated(Date baseDate, Date checkedDate) {
        return checkedDate != null && checkedDate.before(baseDate);
    }

    protected void displayProcessData(BpmTask task) {
        activityMainPane.displayProcessData(task);
    }

    /** Metoda wylicza date wygasniecia procesu. W przypadku podprocesow, siega
     * do atrubutow procesu głównego
     */
    public static Date getDeadlineDate(BpmTask task)
    {
        ProcessInstance process = task.getProcessInstance();
       
        Set<ProcessDeadline> deadlines = process.findAttributesByClass(ProcessDeadline.class);
        for (ProcessDeadline pd : deadlines) {
            if (pd.getTaskName().equalsIgnoreCase(task.getTaskName())) {
                return pd.getDueDate();
            }
        }
        return null;
    }

    @Override
    protected boolean getDataPaneUsesSpacing() {
        return false;
    }

  public void setType(QueueType type)
  {
    // TODO Auto-generated method stub
   
  }
}
TOP

Related Classes of pl.net.bluesoft.rnd.processtool.ui.activity.MyProcessesListPane

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.