[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