[jbpm-commits] JBoss JBPM SVN: r3276 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/task and 6 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Dec 8 18:03:08 EST 2008
Author: alex.guizar at jboss.com
Date: 2008-12-08 18:03:08 -0500 (Mon, 08 Dec 2008)
New Revision: 3276
Added:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskBuilder.java
jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/cmd/CreateTaskBuilder.java
jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskBuilderImpl.java
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/TaskService.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/Task.java
jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/hibernate/HibernateTaskDbSession.java
jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskImpl.java
jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskServiceImpl.java
jbpm4/trunk/modules/task/src/main/resources/jbpm.task.hbm.xml
jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/TaskServiceTest.java
jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/internal/model/TaskTest.java
Log:
JBPM-1858 new task without parameters, identifier generated upon save
fluent interface for building tasks
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/TaskService.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/TaskService.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/TaskService.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -25,6 +25,7 @@
import org.jbpm.task.Role;
import org.jbpm.task.Task;
+import org.jbpm.task.TaskBuilder;
/**
* Human task management facility.
@@ -32,8 +33,14 @@
*/
public interface TaskService {
- /** Creates a not-yet-persisted task with the given identifier.
+ /** Creates a task.
+ * The returned task will be transient.
* Use {@link #saveTask(Task)} to persist the task. */
+ Task newTask();
+
+ /** Creates a task with the given identifier.
+ * The returned task will be transient.
+ * Use {@link #saveTask(Task)} to persist the task. */
Task newTask(String taskId);
/** Saves the given task to persistent storage. */
@@ -51,6 +58,15 @@
/** Removes the task with the given identifier from persistent storage. */
void deleteTask(String taskId);
+ /** Provides a fluent interface for task configuration. The usage model is:
+ * <pre>Task task = taskService.buildTask()
+ * .name("expenses")
+ * .dueDate(asap)
+ * .assignedUserId(me)
+ * .priority(HIGH)
+ * .done();</pre> */
+ TaskBuilder buildTask();
+
List<String> getCandidates(String taskId);
List<Role> getRoles(String taskId);
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/Task.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/Task.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/Task.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -50,24 +50,23 @@
* reassigned. */
String ROLETYPE_REPLACED_ASSIGNEE = "replaced-assignee";
-
String getId();
String getName();
void setName(String name);
- String getAssignedUserId();
- void setAssignedUserId(String assignedUserId);
-
String getDescription();
void setDescription(String description);
+ String getAssignedUserId();
+ void setAssignedUserId(String assignedUserId);
+
Date getCreate();
- int getPriority();
- void setPriority(int priority);
-
Date getDueDate();
void setDueDate(Date dueDate);
+ int getPriority();
+ void setPriority(int priority);
+
}
\ No newline at end of file
Added: jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskBuilder.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskBuilder.java (rev 0)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/task/TaskBuilder.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -0,0 +1,28 @@
+package org.jbpm.task;
+
+import java.util.Date;
+
+import org.jbpm.TaskService;
+
+/**
+ * Task builders are useful to create and configure human tasks through
+ * a fluent interface. Refer to {@link TaskService#buildTask()} for the
+ * usage model.
+ * @author Alejandro Guizar
+ */
+public interface TaskBuilder {
+
+ TaskBuilder id(String id);
+
+ TaskBuilder name(String name);
+
+ TaskBuilder description(String description);
+
+ TaskBuilder assignedUserId(String assignedUserId);
+
+ TaskBuilder priority(int priority);
+
+ TaskBuilder dueDate(Date dueDate);
+
+ Task done();
+}
\ No newline at end of file
Added: jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/cmd/CreateTaskBuilder.java
===================================================================
--- jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/cmd/CreateTaskBuilder.java (rev 0)
+++ jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/cmd/CreateTaskBuilder.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.internal.cmd;
+
+import org.jbpm.cmd.Command;
+import org.jbpm.env.Environment;
+import org.jbpm.task.TaskBuilder;
+import org.jbpm.task.internal.model.TaskBuilderImpl;
+import org.jbpm.task.internal.model.TaskImpl;
+
+/**
+ * @author Alejandro Guizar
+ */
+public class CreateTaskBuilder implements Command<TaskBuilder> {
+
+ private static final long serialVersionUID = 1L;
+
+ public TaskBuilder execute(Environment environment) throws Exception {
+ return new TaskBuilderImpl(TaskImpl.create());
+ }
+
+}
Modified: jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/hibernate/HibernateTaskDbSession.java
===================================================================
--- jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/hibernate/HibernateTaskDbSession.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/hibernate/HibernateTaskDbSession.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -21,6 +21,8 @@
*/
package org.jbpm.task.internal.hibernate;
+import java.io.Serializable;
+
import org.hibernate.criterion.Restrictions;
import org.jbpm.pvm.internal.hibernate.HibernateDbSession;
import org.jbpm.task.Task;
@@ -40,6 +42,12 @@
}
public void saveTask(Task task) {
- session.saveOrUpdate(task);
+ if (task.getId() == null) {
+ Serializable dbid = session.save(task);
+ ((TaskImpl) task).setId(dbid.toString());
+ }
+ else {
+ session.saveOrUpdate(task);
+ }
}
}
Added: jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskBuilderImpl.java
===================================================================
--- jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskBuilderImpl.java (rev 0)
+++ jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskBuilderImpl.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -0,0 +1,73 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.task.internal.model;
+
+import java.util.Date;
+
+import org.jbpm.task.Task;
+import org.jbpm.task.TaskBuilder;
+
+/**
+ * @author Alejandro Guizar
+ */
+public class TaskBuilderImpl implements TaskBuilder {
+
+ private final TaskImpl task;
+
+ public TaskBuilderImpl(TaskImpl task) {
+ this.task = task;
+ }
+
+ public TaskBuilder id(String id) {
+ task.setId(id);
+ return this;
+ }
+
+ public TaskBuilder name(String name) {
+ task.setName(name);
+ return this;
+ }
+
+ public TaskBuilder description(String description) {
+ task.setDescription(description);
+ return this;
+ }
+
+ public TaskBuilder assignedUserId(String assignedUserId) {
+ task.setAssignedUserId(assignedUserId);
+ return this;
+ }
+
+ public TaskBuilder priority(int priority) {
+ task.setPriority(priority);
+ return this;
+ }
+
+ public TaskBuilder dueDate(Date dueDate) {
+ task.setDueDate(dueDate);
+ return this;
+ }
+
+ public Task done() {
+ return task;
+ }
+}
Modified: jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskImpl.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskImpl.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -67,7 +67,7 @@
protected String name;
protected String description;
- protected String assignee;
+ protected String assignedUserId;
protected Set<RoleImpl> roles;
protected Date create;
@@ -95,7 +95,11 @@
}
// creating a task
-
+
+ public static TaskImpl create() {
+ return create(null, null, null);
+ }
+
public static TaskImpl create(String taskId) {
return create(taskId, null, null);
}
@@ -106,21 +110,22 @@
public static TaskImpl create(String taskId, TaskDefinitionImpl taskDefinition, ExecutionImpl execution) {
TaskImpl task = null;
+
// if a task class name is configured
Environment environment = Environment.getCurrent();
- String taskClassName = (environment!=null ? (String) environment.get(TaskImpl.CONTEXTKEY_TASK_CLASS_NAME, TaskImpl.SEARCHORDER_TASK_CLASS_NAME) : null);
+ String taskClassName = environment!=null ? (String) environment.get(TaskImpl.CONTEXTKEY_TASK_CLASS_NAME, TaskImpl.SEARCHORDER_TASK_CLASS_NAME) : null;
if (taskClassName!=null) {
// dynamically instantiate it
ClassLoader classLoader = environment.getClassLoader();
Class<?> taskClass = ReflectUtil.loadClass(classLoader, taskClassName);
task = (TaskImpl) ReflectUtil.newInstance(taskClass);
-
+ }
// otherwise just use the default task implementation type
- } else {
+ else {
task = new TaskImpl();
}
- task.create = Clock.getCurrentTime();
+ task.setCreate(Clock.getCurrentTime());
task.setId(taskId);
task.setTaskDefinition(taskDefinition);
@@ -153,22 +158,11 @@
return null;
}
- // assigning a task /////////////////////////////////////////////////////////
-
- public String getAssignee() {
- return assignee;
- }
-
- public void setAssignee(String assignee) {
- this.assignee = assignee;
- // TODO fire the assignment event
- }
-
// roles ////////////////////////////////////////////////////////////////////
public Set<RoleImpl> getRoles() {
if (roles==null) {
- return Collections.EMPTY_SET;
+ return Collections.emptySet();
}
return roles;
}
@@ -228,7 +222,7 @@
public List<Comment> getComments() {
if (comments==null) {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
return (List) comments;
}
@@ -326,95 +320,107 @@
// getters and setters //////////////////////////////////////////////////////
- public String getDescription() {
- return description;
+ public long getDbid() {
+ return dbid;
}
- public void setDescription(String description) {
- this.description = description;
+
+ public String getId() {
+ return id;
}
+ public void setId(String id) {
+ this.id = id;
+ }
+
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
+
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
public boolean isBlocking() {
return isBlocking;
}
public void setBlocking(boolean isBlocking) {
this.isBlocking = isBlocking;
}
+
public boolean isSignalling() {
return isSignalling;
}
public void setSignalling(boolean isSignalling) {
this.isSignalling = isSignalling;
}
+
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
+
public void setComments(List<CommentImpl> comments) {
this.comments = comments;
}
+
public Date getCreate() {
return create;
}
public void setCreate(Date create) {
this.create = create;
}
+
public Date getDueDate() {
return dueDate;
}
public void setDueDate(Date dueDate) {
this.dueDate = dueDate;
}
+
public ExecutionImpl getExecution() {
return execution;
}
public void setExecution(Execution execution) {
this.execution = (ExecutionImpl) execution;
}
+
public String getState() {
return state;
}
+
+ public String getAssignedUserId() {
+ return assignedUserId;
+ }
+ public void setAssignedUserId(String assignedUserId) {
+ this.assignedUserId = assignedUserId;
+ }
+
public Swimlane getSwimlane() {
return swimlane;
}
public void setSwimlane(SwimlaneImpl swimlane) {
this.swimlane = swimlane;
}
- public long getDbid() {
- return dbid;
- }
+
public TaskDefinition getTaskDefinition() {
return taskDefinition;
}
+
public TaskImpl getSuperTask() {
return superTask;
}
public void setSuperTask(TaskImpl superTask) {
this.superTask = superTask;
}
+
public Integer getProgress() {
return progress;
}
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
-
- public String getAssignedUserId() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void setAssignedUserId(String assignedUserId) {
- // TODO Auto-generated method stub
-
- }
}
Modified: jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskServiceImpl.java
===================================================================
--- jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskServiceImpl.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/task/src/main/java/org/jbpm/task/internal/model/TaskServiceImpl.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -27,7 +27,9 @@
import org.jbpm.cmd.CommandService;
import org.jbpm.task.Role;
import org.jbpm.task.Task;
+import org.jbpm.task.TaskBuilder;
import org.jbpm.task.internal.cmd.CreateTask;
+import org.jbpm.task.internal.cmd.CreateTaskBuilder;
import org.jbpm.task.internal.cmd.DeleteTask;
import org.jbpm.task.internal.cmd.GetTask;
import org.jbpm.task.internal.cmd.SaveTask;
@@ -54,7 +56,11 @@
this.commandService = commandService;
}
- public Task newTask(String taskId) {
+ public Task newTask() {
+ return newTask(null);
+ }
+
+ public Task newTask(String taskId) {
return commandService.execute(new CreateTask(taskId));
}
@@ -74,7 +80,11 @@
commandService.execute(new DeleteTask(taskId));
}
- public List<String> getCandidates(String taskId) {
+ public TaskBuilder buildTask() {
+ return commandService.execute(new CreateTaskBuilder());
+ }
+
+ public List<String> getCandidates(String taskId) {
// TODO Auto-generated method stub
return null;
}
Modified: jbpm4/trunk/modules/task/src/main/resources/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/task/src/main/resources/jbpm.task.hbm.xml 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/task/src/main/resources/jbpm.task.hbm.xml 2008-12-08 23:03:08 UTC (rev 3276)
@@ -55,7 +55,7 @@
<property name="id" column="ID_" unique="true" />
<property name="name" column="NAME_"/>
<property name="description" column="DESCR_"/>
- <property name="assignee" column="ASSIGNEE_"/>
+ <property name="assignedUserId" column="ASSIGNEE_"/>
<set name="roles" cascade="all-delete-orphan">
<key column="TASK_" foreign-key="FK_ROLE_TASK" />
Modified: jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/TaskServiceTest.java
===================================================================
--- jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/TaskServiceTest.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/TaskServiceTest.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -23,6 +23,7 @@
import java.util.Date;
+import org.jbpm.pvm.internal.util.Priority;
import org.jbpm.test.DbTestCase;
/**
@@ -39,13 +40,22 @@
assertNull("expected null, but was " + task, task);
}
+ public void testGenerateTaskId() {
+ Task task = taskService.newTask();
+ String taskId = task.getId();
+ assertNull("expected null, but was " + taskId, taskId);
+ // save task to generate identifier
+ saveTask(task);
+ assertNotNull("expected non-null task id", task.getId());
+ }
+
public void testSaveTask() {
String taskId = getName();
Task task = taskService.newTask(taskId);
saveTask(task);
// task was made persistent
task = taskService.getTask(taskId);
- assertNotNull("expected task '" + taskId + "', but was null", task);
+ assertNotNull("expected non-null task", task);
// make some change
Date dueDate = new Date();
task.setDueDate(dueDate);
@@ -63,8 +73,7 @@
// create task and verify it exists
task = taskService.newTask(taskId);
saveTask(task);
- assertNotNull("expected task '" + taskId + "', but was null",
- taskService.getTask(taskId));
+ assertNotNull("expected non-null task", taskService.getTask(taskId));
}
public void testDeleteTask() {
@@ -72,11 +81,25 @@
Task task = taskService.newTask(taskId);
taskService.saveTask(task);
// task was made persistent
- assertNotNull("expected task '" + taskId + "', but was null",
- taskService.getTask(taskId));
+ assertNotNull("expected non-null task", taskService.getTask(taskId));
// delete task and verify it does not exist
taskService.deleteTask(taskId);
task = taskService.getTask(taskId);
assertNull("expected null, but was " + task, task);
}
+
+ public void testBuildTask() {
+ Date asap = new Date();
+ String me = System.getProperty("user.name");
+ Task task = taskService.buildTask()
+ .name("expenses")
+ .dueDate(asap)
+ .assignedUserId(me)
+ .priority(Priority.HIGH)
+ .done();
+ assertEquals("expenses", task.getName());
+ assertEquals(asap, task.getDueDate());
+ assertEquals(me, task.getAssignedUserId());
+ assertEquals(Priority.HIGH, task.getPriority());
+ }
}
Modified: jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/internal/model/TaskTest.java
===================================================================
--- jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/internal/model/TaskTest.java 2008-12-08 22:35:29 UTC (rev 3275)
+++ jbpm4/trunk/modules/task/src/test/java/org/jbpm/task/internal/model/TaskTest.java 2008-12-08 23:03:08 UTC (rev 3276)
@@ -64,16 +64,16 @@
public void testTaskAssignment() {
TaskImpl task = TaskImpl.create(getName());
- task.setAssignee("john doe");
- assertEquals("john doe", task.getAssignee());
+ task.setAssignedUserId("john doe");
+ assertEquals("john doe", task.getAssignedUserId());
}
public void testTaskReassignmentAssignment() {
TaskImpl task = TaskImpl.create(getName());
- task.setAssignee("johndoe");
- assertEquals("johndoe", task.getAssignee());
- task.setAssignee("joesmoe");
- assertEquals("joesmoe", task.getAssignee());
+ task.setAssignedUserId("johndoe");
+ assertEquals("johndoe", task.getAssignedUserId());
+ task.setAssignedUserId("joesmoe");
+ assertEquals("joesmoe", task.getAssignedUserId());
}
public void testTaskRoles() {
More information about the jbpm-commits
mailing list