/* * Copyright (c) 2010-2013 Evolveum * * 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 com.evolveum.midpoint.notifications.api.events; import com.evolveum.midpoint.prism.delta.ChangeType; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.LightweightIdentifierGenerator; import com.evolveum.midpoint.wf.api.WorkItemOperationInfo; import com.evolveum.midpoint.wf.api.WorkItemOperationSourceInfo; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.Validate; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.xml.datatype.Duration; import javax.xml.namespace.QName; import java.util.Map; /** * @author mederly */ public class WorkItemEvent extends WorkflowEvent { @NotNull protected final WorkItemType workItem; // (Currently) Each work item event is related to at most one assignee. So, if a work item has more assignees, // more events will be generated. This might change in a future. protected final SimpleObjectRef assignee; /** * User who "pressed the button". I.e. the one that really approved, rejected or delegated/escalated a work item. * In case of automated actions (completion, delegation/escalation) this is not filled-in. */ protected final SimpleObjectRef initiator; protected final WorkItemOperationInfo operationInfo; protected final WorkItemOperationSourceInfo sourceInfo; protected final Duration timeBefore; WorkItemEvent(@NotNull LightweightIdentifierGenerator lightweightIdentifierGenerator, @NotNull ChangeType changeType, @NotNull WorkItemType workItem, @Nullable SimpleObjectRef assignee, @Nullable SimpleObjectRef initiator, @Nullable WorkItemOperationInfo operationInfo, @Nullable WorkItemOperationSourceInfo sourceInfo, @NotNull WfContextType workflowContext, @Nullable EventHandlerType handler, @Nullable Duration timeBefore) { super(lightweightIdentifierGenerator, changeType, workflowContext, handler); Validate.notNull(workItem); this.workItem = workItem; this.assignee = assignee; this.initiator = initiator; this.operationInfo = operationInfo; this.sourceInfo = sourceInfo; this.timeBefore = timeBefore; } public String getWorkItemName() { return workItem.getName(); } @NotNull public WorkItemType getWorkItem() { return workItem; } @Override public boolean isCategoryType(EventCategoryType eventCategoryType) { return eventCategoryType == EventCategoryType.WORK_ITEM_EVENT || eventCategoryType == EventCategoryType.WORKFLOW_EVENT; } public SimpleObjectRef getAssignee() { return assignee; } public SimpleObjectRef getInitiator() { return initiator; } public WorkItemOperationKindType getOperationKind() { return operationInfo != null ? operationInfo.getOperationKind() : null; } public AbstractWorkItemActionType getSource() { return sourceInfo != null ? sourceInfo.getSource() : null; } public WorkItemEventCauseInformationType getCause() { return sourceInfo != null ? sourceInfo.getCause() : null; } public Duration getTimeBefore() { return timeBefore; } public WorkItemOperationInfo getOperationInfo() { return operationInfo; } public WorkItemOperationSourceInfo getSourceInfo() { return sourceInfo; } @Override public void createExpressionVariables(Map<QName, Object> variables, OperationResult result) { super.createExpressionVariables(variables, result); variables.put(SchemaConstants.C_ASSIGNEE, assignee != null ? assignee.resolveObjectType(result, false) : null); variables.put(SchemaConstants.C_WORK_ITEM, workItem); } public AbstractWorkItemOutputType getOutput() { return workItem.getOutput(); } @Override public String getOutcome() { AbstractWorkItemOutputType output = getOutput(); return output != null ? output.getOutcome() : null; } @Override public String toString() { return "WorkflowProcessEvent{" + "workflowEvent=" + super.toString() + ", workItemName=" + getWorkItemName() + ", assignee=" + assignee + '}'; } }