Skip to content

Commit

Permalink
BPMSPL-111: auditing task updates changes
Browse files Browse the repository at this point in the history
  • Loading branch information
salaboy committed May 27, 2015
1 parent 4ff4653 commit 4a45713
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 34 deletions.
Expand Up @@ -45,8 +45,7 @@ public void afterTaskStartedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.STARTED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId ));

// @TODO: Update UserAuditTask to Lucene


AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
Expand All @@ -72,8 +71,7 @@ public void afterTaskActivatedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.ACTIVATED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));

// @TODO: Update UserAuditTask to Lucene

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
Expand All @@ -98,10 +96,7 @@ public void afterTaskClaimedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.CLAIMED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
//@TODO: Remove GroupAuditTask to Lucene

//@TODO: Create new UserAuditTask to Lucene


AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
Expand All @@ -126,13 +121,7 @@ public void afterTaskSkippedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.SKIPPED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
//@TODO: Find the UserAuditTask in the lucene index


//@TODO: If the UserAuditTask is in lucene remove it


//@TODO: Create the History Audit Task Impl, store it in the DB and also into lucene

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
Expand All @@ -142,8 +131,7 @@ public void afterTaskSkippedEvent(TaskEvent event) {
auditTaskImpl.setActualOwner(userId);
auditTaskImpl.setDescription(ti.getDescription());
persistenceContext.merge(auditTaskImpl);
//@TODO: There is also the possibility that a GroupAuditTask exist in Lucene..
// make sure that you remove it as well

} finally {
cleanup(persistenceContext);
}
Expand Down Expand Up @@ -189,8 +177,7 @@ public void afterTaskCompletedEvent(TaskEvent event) {
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.COMPLETED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));

//@TODO: Make sure that you find and remove the USerAuditTask from lucene once it is completed
//@TODO: Create a new HistoryAuditTask to keep track about the task.

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
Expand All @@ -216,7 +203,6 @@ public void afterTaskFailedEvent(TaskEvent event) {
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.FAILED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));

// Same as task skipped


AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
Expand Down Expand Up @@ -256,7 +242,7 @@ public void afterTaskAddedEvent(TaskEvent event) {
ti.getTaskData().getParentId(),
ti.getTaskData().getWorkItemId());
persistenceContext.persist(auditTaskImpl);
//@TODO: Create User or Group Task for Lucene

persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.ADDED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
} finally {
cleanup(persistenceContext);
Expand All @@ -274,7 +260,7 @@ public void afterTaskExitedEvent(TaskEvent event) {
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.EXITED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));

//@TODO: Same as skipped


AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
Expand Down Expand Up @@ -303,7 +289,7 @@ public void afterTaskReleasedEvent(TaskEvent event) {
Task ti = event.getTask();
TaskPersistenceContext persistenceContext = getPersistenceContext(((TaskContext)event.getTaskContext()).getPersistenceContext());
try {
//@TODO: Remove UserAuditTask and create a new GroupAuditTask for lucene

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
Expand Down Expand Up @@ -334,7 +320,6 @@ public void afterTaskResumedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.RESUMED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
//@TODO: Update Lucene UserAudit Task


AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
Expand Down Expand Up @@ -366,8 +351,6 @@ public void afterTaskSuspendedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.SUSPENDED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));

//@TODO: Update Lucene Audit Task

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
Expand Down Expand Up @@ -398,7 +381,7 @@ public void afterTaskForwardedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.FORWARDED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
//@TODO: Update Lucene Audit Task


AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
Expand Down Expand Up @@ -430,7 +413,6 @@ public void afterTaskDelegatedEvent(TaskEvent event) {
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.DELEGATED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));

//@TODO: Do I need to remove the USerAuditTask and create a GroupAuditTask in lucene???

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
Expand Down Expand Up @@ -461,7 +443,6 @@ public void afterTaskNominatedEvent(TaskEvent event) {
userId = ti.getTaskData().getActualOwner().getId();
}
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.NOMINATED, userId, new Date()));
//@TODO: Update Lucene Audit Task

AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
Expand Down Expand Up @@ -627,7 +608,11 @@ public void beforeTaskUpdatedEvent(TaskEvent event) {

@Override
public void afterTaskUpdatedEvent(TaskEvent event) {
String userId = "";
Task ti = event.getTask();
if (ti.getTaskData().getActualOwner() != null) {
userId = ti.getTaskData().getActualOwner().getId();
}
TaskPersistenceContext persistenceContext = getPersistenceContext(((TaskContext)event.getTaskContext()).getPersistenceContext());
try {

Expand All @@ -636,13 +621,52 @@ public void afterTaskUpdatedEvent(TaskEvent event) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
return;
}


if(ti.getDescription() != null
&& !ti.getDescription().equals(auditTaskImpl.getDescription())){
String message ="Updated Description {From: "+auditTaskImpl.getDescription()+
", to: "+ti.getDescription()+"}";
persistenceContext.persist(new TaskEventImpl(ti.getId(),
org.kie.internal.task.api.model.TaskEvent.TaskEventType.UPDATED,
ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId, message));
}
if( ti.getName() != null && !ti.getName().equals(auditTaskImpl.getName())){
String message ="Updated Name {From: "+auditTaskImpl.getName()+
", to: "+ti.getName()+"}";
persistenceContext.persist(new TaskEventImpl(ti.getId(),
org.kie.internal.task.api.model.TaskEvent.TaskEventType.UPDATED,
ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId, message));
}
if( auditTaskImpl.getPriority() != ti.getPriority()){
String message ="Updated Priority {From: "+auditTaskImpl.getPriority()+
", to: "+ti.getPriority()+"}";
persistenceContext.persist(new TaskEventImpl(ti.getId(),
org.kie.internal.task.api.model.TaskEvent.TaskEventType.UPDATED,
ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId, message));
}

if(auditTaskImpl.getDueDate() != null && ti.getTaskData().getExpirationTime() != null
&& auditTaskImpl.getDueDate().getTime() != ti.getTaskData().getExpirationTime().getTime()){
String message ="Updated DueDate {From: "+auditTaskImpl.getDueDate()+
", to: "+ti.getTaskData().getExpirationTime()+"}";
persistenceContext.persist(new TaskEventImpl(ti.getId(),
org.kie.internal.task.api.model.TaskEvent.TaskEventType.UPDATED,
ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId, message));
}

auditTaskImpl.setDescription(ti.getDescription());
auditTaskImpl.setName(ti.getName());
auditTaskImpl.setPriority(ti.getPriority());
auditTaskImpl.setDueDate(ti.getTaskData().getExpirationTime());

persistenceContext.merge(auditTaskImpl);
} finally {
persistenceContext.merge(auditTaskImpl);

} catch(Exception e){
e.printStackTrace();

}

finally {
cleanup(persistenceContext);
}
}
Expand Down
Expand Up @@ -52,6 +52,8 @@ public class TaskEventImpl implements TaskEvent, Externalizable {

private String userId;

private String message;

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date logTime;

Expand Down Expand Up @@ -86,6 +88,12 @@ public TaskEventImpl(Long taskId, TaskEventType type, Long processInstanceId, Lo

}

public TaskEventImpl(Long taskId, TaskEventType type, Long processInstanceId, Long workItemId, String userId, String message) {
this(taskId, type, processInstanceId, workItemId, userId, new Date());
this.message = message;

}

@Override
public long getId() {
return id;
Expand Down Expand Up @@ -120,6 +128,14 @@ public Long getWorkItemId() {
return workItemId;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
Expand All @@ -130,7 +146,9 @@ public void readExternal(ObjectInput in) throws IOException,
taskId = in.readLong();

type = TaskEventType.valueOf(in.readUTF());


message = in.readUTF();

userId = in.readUTF();

workItemId = in.readLong();
Expand All @@ -153,7 +171,14 @@ public void writeExternal(ObjectOutput out) throws IOException {
} else {
out.writeUTF("");
}


if (message != null) {
out.writeUTF(message);
} else {
out.writeUTF("");
}


if (userId != null) {
out.writeUTF(userId);
} else {
Expand All @@ -179,6 +204,7 @@ public int hashCode() {
hash = 97 * hash + (this.taskId != null ? this.taskId.hashCode() : 0);
hash = 97 * hash + (this.workItemId != null ? this.workItemId.hashCode() : 0);
hash = 97 * hash + (this.type != null ? this.type.hashCode() : 0);
hash = 97 * hash + (this.message != null ? this.message.hashCode() : 0);
hash = 97 * hash + (this.processInstanceId != null ? this.processInstanceId.hashCode() : 0);
hash = 97 * hash + (this.userId != null ? this.userId.hashCode() : 0);
hash = 97 * hash + (this.logTime != null ? this.logTime.hashCode() : 0);
Expand Down Expand Up @@ -209,6 +235,9 @@ public boolean equals(Object obj) {
if (this.type != other.type) {
return false;
}
if (!this.message.equals(other.message) ) {
return false;
}
if (this.processInstanceId != other.processInstanceId && (this.processInstanceId == null || !this.processInstanceId.equals(other.processInstanceId))) {
return false;
}
Expand Down

4 comments on commit 4a45713

@mswiderski
Copy link
Contributor

Choose a reason for hiding this comment

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

since this introduced new field in TaskEventImpl it requires regeneration of DDL scripts and to create upgrade script from 6.2 to 6.3 so people can easily upgrade it.

@salaboy
Copy link
Contributor Author

Choose a reason for hiding this comment

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

totally true,
so something like message varchar(255) here -> https://github.com/droolsjbpm/jbpm/blob/master/jbpm-installer/db/ddl-scripts/h2/h2-jbpm-schema.sql#L346 right? and in all the other DDL scripts for all the other DBs?

@mswiderski
Copy link
Contributor

Choose a reason for hiding this comment

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

pretty much, plus upgrade script (https://github.com/droolsjbpm/jbpm/blob/master/jbpm-installer/db/upgrade-scripts/jbpm-6.2-to-6.3.sql) to add alter table for each db we support, similar to what we already have there for correlation key in process instance log table

@salaboy
Copy link
Contributor Author

@salaboy salaboy commented on 4a45713 Jun 1, 2015

Choose a reason for hiding this comment

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

Done -> 465c57b

Please sign in to comment.