/*
* Copyright (c) 2010-2014 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.wf.util;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractWorkItemOutputType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ApprovalLevelOutcomeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkItemOutcomeType;
import org.apache.commons.lang.BooleanUtils;
/**
* @author mederly
*/
public class ApprovalUtils {
private static final String DECISION_APPROVED_NICE = "Approved";
private static final String DECISION_REJECTED_NICE = "Rejected";
public static Boolean approvalBooleanValueNice(String decision) {
return parse(decision, DECISION_APPROVED_NICE, DECISION_REJECTED_NICE);
}
private static Boolean parse(String decision, String approved, String rejected) {
if (approved.equals(decision)) {
return true;
} else if (rejected.equals(decision)) {
return false;
} else {
return null;
}
}
public static Boolean approvalBooleanValue(AbstractWorkItemOutputType result) {
return result != null ? approvalBooleanValue(fromUri(result.getOutcome())) : null;
}
private static Boolean approvalBooleanValue(WorkItemOutcomeType outcome) {
if (outcome == null) {
return null;
}
switch (outcome) {
case APPROVE: return true;
case REJECT: return false;
default: throw new IllegalArgumentException("outcome: " + outcome);
}
}
public static boolean isApproved(AbstractWorkItemOutputType result) {
return BooleanUtils.isTrue(approvalBooleanValue(result));
}
private static boolean isApproved(WorkItemOutcomeType outcome) {
return BooleanUtils.isTrue(approvalBooleanValue(outcome));
}
public static String toUri(WorkItemOutcomeType workItemOutcomeType) {
if (workItemOutcomeType == null) {
return null;
}
switch (workItemOutcomeType) {
case APPROVE: return SchemaConstants.MODEL_APPROVAL_OUTCOME_APPROVE;
case REJECT: return SchemaConstants.MODEL_APPROVAL_OUTCOME_REJECT;
default: throw new AssertionError("Unexpected outcome: " + workItemOutcomeType);
}
}
public static String toUri(ApprovalLevelOutcomeType outcome) {
if (outcome == null) {
return null;
}
switch (outcome) {
case APPROVE: return SchemaConstants.MODEL_APPROVAL_OUTCOME_APPROVE;
case REJECT: return SchemaConstants.MODEL_APPROVAL_OUTCOME_REJECT;
case SKIP: return SchemaConstants.MODEL_APPROVAL_OUTCOME_SKIP;
default: throw new AssertionError("Unexpected outcome: " + outcome);
}
}
public static String toUri(Boolean approved) {
if (approved == null) {
return null;
} else {
return approved ? SchemaConstants.MODEL_APPROVAL_OUTCOME_APPROVE : SchemaConstants.MODEL_APPROVAL_OUTCOME_REJECT;
}
}
public static WorkItemOutcomeType fromUri(String uri) {
if (uri == null) {
return null;
} else if (QNameUtil.matchUri(uri, SchemaConstants.MODEL_APPROVAL_OUTCOME_APPROVE)) {
return WorkItemOutcomeType.APPROVE;
} else if (QNameUtil.matchUri(uri, SchemaConstants.MODEL_APPROVAL_OUTCOME_REJECT)) {
return WorkItemOutcomeType.REJECT;
} else {
throw new IllegalArgumentException("Unrecognized URI: " + uri);
}
}
public static ApprovalLevelOutcomeType approvalLevelOutcomeFromUri(String uri) {
if (uri == null) {
return null;
} else if (QNameUtil.matchUri(uri, SchemaConstants.MODEL_APPROVAL_OUTCOME_APPROVE)) {
return ApprovalLevelOutcomeType.APPROVE;
} else if (QNameUtil.matchUri(uri, SchemaConstants.MODEL_APPROVAL_OUTCOME_REJECT)) {
return ApprovalLevelOutcomeType.REJECT;
} else if (QNameUtil.matchUri(uri, SchemaConstants.MODEL_APPROVAL_OUTCOME_SKIP)) {
return ApprovalLevelOutcomeType.SKIP;
} else {
throw new IllegalArgumentException("Unrecognized URI: " + uri);
}
}
public static String makeNiceFromUri(String outcome) {
Boolean value = approvalBooleanValueFromUri(outcome);
if (value != null) {
return value ? DECISION_APPROVED_NICE : DECISION_REJECTED_NICE;
} else {
return outcome;
}
}
public static Boolean approvalBooleanValueFromUri(String uri) {
return approvalBooleanValue(fromUri(uri));
}
public static boolean isApprovedFromUri(String uri) {
return isApproved(fromUri(uri));
}
}