package com.evolveum.midpoint.web.page.admin.certification.dto;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.prism.ReferenceWrapper;
import com.evolveum.midpoint.web.component.prism.ValueStatus;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import java.io.Serializable;
import java.util.List;
import static com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationReviewerSpecificationType.F_ADDITIONAL_REVIEWER_REF;
import static com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationReviewerSpecificationType.F_DEFAULT_REVIEWER_REF;
/**
* Created by Kate on 15.12.2015.
*/
public class AccessCertificationReviewerDto implements Serializable {
public static final String F_NAME = "name";
public static final String F_DESCRIPTION = "description";
public static final String F_USE_TARGET_OWNER = "useTargetOwner";
public static final String F_USE_TARGET_APPROVER = "useTargetApprover";
public static final String F_USE_OBJECT_OWNER = "useObjectOwner";
public static final String F_USE_OBJECT_APPROVER = "useObjectApprover";
public static final String F_USE_OBJECT_MANAGER = "useObjectManager";
public static final String F_USE_OBJECT_MANAGER_PRESENT = "useObjectManagerPresent";
public static final String F_REVIEWER_EXPRESSION = "reviewerExpression";
public static final String F_DEFAULT_REVIEWERS = "defaultReviewers";
public static final String F_ADDITIONAL_REVIEWERS = "additionalReviewers";
private String name;
private String description;
private boolean useTargetOwner;
private boolean useTargetApprover;
private boolean useObjectOwner;
private boolean useObjectApprover;
private ManagerSearchDto useObjectManager;
private boolean useObjectManagerPresent;
private ReferenceWrapper defaultReviewers;
private ReferenceWrapper additionalReviewers;
private List<ExpressionType> reviewerExpressionList;
public AccessCertificationReviewerDto(AccessCertificationReviewerSpecificationType reviewerType, PrismContext prismContext) throws SchemaException {
final PrismReference defaultReviewersReference;
final PrismReference additionalReviewersReference;
if (reviewerType != null) {
name = reviewerType.getName();
description = reviewerType.getDescription();
useTargetOwner = Boolean.TRUE.equals(reviewerType.isUseTargetOwner());
useTargetApprover = Boolean.TRUE.equals(reviewerType.isUseTargetApprover());
useObjectOwner = Boolean.TRUE.equals(reviewerType.isUseObjectOwner());
useObjectApprover = Boolean.TRUE.equals(reviewerType.isUseObjectApprover());
useObjectManager = new ManagerSearchDto(reviewerType.getUseObjectManager());
useObjectManagerPresent = reviewerType.getUseObjectManager() != null;
reviewerExpressionList = reviewerType.getReviewerExpression();
defaultReviewersReference = reviewerType.asPrismContainerValue().findOrCreateReference(AccessCertificationReviewerSpecificationType.F_DEFAULT_REVIEWER_REF);
additionalReviewersReference = reviewerType.asPrismContainerValue().findOrCreateReference(AccessCertificationReviewerSpecificationType.F_ADDITIONAL_REVIEWER_REF);
} else {
useObjectManager = new ManagerSearchDto(null);
useObjectManagerPresent = false;
PrismReferenceDefinition defReviewerDef = prismContext.getSchemaRegistry().findItemDefinitionByFullPath(AccessCertificationDefinitionType.class,
PrismReferenceDefinition.class,
AccessCertificationDefinitionType.F_STAGE_DEFINITION, AccessCertificationStageDefinitionType.F_REVIEWER_SPECIFICATION, F_DEFAULT_REVIEWER_REF);
defaultReviewersReference = defReviewerDef.instantiate();
PrismReferenceDefinition additionalReviewerDef = prismContext.getSchemaRegistry().findItemDefinitionByFullPath(AccessCertificationDefinitionType.class,
PrismReferenceDefinition.class,
AccessCertificationDefinitionType.F_STAGE_DEFINITION, AccessCertificationStageDefinitionType.F_REVIEWER_SPECIFICATION, F_ADDITIONAL_REVIEWER_REF);
additionalReviewersReference = additionalReviewerDef.instantiate();
}
setDefaultReviewers(new ReferenceWrapper(null, defaultReviewersReference, false, ValueStatus.NOT_CHANGED));
setAdditionalReviewers(new ReferenceWrapper(null, additionalReviewersReference, false, ValueStatus.NOT_CHANGED));
}
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 boolean isUseTargetOwner() {
return useTargetOwner;
}
public void setUseTargetOwner(boolean useTargetOwner) {
this.useTargetOwner = useTargetOwner;
}
public boolean isUseTargetApprover() {
return useTargetApprover;
}
public void setUseTargetApprover(boolean useTargetApprover) {
this.useTargetApprover = useTargetApprover;
}
public boolean isUseObjectOwner() {
return useObjectOwner;
}
public void setUseObjectOwner(boolean useObjectOwner) {
this.useObjectOwner = useObjectOwner;
}
public boolean isUseObjectApprover() {
return useObjectApprover;
}
public void setUseObjectApprover(boolean useObjectApprover) {
this.useObjectApprover = useObjectApprover;
}
public boolean isUseObjectManagerPresent() {
return useObjectManagerPresent;
}
public void setUseObjectManagerPresent(boolean useObjectManagerPresent) {
this.useObjectManagerPresent = useObjectManagerPresent;
}
public ManagerSearchDto getUseObjectManager() {
return useObjectManager;
}
public void setUseObjectManager(ManagerSearchDto useObjectManager) {
this.useObjectManager = useObjectManager;
}
public List<ExpressionType> getReviewerExpressionList() {
return reviewerExpressionList;
}
public void setReviewerExpressionList(
List<ExpressionType> reviewerExpressionList) {
this.reviewerExpressionList = reviewerExpressionList;
}
public ReferenceWrapper getDefaultReviewers() {
return defaultReviewers;
}
public void setDefaultReviewers(ReferenceWrapper defaultReviewers) {
this.defaultReviewers = defaultReviewers;
}
public ReferenceWrapper getAdditionalReviewers() {
return additionalReviewers;
}
public void setAdditionalReviewers(ReferenceWrapper additionalReviewers) {
this.additionalReviewers = additionalReviewers;
}
public List<ObjectReferenceType> getDefaultReviewersAsObjectReferenceList(PrismContext prismContext) throws SchemaException {
return ObjectTypeUtil.getAsObjectReferenceTypeList(defaultReviewers.getUpdatedItem(prismContext));
}
public List<ObjectReferenceType> getAdditionalReviewersAsObjectReferenceList(PrismContext prismContext) throws SchemaException {
return ObjectTypeUtil.getAsObjectReferenceTypeList(additionalReviewers.getUpdatedItem(prismContext));
}
}