Skip to content

Commit

Permalink
- adding groupBy queries and test
Browse files Browse the repository at this point in the history
  • Loading branch information
salaboy committed Nov 4, 2012
1 parent c8d9f8f commit 21a7504
Show file tree
Hide file tree
Showing 8 changed files with 332 additions and 19 deletions.
Expand Up @@ -223,17 +223,15 @@ select
t.taskData.status,
t.priority,
t.taskData.skipable,
actualOwner,
createdBy,
t.taskData.actualOwner,
t.taskData.createdBy,
t.taskData.createdOn,
t.taskData.activationTime,
t.taskData.expirationTime,
t.taskData.processId,
t.taskData.processSessionId)
from
Task t
left join t.taskData.createdBy as createdBy
left join t.taskData.actualOwner as actualOwner
left join t.subjects as subject
left join t.descriptions as description
left join t.names as name,
Expand Down
Expand Up @@ -53,4 +53,8 @@ public interface TaskQueryService {
Task getTaskInstanceById(long taskId);

Task getTaskByWorkItemId(long workItemId);

List<TaskSummary> getTasksAssignedByGroup(String groupId, String language);

List<TaskSummary> getTasksAssignedByGroups(List<String> groupsId, String language);
}
Expand Up @@ -82,7 +82,7 @@ public interface TaskServiceEntryPoint {
void deleteOutput(long taskId, String userId);

void deployTaskDef(TaskDef def);

void exit(long taskId, String userId);

void fail(long taskId, String userId, Map<String, Object> faultData);
Expand Down Expand Up @@ -240,6 +240,10 @@ public interface TaskServiceEntryPoint {

int getPendingTaskByUserId(String userId);

List<TaskSummary> getTasksAssignedByGroup(String groupId, String language);

List<TaskSummary> getTasksAssignedByGroups(List<String> groupIds, String language);

//Listeners

TaskLifeCycleEventListener getTaskLifeCycleEventListener();
Expand Down
Expand Up @@ -4,7 +4,12 @@
*/
package org.jbpm.task.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
Expand All @@ -23,7 +28,7 @@
@ApplicationScoped
public class TaskQueryServiceImpl implements TaskQueryService {

@Inject
@Inject
private EntityManager em;

public TaskQueryServiceImpl() {
Expand Down Expand Up @@ -51,6 +56,42 @@ public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<St
.getResultList();
}

public List<TaskSummary> getTasksAssignedByGroup(String groupId, String language) {
return em.createNamedQuery("TasksAssignedAsPotentialOwnerByGroup")
.setParameter("groupId", groupId)
.setParameter("language", language)
.getResultList();
}

public List<TaskSummary> getTasksAssignedByGroups(List<String> groupIds, String language) {

List tasksByGroups = em.createNamedQuery("TasksAssignedAsPotentialOwnerByGroups")
.setParameter("groupIds", groupIds)
.getResultList();
Set<Long> tasksIds = new HashSet<Long>();
Map<Long, List<String>> potentialOwners = new HashMap<Long, List<String>>();
for (Object o : tasksByGroups) {
Object[] get = (Object[]) o;
tasksIds.add((Long) get[0]);
if (potentialOwners.get((Long) get[0]) == null) {
potentialOwners.put((Long) get[0], new ArrayList<String>());
}
potentialOwners.get((Long) get[0]).add((String) get[1]);
}
if (!tasksIds.isEmpty()) {
List<TaskSummary> tasks = em.createNamedQuery("TaskSummariesByIds")
.setParameter("taskIds", tasksIds)
.setParameter("language", language)
.getResultList();

for (TaskSummary ts : tasks) {
ts.setPotentialOwners(potentialOwners.get(ts.getId()));
}
return tasks;
}
return new ArrayList<TaskSummary>();
}

public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, int firstResult, int maxResult) {
throw new UnsupportedOperationException("Not supported yet.");
}
Expand Down Expand Up @@ -80,7 +121,39 @@ public List<TaskSummary> getTasksOwned(String userId) {
}

public List<TaskSummary> getTasksOwned(String userId, List<Status> status, String language) {
throw new UnsupportedOperationException("Not supported yet.");

List<TaskSummary> taskOwned = em.createNamedQuery("TasksOwnedWithParticularStatus")
.setParameter("userId", userId)
.setParameter("status", status)
.setParameter("language", language).getResultList();

if (!taskOwned.isEmpty()) {
Set<Long> tasksIds = new HashSet<Long>();
for (TaskSummary ts : taskOwned) {
tasksIds.add(ts.getId());
}

List tasksPotentialOwners = em.createNamedQuery("TasksOwnedPotentialOwnersByTaskIds")
.setParameter("taskIds", tasksIds)
.getResultList();

Map<Long, List<String>> potentialOwners = new HashMap<Long, List<String>>();
for (Object o : tasksPotentialOwners) {
Object[] get = (Object[]) o;
tasksIds.add((Long) get[0]);
if (potentialOwners.get((Long) get[0]) == null) {
potentialOwners.put((Long) get[0], new ArrayList<String>());
}
potentialOwners.get((Long) get[0]).add((String) get[1]);
}
for (TaskSummary ts : taskOwned) {
ts.setPotentialOwners(potentialOwners.get(ts.getId()));
}
} else {
return new ArrayList<TaskSummary>(0);
}

return taskOwned;
}

public List<TaskSummary> getTasksAssignedAsPotentialOwnerByStatus(String userId, List<Status> status, String language) {
Expand All @@ -103,10 +176,10 @@ public List<TaskSummary> getSubTasksByParent(long parentId) {
.setParameter("language", "en-UK") //@TODO: FIX THIS!
.getResultList();
}

public int getPendingSubTasksByParent(long parentId) {
return em.createNamedQuery("GetSubTasksByParentTaskId").setParameter("parentId", parentId)
.setParameter("language", "en-UK")
.setParameter("language", "en-UK")
.getResultList().size();
}

Expand All @@ -116,8 +189,8 @@ public Task getTaskInstanceById(long taskId) {

}

public Task getTaskByWorkItemId(long workItemId) {
public Task getTaskByWorkItemId(long workItemId) {
return (Task) em.createNamedQuery("TaskByWorkItemId").setParameter("workItemId", workItemId).setMaxResults(1).getResultList().get(0);

}
}
Expand Up @@ -509,6 +509,14 @@ public int getCompletedTaskByUserId(String userId) {
public int getPendingTaskByUserId(String userId) {
return taskStatisticService.getPendingTaskByUserId(userId);
}

public List<TaskSummary> getTasksAssignedByGroup(String groupId, String language) {
return taskQueryService.getTasksAssignedByGroup(groupId, language);
}

public List<TaskSummary> getTasksAssignedByGroups(List<String> groupIds, String language) {
return taskQueryService.getTasksAssignedByGroups(groupIds, language);
}



Expand Down
Expand Up @@ -19,7 +19,10 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.jbpm.task.OrganizationalEntity;

import org.jbpm.task.Status;
import org.jbpm.task.SubTasksStrategy;
Expand All @@ -46,6 +49,7 @@ public class TaskSummary
private int processSessionId;
private SubTasksStrategy subTaskStrategy;
private long parentId;
private List<String> potentialOwners;

public TaskSummary(long id,
long processInstanceId,
Expand Down Expand Up @@ -83,6 +87,8 @@ public TaskSummary(long id,
this.subTaskStrategy = subTaskStrategy;
this.parentId = parentId;
}



public TaskSummary() {
}
Expand Down Expand Up @@ -369,8 +375,15 @@ public long getParentId() {
public void setParentId(long parentId) {
this.parentId = parentId;
}



public List<String> getPotentialOwners() {
return potentialOwners;
}

public void setPotentialOwners(List<String> potentialOwners) {
this.potentialOwners = potentialOwners;
}

@Override
public int hashCode() {
final int prime = 31;
Expand Down
Expand Up @@ -360,6 +360,7 @@ from
OrganizationalEntity potentialOwners
where
t.archived = 0 and
t.taskData.actualOwner = null and
potentialOwners.id = :groupId and
potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and

Expand All @@ -381,6 +382,36 @@ where
t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended')


</query>
<!-- hint name="org.hibernate.timeout" value="200"/ -->
</named-query>

<named-query name="TasksAssignedAsPotentialOwnerByGroups">
<query>
select

t.id,
potentialOwners.id

from
Task t,

OrganizationalEntity potentialOwners

where

potentialOwners.id in (:groupIds) and
potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
t.archived = 0 and
t.taskData.actualOwner = null and



t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended')




</query>
<!-- hint name="org.hibernate.timeout" value="200"/ -->
</named-query>
Expand Down Expand Up @@ -934,17 +965,17 @@ select
t.taskData.processId,
t.taskData.processSessionId,
t.subTaskStrategy,
t.taskData.parentId )
t.taskData.parentId )
from
Task t
left join t.taskData.createdBy as createdBy
left join t.taskData.actualOwner as actualOwner
left join t.subjects as subject
left join t.descriptions as description
left join t.descriptions as description
left join t.names as name
where
t.archived = 0 and
t.taskData.actualOwner.id = :userId and

t.taskData.status in (:status) and

(
Expand All @@ -967,6 +998,82 @@ where
<!-- hint name="org.hibernate.timeout" value="200"/ -->
</named-query>

<named-query name="TaskSummariesByIds">
<query>
select
new org.jbpm.task.query.TaskSummary(
t.id,
t.taskData.processInstanceId,
name.text,
subject.text,
description.text,
t.taskData.status,
t.priority,
t.taskData.skipable,
actualOwner,
createdBy,
t.taskData.createdOn,
t.taskData.activationTime,
t.taskData.expirationTime,
t.taskData.processId,
t.taskData.processSessionId,
t.subTaskStrategy,
t.taskData.parentId )
from
Task t
left join t.taskData.createdBy as createdBy
left join t.taskData.actualOwner as actualOwner
left join t.subjects as subject
left join t.descriptions as description
left join t.names as name
where
t.id in (:taskIds) and

(
name.language = :language
or t.names.size = 0
) and

(
subject.language = :language
or t.subjects.size = 0
) and

(
description.language = :language
or t.descriptions.size = 0
)


</query>
<!-- hint name="org.hibernate.timeout" value="200"/ -->
</named-query>

<named-query name="TasksOwnedPotentialOwnersByTaskIds">
<query>
select

t.id,
potentialOwners.id

from
Task t,
OrganizationalEntity potentialOwners

where

t.id in (:taskIds) and
potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
t.archived = 0 and
t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended')




</query>
<!-- hint name="org.hibernate.timeout" value="200"/ -->
</named-query>

<named-query name="UnescalatedDeadlines">
<query>
select
Expand Down

1 comment on commit 21a7504

@mswiderski
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mauricio, didn't we at some point agreed to do not use group ids as argument for task service queries (see deprecated methods)? Idea was to use UserGroupCallback to resolve all groups user belongs to and user id is the main identifier used to collect tasks for given user (assuming user is the requestor as other identifiers can be used as well - work item id, process instance id)

Please sign in to comment.