/*
* Copyright 2004 The Apache Software Foundation.
*
* 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.apache.agila.services;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.apache.agila.engine.Engine;
import org.apache.agila.engine.InstanceID;
import org.apache.agila.engine.MessageProcessor;
import org.apache.agila.impl.QueueServiceImpl;
import org.apache.agila.impl.memory.InstanceServiceImpl;
import org.apache.agila.impl.memory.BusinessProcessServiceImpl;
import org.apache.agila.impl.memory.TaskServiceImpl;
import org.apache.agila.impl.memory.TimerServiceImpl;
import org.apache.agila.impl.memory.TokenServiceImpl;
import org.apache.agila.impl.memory.NotificationServiceImpl;
import org.apache.agila.services.notification.NotificationService;
import org.apache.agila.services.task.Task;
import org.apache.agila.services.task.TaskID;
import org.apache.agila.services.user.UserID;
import junit.framework.TestCase;
public class TaskServiceTestCase extends TestCase {
private TokenService tokenService;
private InstanceServiceImpl eiSvc;
private BusinessProcessServiceImpl graphManager;
private TaskServiceImpl taskService;
private TimerServiceImpl timerService;
private MessageProcessor impl;
private QueueServiceImpl qs;
private Engine engine;
private NotificationService notificationService;
public void testSetTaskStatus() {
InstanceID id = engine.startNewInstance( 1, new HashMap() );
try {
Thread.sleep( 1000 );
} catch (InterruptedException e) {
e.printStackTrace();
fail( e.getMessage() );
}
List taskList = taskService.getTasksForUser( new UserID( 1 ), Task.TASK_ALL );
assertNotNull( "There are no tasks to process", taskList );
for( Iterator iterator = taskList.iterator(); iterator.hasNext(); ) {
Task task = (Task)iterator.next();
taskService.setTaskStatus( task.getTaskID(), Task.TASK_COMPLETE );
}
List taskListAfterUpdate = taskService.getTasksForUser( new UserID( 1 ), Task.TASK_COMPLETE );
assertEquals( "Updating of task status should not create another task", taskList.size(), taskListAfterUpdate.size() );
for( int i = 0; i < taskList.size(); i++ ) {
TaskID taskID1 = ((Task)taskList.get( i )).getTaskID();
TaskID taskID2 = ((Task)taskListAfterUpdate.get( i )).getTaskID();
assertEquals( "Task ID should not change after update.", taskID1, taskID2 );
}
// lets find the tasks for a workflow instance
InstanceID instanceID = new InstanceID(1);
taskList = taskService.getTasksForInstance(instanceID, Task.TASK_ALL);
assertNotNull("Should have found a list");
taskList = taskService.getTasksForInstance(instanceID, Task.TASK_COMPLETE);
assertNotNull("Should have found a list");
// lets cancel all oustanding tasks
taskService.setTaskStatusForInstance(instanceID, Task.TASK_ALL, Task.TASK_INCOMPLETE);
taskService.setTaskStatusForInstance(instanceID, Task.TASK_INCOMPLETE, Task.TASK_COMPLETE);
}
public void setUp() throws Exception {
tokenService = new TokenServiceImpl();
eiSvc = new InstanceServiceImpl();
graphManager = new BusinessProcessServiceImpl();
taskService = new TaskServiceImpl();
timerService = new TimerServiceImpl();
notificationService = new NotificationServiceImpl();
taskService.setTokenService(tokenService);
impl = new MessageProcessor();
impl.setTaskService(taskService);
impl.setTimerService(timerService);
impl.setExecutionInstanceService(eiSvc);
impl.setTokenService(tokenService);
impl.setBusinessProcessService(graphManager);
impl.setNotificationService( notificationService );
qs = new QueueServiceImpl(impl);
timerService.setQueueService(qs);
impl.setQueueService(qs);
eiSvc.setBusinessProcessService(graphManager);
eiSvc.setQueueService(qs);
eiSvc.setTokenService(tokenService);
qs.start();
engine = new Engine(tokenService, eiSvc, graphManager, qs);
Reader reader = new InputStreamReader(getClass().getClassLoader().getResourceAsStream(
"org/apache/agila/workflow_simple.xml"));
engine.addBusinessProcess(reader);
}
public void tearDown() throws Exception {
tokenService = null;
eiSvc = null;
graphManager = null;
taskService = null;
timerService = null;
impl = null;
qs = null;
engine = null;
}
}