From agila-commits-return-84-apmail-incubator-agila-commits-archive=www.apache.org@incubator.apache.org Sun Nov 27 12:10:48 2005 Return-Path: Delivered-To: apmail-incubator-agila-commits-archive@www.apache.org Received: (qmail 99035 invoked from network); 27 Nov 2005 12:10:48 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 27 Nov 2005 12:10:48 -0000 Received: (qmail 37600 invoked by uid 500); 27 Nov 2005 12:10:47 -0000 Mailing-List: contact agila-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: agila-dev@incubator.apache.org Delivered-To: mailing list agila-commits@incubator.apache.org Received: (qmail 37589 invoked by uid 99); 27 Nov 2005 12:10:47 -0000 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Sun, 27 Nov 2005 04:10:46 -0800 Received: (qmail 98978 invoked by uid 65534); 27 Nov 2005 12:10:26 -0000 Message-ID: <20051127121026.98977.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r349220 - in /incubator/agila/trunk/modules/bpm/src: main/java/org/apache/agila/example/ main/java/org/apache/agila/impl/ main/java/org/apache/agila/impl/web/ main/java/org/apache/agila/model/ main/java/org/apache/agila/services/ main/java/... Date: Sun, 27 Nov 2005 12:10:23 -0000 To: agila-commits@incubator.apache.org From: clim@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: clim Date: Sun Nov 27 04:09:44 2005 New Revision: 349220 URL: http://svn.apache.org/viewcvs?rev=349220&view=rev Log: Applied patch for actor functionality support from Geoff Howard. (AGILA-23) Added: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/ActorResolverServiceImpl.java (with props) incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/ActorResolverService.java (with props) incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/impl/ActorResolverServiceImplTest.java (with props) Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApplicationTask.java incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApprovalTask.java incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/web/AgilaServlet.java incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/model/Actor.java incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/AbstractTaskService.java incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/TaskService.java incubator/agila/trunk/modules/bpm/src/main/resources/LeaveApplication.xml incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/LeaveApplicationTestCase.java incubator/agila/trunk/modules/bpm/src/test/resources/LeaveApplication.xml Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApplicationTask.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApplicationTask.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApplicationTask.java (original) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApplicationTask.java Sun Nov 27 04:09:44 2005 @@ -16,9 +16,11 @@ package org.apache.agila.example; +import org.apache.agila.model.Actor; import org.apache.agila.model.Connection; import org.apache.agila.model.node.BaseNodeImpl; import org.apache.agila.model.NodeContext; +import org.apache.agila.services.notification.NotificationService; import org.apache.agila.services.task.Renderer; import org.apache.agila.services.task.ResponseHandler; import org.apache.agila.services.task.TaskActivity; @@ -64,10 +66,12 @@ */ public boolean doStart(NodeContext ctx) { + TaskService ts = ctx.getTaskService(); - - ts.assignTask(ctx.getNextExecutionToken().getTokenID(), "Enter leave details", - new UserID(1), new Date()); + NotificationService ns = ctx.getNotificationService(); + Actor[] actors = this.getActors(); + ts.assignTaskToActors(ctx.getNextExecutionToken().getTokenID(), "Enter leave details", + actors, new Date()); return false; } Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApprovalTask.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApprovalTask.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApprovalTask.java (original) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/example/LeaveApprovalTask.java Sun Nov 27 04:09:44 2005 @@ -16,6 +16,7 @@ package org.apache.agila.example; +import org.apache.agila.model.Actor; import org.apache.agila.model.Connection; import org.apache.agila.model.NodeContext; import org.apache.agila.services.user.UserID; @@ -35,9 +36,10 @@ TaskService ts = ctx.getTaskService(); NotificationService ns = ctx.getNotificationService(); - - ts.assignTask(ctx.getNextExecutionToken().getTokenID(), "Leave Approval", - new UserID(1), new Date()); + Actor[] actors = this.getActors(); + + ts.assignTaskToActors(ctx.getNextExecutionToken().getTokenID(), "Leave Approval", + actors, new Date()); return false; } Added: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/ActorResolverServiceImpl.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/ActorResolverServiceImpl.java?rev=349220&view=auto ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/ActorResolverServiceImpl.java (added) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/ActorResolverServiceImpl.java Sun Nov 27 04:09:44 2005 @@ -0,0 +1,64 @@ +/* + * 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.impl; + +import org.apache.agila.model.Actor; +import org.apache.agila.services.ActorResolverService; +import org.apache.agila.services.user.GroupID; +import org.apache.agila.services.user.UserID; +import org.apache.agila.util.BaseID; + +/** + * @author Geoff Howard + * @version $Id$ + */ +public class ActorResolverServiceImpl implements ActorResolverService { + + public BaseID[] resolve( Actor a ) { + /* + TODO is an array necessary here? should an actor be allowed to + resolve to more than one user or group? + */ + + // TODO use more sophisticated method to determine resolution rules. + + String name = a.getName(); + String[] pieces = name.split( ":" ); + + if( pieces.length != 2 ) { + throw new IllegalArgumentException( "Actor name must be specified as type:value" ); + } + + String type = pieces[0]; + String value = pieces[1]; + + if( type.equals( "userid" ) ) { + int id = Integer.parseInt( value ); + return new UserID[] { new UserID( id ) }; + } else if( type.equals( "groupid" ) ) { + int id = Integer.parseInt( value ); + return new GroupID[] { new GroupID( id ) }; + } else if( type.equals( "instance" ) ) { + // TODO parse special instance values such as initiator, current actor, etc. + } else if( type.equals( "variable" ) ) { + // TODO parse references to bound variables + } + + return null; + } + +} Propchange: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/ActorResolverServiceImpl.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/web/AgilaServlet.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/web/AgilaServlet.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/web/AgilaServlet.java (original) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/impl/web/AgilaServlet.java Sun Nov 27 04:09:44 2005 @@ -20,6 +20,7 @@ import org.apache.agila.engine.EngineMessage; import org.apache.agila.engine.InstanceID; import org.apache.agila.engine.MessageProcessor; +import org.apache.agila.impl.ActorResolverServiceImpl; import org.apache.agila.impl.EngineMessageImpl; import org.apache.agila.impl.QueueServiceImpl; import org.apache.agila.impl.servlet.ActionServlet; @@ -32,6 +33,7 @@ import org.apache.agila.impl.memory.TokenServiceImpl; import org.apache.agila.model.BusinessProcessID; import org.apache.agila.model.Variable; +import org.apache.agila.services.ActorResolverService; import org.apache.agila.services.BusinessProcessInfo; import org.apache.agila.services.InstanceInfo; import org.apache.agila.services.notification.NotificationID; @@ -103,6 +105,7 @@ this.taskService = new TaskServiceImpl(); this.timerService = new TimerServiceImpl(); this.notifyService = new NotificationServiceImpl(); + this.userService = new UserServiceImpl(); @@ -111,10 +114,11 @@ user.setUserID(new UserID( 1 )); this.userService.addUser(user); - + ActorResolverService arSvc = new ActorResolverServiceImpl(); taskService.setTokenService(tokenService); taskService.setInstanceService(eiSvc); taskService.setBusinessProcessService(graphManager); + taskService.setActorResolverService(arSvc); this.impl = new MessageProcessor(); @@ -596,4 +600,4 @@ public void error(Object msg, Throwable t) { log(msg.toString(), t); } -} \ No newline at end of file +} Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/model/Actor.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/model/Actor.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/model/Actor.java (original) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/model/Actor.java Sun Nov 27 04:09:44 2005 @@ -17,7 +17,7 @@ package org.apache.agila.model; /** - * Represents and actor. Currently, and actor is just a name + * Represents an actor. Currently, an actor is just a name * and the engine will need to find a resolver for the name, * and use the resolver to get real information * * Added: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/ActorResolverService.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/ActorResolverService.java?rev=349220&view=auto ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/ActorResolverService.java (added) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/ActorResolverService.java Sun Nov 27 04:09:44 2005 @@ -0,0 +1,38 @@ +/* + * 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 org.apache.agila.model.Actor; +import org.apache.agila.util.BaseID; + +/** + * Interface for handling resolution of named actors in the + * engine + * + * @author Geoff Howard + * @version $Id$ + */ +public interface ActorResolverService { + + /** + * Resolves an abstract named Actor. + * + * @param actor + */ + BaseID[] resolve( Actor actor ); + +} Propchange: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/ActorResolverService.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/AbstractTaskService.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/AbstractTaskService.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/AbstractTaskService.java (original) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/AbstractTaskService.java Sun Nov 27 04:09:44 2005 @@ -21,9 +21,11 @@ import org.apache.agila.engine.Token; import org.apache.agila.engine.TokenID; import org.apache.agila.impl.NodeContextImpl; +import org.apache.agila.model.Actor; import org.apache.agila.model.BusinessProcess; import org.apache.agila.model.BusinessProcessID; import org.apache.agila.model.Node; +import org.apache.agila.services.ActorResolverService; import org.apache.agila.services.BusinessProcessService; import org.apache.agila.services.InstanceService; import org.apache.agila.services.notification.NotificationService; @@ -31,7 +33,10 @@ import org.apache.agila.services.TokenService; import org.apache.agila.services.user.UserID; import org.apache.agila.services.user.GroupID; +import org.apache.agila.util.BaseID; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -45,6 +50,7 @@ private TokenService tokenService; private InstanceService instanceService; private BusinessProcessService businessProcessService; + private ActorResolverService actorResolverService; private TimerService timerService; private NotificationService notificationService; @@ -61,6 +67,10 @@ this.businessProcessService = bps; } + public void setActorResolverService(ActorResolverService ars) { + this.actorResolverService = ars; + } + public void setTimerService( TimerService timerService ) { this.timerService = timerService; } @@ -99,8 +109,30 @@ return ti.getTaskID(); } + + - /** + public TaskID[] assignTaskToActors(TokenID tokenID, String message, Actor[] actors, Date due) { + ArrayList taskIDs = new ArrayList(); + for (int i = 0; i < actors.length; i++) { + Actor actor = actors[i]; + BaseID[] resolvedIDs = actorResolverService.resolve(actor); + for (int j = 0; j < resolvedIDs.length; j++) { + BaseID baseID = resolvedIDs[j]; + if (baseID instanceof GroupID) { + TaskID id = assignTaskToTeam(tokenID,message,(GroupID)baseID,due); + taskIDs.add(id); + } else if (baseID instanceof UserID) { + TaskID id = assignTask(tokenID,message,(UserID)baseID,due); + taskIDs.add(id); + } + } + } + + return (TaskID[])(taskIDs.toArray(new TaskID[taskIDs.size()])); + } + + /** * returns a list of tasks for a user * * @param userID Modified: incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/TaskService.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/TaskService.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/TaskService.java (original) +++ incubator/agila/trunk/modules/bpm/src/main/java/org/apache/agila/services/task/TaskService.java Sun Nov 27 04:09:44 2005 @@ -18,6 +18,7 @@ import org.apache.agila.engine.InstanceID; import org.apache.agila.engine.TokenID; +import org.apache.agila.model.Actor; import org.apache.agila.services.user.GroupID; import org.apache.agila.services.user.UserID; @@ -55,6 +56,20 @@ * @return */ TaskID assignTaskToTeam(TokenID tokenID, String message, GroupID groupID, Date due); + + /** + * Assigns a new task to a given abstract named Actor. The service uses its + * configured ActorResolver to resolve the abstract actor to one or more + * users or groups. + * + * @param tokenID + * @param message + * @param actor + * @param due + * @return + */ + + TaskID[] assignTaskToActors(TokenID tokenID, String message, Actor[] actor, Date due); /** * returns a list of tasks for a user Modified: incubator/agila/trunk/modules/bpm/src/main/resources/LeaveApplication.xml URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/main/resources/LeaveApplication.xml?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/main/resources/LeaveApplication.xml (original) +++ incubator/agila/trunk/modules/bpm/src/main/resources/LeaveApplication.xml Sun Nov 27 04:09:44 2005 @@ -19,7 +19,7 @@ 123 - + @@ -30,7 +30,7 @@ - + Modified: incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/LeaveApplicationTestCase.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/LeaveApplicationTestCase.java?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/LeaveApplicationTestCase.java (original) +++ incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/LeaveApplicationTestCase.java Sun Nov 27 04:09:44 2005 @@ -24,6 +24,7 @@ import org.apache.agila.engine.InstanceID; import org.apache.agila.engine.MessageProcessor; import org.apache.agila.engine.Token; +import org.apache.agila.impl.ActorResolverServiceImpl; import org.apache.agila.impl.EngineMessageImpl; import org.apache.agila.impl.QueueServiceImpl; import org.apache.agila.impl.StdoutLogService; @@ -35,6 +36,7 @@ import org.apache.agila.impl.memory.TimerServiceImpl; import org.apache.agila.impl.memory.NotificationServiceImpl; import org.apache.agila.model.BusinessProcessID; +import org.apache.agila.services.ActorResolverService; import org.apache.agila.services.BusinessProcessInfo; import org.apache.agila.services.task.HTTPResponseHandler; import org.apache.agila.services.task.ResponseHandler; @@ -64,6 +66,7 @@ private BusinessProcessServiceImpl businessProcessService; private TaskServiceImpl taskService; private TimerServiceImpl timerService; + private ActorResolverServiceImpl actorResolverService; private MessageProcessor messageProcessor; private QueueServiceImpl queueService; private Engine engine; @@ -251,6 +254,7 @@ instanceService = new InstanceServiceImpl(); businessProcessService = new BusinessProcessServiceImpl(); taskService = new TaskServiceImpl(); + actorResolverService = new ActorResolverServiceImpl(); timerService = new TimerServiceImpl(); notifyService = new NotificationServiceImpl(); logger = new StdoutLogService(); @@ -265,6 +269,7 @@ taskService.setTokenService(tokenService); taskService.setInstanceService( instanceService ); taskService.setBusinessProcessService( businessProcessService ); + taskService.setActorResolverService(actorResolverService); messageProcessor = new MessageProcessor(); @@ -302,6 +307,7 @@ tokenService = null; instanceService = null; businessProcessService = null; + actorResolverService = null; taskService = null; timerService = null; messageProcessor = null; Added: incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/impl/ActorResolverServiceImplTest.java URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/impl/ActorResolverServiceImplTest.java?rev=349220&view=auto ============================================================================== --- incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/impl/ActorResolverServiceImplTest.java (added) +++ incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/impl/ActorResolverServiceImplTest.java Sun Nov 27 04:09:44 2005 @@ -0,0 +1,47 @@ +/* + * 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.impl; + +import junit.framework.TestCase; +import org.apache.agila.model.Actor; +import org.apache.agila.services.ActorResolverService; +import org.apache.agila.util.BaseID; + +/** + * @author Chris Lim + * @version $Id$ + */ + +public class ActorResolverServiceImplTest extends TestCase { + + + public void testResolveActor() { + + BaseID[] baseID; + + Actor actor = new Actor( "userid:1" ); + + ActorResolverService actorResolverService = new ActorResolverServiceImpl(); + + baseID = actorResolverService.resolve( actor ); + + assertTrue( baseID.length == 1); + assertTrue( baseID[0].getID() == 1); + + } + +} Propchange: incubator/agila/trunk/modules/bpm/src/test/java/org/apache/agila/impl/ActorResolverServiceImplTest.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: incubator/agila/trunk/modules/bpm/src/test/resources/LeaveApplication.xml URL: http://svn.apache.org/viewcvs/incubator/agila/trunk/modules/bpm/src/test/resources/LeaveApplication.xml?rev=349220&r1=349219&r2=349220&view=diff ============================================================================== --- incubator/agila/trunk/modules/bpm/src/test/resources/LeaveApplication.xml (original) +++ incubator/agila/trunk/modules/bpm/src/test/resources/LeaveApplication.xml Sun Nov 27 04:09:44 2005 @@ -38,7 +38,7 @@ 123 - + @@ -49,7 +49,7 @@ - +