Java tutorial
/** * Copyright 2010 JBoss Inc * * 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.drools.task.service; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import org.apache.commons.collections.map.HashedMap; import org.drools.SystemEventListenerFactory; import org.drools.task.BaseTest; import org.drools.task.Deadline; import org.drools.task.Task; import org.drools.task.service.TaskServiceEscalationBaseTest.MockEscalatedDeadlineHandler.Item; import org.drools.task.service.responsehandlers.BlockingAddTaskResponseHandler; public abstract class TaskServiceEscalationBaseTest extends BaseTest { protected TaskServer server; protected TaskClient client; public void testDummy() { assertTrue(true); } public void testUnescalatedDeadlines() throws Exception { Map vars = new HashedMap(); vars.put("users", users); vars.put("groups", groups); MockEscalatedDeadlineHandler handler = new MockEscalatedDeadlineHandler(); taskService.setEscalatedDeadlineHandler(handler); //Reader reader; Reader reader = new InputStreamReader( TaskServiceEscalationBaseTest.class.getResourceAsStream("../QueryData_UnescalatedDeadlines.mvel")); List<Task> tasks = (List<Task>) eval(reader, vars); long now = ((Date) vars.get("now")).getTime(); for (Task task : tasks) { BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler(); client.addTask(task, null, addTaskResponseHandler); addTaskResponseHandler.waitTillDone(3000); } handler.wait(3, 30000); assertEquals(3, handler.list.size()); Item item0 = handler.list.get(0); assertEquals(now + 20000, item0.getDeadline().getDate().getTime()); Item item1 = handler.list.get(1); assertEquals(now + 22000, item1.getDeadline().getDate().getTime()); Item item2 = handler.list.get(2); assertEquals(now + 24000, item2.getDeadline().getDate().getTime()); } public void testUnescalatedDeadlinesOnStartup() throws Exception { Map vars = new HashedMap(); vars.put("users", users); vars.put("groups", groups); //Reader reader; Reader reader = new InputStreamReader( TaskServiceEscalationBaseTest.class.getResourceAsStream("../QueryData_UnescalatedDeadlines.mvel")); List<Task> tasks = (List<Task>) eval(reader, vars); long now = ((Date) vars.get("now")).getTime(); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); for (Task task : tasks) { // for this one we put the task in directly; em.persist(task); } em.getTransaction().commit(); // now create a new service, to see if it initiates from the DB correctly MockEscalatedDeadlineHandler handler = new MockEscalatedDeadlineHandler(); TaskService local = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener(), handler); handler.wait(3, 30000); assertEquals(3, handler.list.size()); Item item0 = handler.list.get(0); assertEquals(item0.getDeadline().getDate().getTime(), now + 20000); Item item1 = handler.list.get(1); assertEquals(item1.getDeadline().getDate().getTime(), now + 22000); Item item2 = handler.list.get(2); assertEquals(item2.getDeadline().getDate().getTime(), now + 24000); } public static class MockEscalatedDeadlineHandler implements EscalatedDeadlineHandler { List<Item> list = new ArrayList<Item>(); TaskService taskService; public void executeEscalatedDeadline(Task task, Deadline deadline, EntityManager em, TaskService taskService) { list.add(new Item(task, deadline, em, taskService)); } public List<Item> getList() { return this.list; } public static class Item { Task task; Deadline deadline; EntityManager em; public Item(Task task, Deadline deadline, EntityManager em, TaskService taskService) { this.deadline = deadline; this.em = em; this.task = task; } public Task getTask() { return task; } public void setTask(Task task) { this.task = task; } public Deadline getDeadline() { return deadline; } public void setDeadline(Deadline deadline) { this.deadline = deadline; } public EntityManager getEntityManager() { return em; } public void setEntityManager(EntityManager em) { this.em = em; } public EntityManager getEm() { return em; } public void setEm(EntityManager em) { this.em = em; } } public synchronized void wait(int totalSize, int totalWait) { int wait = 0; int size = 0; while (true) { synchronized (list) { size = list.size(); } if (size >= totalSize || wait >= totalWait) { break; } try { Thread.sleep(250); } catch (Exception e) { throw new RuntimeException("Unable to sleep", e); } wait += 250; } } } }