/* 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 org.activiti.explorer.ui.management.job; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.activiti.engine.ManagementService; import org.activiti.engine.ProcessEngines; import org.activiti.engine.impl.persistence.entity.MessageEntity; import org.activiti.engine.impl.persistence.entity.TimerEntity; import org.activiti.engine.runtime.Job; import org.activiti.explorer.data.AbstractLazyLoadingQuery; import com.vaadin.data.Item; import com.vaadin.data.util.ObjectProperty; import com.vaadin.data.util.PropertysetItem; /** * @author Frederik Heremans */ public class JobListQuery extends AbstractLazyLoadingQuery { protected ManagementService repositoryService; public JobListQuery() { this.repositoryService = ProcessEngines.getDefaultProcessEngine().getManagementService(); } public int size() { return (int) repositoryService.createJobQuery().count(); } public List<Item> loadItems(int start, int count) { List<Job> jobs = repositoryService.createJobQuery() .orderByJobDuedate().asc() .orderByJobId().asc() .list(); List<Item> items = new ArrayList<Item>(); for (Job job : jobs) { items.add(new JobListItem(job)); } return items; } public Item loadSingleResult(String id) { Job job = repositoryService.createJobQuery().jobId(id).singleResult(); if (job != null) { return new JobListItem(job); } return null; } public void setSorting(Object[] propertyIds, boolean[] ascending) { throw new UnsupportedOperationException(); } class JobListItem extends PropertysetItem implements Comparable<JobListItem> { private static final long serialVersionUID = 1L; public JobListItem(Job job) { addItemProperty("id", new ObjectProperty<String>(job.getId(), String.class)); addItemProperty("dueDate", new ObjectProperty<Date>(job.getDuedate(), Date.class)); addItemProperty("name", new ObjectProperty<String>(getName(job), String.class)); } private String getName(Job theJob) { if(theJob instanceof TimerEntity) { return "Timer job " + theJob.getId(); } else if (theJob instanceof MessageEntity) { return "Message job " + theJob.getId(); } else { return "Job " + theJob.getId(); } } public int compareTo(JobListItem other) { Date dueDate = (Date) getItemProperty("dueDate").getValue(); Date otherDueDate = (Date) other.getItemProperty("dueDate").getValue(); int comparison = compareObjects(dueDate, otherDueDate); if (comparison != 0) { return comparison; } else { String id = (String) getItemProperty("id").getValue(); String otherId = (String) other.getItemProperty("id").getValue(); return id.compareTo(otherId); } } @SuppressWarnings("unchecked") private <T extends Object> int compareObjects(Comparable<T> object, Comparable<T> other) { if(object != null) { if(other != null) { return object.compareTo((T)other); } else { return 1; } } else { if(other == null) { return 0; } else { // Null is smaller than non-null value return -1; } } } } }