package com.evolveum.midpoint.web.page.admin.certification.dto;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.schema.util.CertCampaignTypeUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseOutcomeStrategyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationResponseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationStageDefinitionType;
import org.apache.commons.lang3.StringUtils;
import javax.xml.datatype.Duration;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Kate on 15.12.2015.
*/
public class StageDefinitionDto implements Serializable {
public final static String F_NUMBER = "number";
public final static String F_NAME = "name";
public final static String F_DESCRIPTION = "description";
public final static String F_DURATION = "duration";
public final static String F_NOTIFY_BEFORE_DEADLINE = "notifyBeforeDeadline";
public final static String F_NOTIFY_ONLY_WHEN_NO_DECISION = "notifyOnlyWhenNoDecision";
public final static String F_REVIEWER_SPECIFICATION = "reviewerSpecification";
public final static String F_REVIEWER_DTO = "reviewerDto";
public final static String F_OUTCOME_STRATEGY = "outcomeStrategy";
public final static String F_OUTCOME_IF_NO_REVIEWERS = "outcomeIfNoReviewers";
private int number;
private String name;
private String description;
private String duration;
private String notifyBeforeDeadline;
private boolean notifyOnlyWhenNoDecision;
private AccessCertificationReviewerDto reviewerDto;
private AccessCertificationCaseOutcomeStrategyType outcomeStrategy;
private AccessCertificationResponseType outcomeIfNoReviewers;
private List<AccessCertificationResponseType> stopReviewOnRaw;
private List<AccessCertificationResponseType> advanceToNextStageOnRaw;
public StageDefinitionDto(AccessCertificationStageDefinitionType stageDefObj, PrismContext prismContext) throws SchemaException {
if (stageDefObj != null) {
setNumber(stageDefObj.getNumber());
setName(stageDefObj.getName());
setDescription(stageDefObj.getDescription());
if (stageDefObj.getDuration() != null) {
setDuration(stageDefObj.getDuration().toString());
}
setNotifyBeforeDeadline(convertDurationListToString(stageDefObj.getNotifyBeforeDeadline()));
setNotifyOnlyWhenNoDecision(Boolean.TRUE.equals(stageDefObj.isNotifyOnlyWhenNoDecision()));
setReviewerDto(new AccessCertificationReviewerDto(stageDefObj.getReviewerSpecification(), prismContext));
setOutcomeStrategy(stageDefObj.getOutcomeStrategy());
setOutcomeIfNoReviewers(stageDefObj.getOutcomeIfNoReviewers());
setStopReviewOnRaw(new ArrayList<>(stageDefObj.getStopReviewOn()));
setAdvanceToNextStageOnRaw(new ArrayList<>(stageDefObj.getAdvanceToNextStageOn()));
} else {
setReviewerDto(new AccessCertificationReviewerDto(null, prismContext));
}
}
private String convertDurationListToString(List<Duration> list){
String result = StringUtils.join(list, ", ");
return result;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
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 String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public String getNotifyBeforeDeadline() {
return notifyBeforeDeadline;
}
public void setNotifyBeforeDeadline(String notifyBeforeDeadline) {
this.notifyBeforeDeadline = notifyBeforeDeadline;
}
public boolean isNotifyOnlyWhenNoDecision() {
return notifyOnlyWhenNoDecision;
}
public void setNotifyOnlyWhenNoDecision(boolean notifyOnlyWhenNoDecision) {
this.notifyOnlyWhenNoDecision = notifyOnlyWhenNoDecision;
}
public AccessCertificationReviewerDto getReviewerDto() {
return reviewerDto;
}
public void setReviewerDto(AccessCertificationReviewerDto reviewerDto) {
this.reviewerDto = reviewerDto;
}
public AccessCertificationCaseOutcomeStrategyType getOutcomeStrategy() {
return outcomeStrategy;
}
public void setOutcomeStrategy(AccessCertificationCaseOutcomeStrategyType outcomeStrategy) {
this.outcomeStrategy = outcomeStrategy;
}
public AccessCertificationResponseType getOutcomeIfNoReviewers() {
return outcomeIfNoReviewers;
}
public void setOutcomeIfNoReviewers(AccessCertificationResponseType outcomeIfNoReviewers) {
this.outcomeIfNoReviewers = outcomeIfNoReviewers;
}
public List<AccessCertificationResponseType> getStopReviewOn() {
if (stopReviewOnRaw.isEmpty() && advanceToNextStageOnRaw.isEmpty()) {
return null;
}
return CertCampaignTypeUtil.getOutcomesToStopOn(stopReviewOnRaw, advanceToNextStageOnRaw);
}
public List<AccessCertificationResponseType> getStopReviewOnRaw() {
return stopReviewOnRaw;
}
public void setStopReviewOnRaw(List<AccessCertificationResponseType> stopReviewOnRaw) {
this.stopReviewOnRaw = stopReviewOnRaw;
}
public List<AccessCertificationResponseType> getAdvanceToNextStageOnRaw() {
return advanceToNextStageOnRaw;
}
public void setAdvanceToNextStageOnRaw(List<AccessCertificationResponseType> advanceToNextStageOnRaw) {
this.advanceToNextStageOnRaw = advanceToNextStageOnRaw;
}
}