/* * Copyright (c) 2010-2016 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.web.page.admin.certification; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.web.component.prism.PrismPropertyPanel; import com.evolveum.midpoint.web.component.prism.ReferenceWrapper; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.certification.dto.AccessCertificationReviewerDto; import com.evolveum.midpoint.web.page.admin.certification.dto.ManagerSearchDto; import com.evolveum.midpoint.web.page.admin.certification.dto.StageDefinitionDto; import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseOutcomeStrategyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationResponseType; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.*; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import java.util.List; /** * Created by Kate Honchar. */ public class DefinitionStagePanel extends BasePanel<StageDefinitionDto> { private static final String ID_NAME = "name"; private static final String ID_DESCRIPTION = "description"; private static final String ID_DURATION = "duration"; private static final String ID_STAGE_DURATION_HELP = "stageDurationHelp"; private static final String ID_NOTIFY_BEFORE_DEADLINE = "notifyBeforeDeadline"; private static final String ID_NOTIFY_BEFORE_DEADLINE_HELP = "notifyBeforeDeadlineHelp"; private static final String ID_NOTIFY_ONLY_WHEN_NO_DECISION = "notifyOnlyWhenNoDecision"; private static final String ID_NOTIFY_WHEN_NO_DECISION_HELP = "notifyWhenNoDecisionHelp"; private static final String ID_REVIEWER_NAME= "reviewerName"; private static final String ID_REVIEWER_DESCRIPTION = "reviewerDescription"; private static final String ID_USE_TARGET_OWNER = "useTargetOwner"; private static final String ID_USE_TARGET_APPROVER = "useTargetApprover"; private static final String ID_TARGET_HELP = "reviewerSpecificationTargetHelp"; private static final String ID_USE_OBJECT_OWNER = "useObjectOwner"; private static final String ID_USE_OBJECT_APPROVER = "useObjectApprover"; private static final String ID_OBJECT_HELP = "reviewerSpecificationObjectHelp"; private static final String ID_USE_OBJECT_MANAGER = "useObjectManager"; private static final String ID_USE_OBJECT_MANAGER_DETAILS= "useObjectManagerDetails"; private static final String ID_USE_OBJECT_MANAGER_HELP = "reviewerUseObjectManagerHelp"; private static final String ID_USE_OBJECT_MANAGER_ORG_TYPE = "objectManagerOrgType"; private static final String ID_USE_OBJECT_MANAGER_ORG_TYPE_HELP = "reviewerUseObjectManagerOrgTypeHelp"; private static final String ID_USE_OBJECT_MANAGER_ALLOW_SELF = "useObjectManagerAllowSelf"; private static final String ID_USE_OBJECT_MANAGER_ALLOW_SELF_HELP = "reviewerUseObjectManagerAllowSelfHelp"; private static final String ID_DEFAULT_REVIEWER_REF_CONTAINER = "defaultReviewerRefContainer"; private static final String ID_DEFAULT_REVIEWER_REF = "defaultReviewerRef"; private static final String ID_DEFAULT_REVIEWER_REF_HELP = "defaultReviewerRefHelp"; private static final String ID_ADDITIONAL_REVIEWER_REF_CONTAINER = "additionalReviewerRefContainer"; private static final String ID_ADDITIONAL_REVIEWER_REF = "additionalReviewerRef"; private static final String ID_ADDITIONAL_REVIEWER_REF_HELP = "additionalReviewerRefHelp"; private static final String ID_APPROVAL_STRATEGY_CHECKBOX = "approvalStrategyCheckbox"; private static final String ID_OUTCOME_STRATEGY = "outcomeStrategy"; private static final String ID_OUTCOME_STRATEGY_HELP = "outcomeStrategyHelp"; private static final String ID_OUTCOME_IF_NO_REVIEWERS = "outcomeIfNoReviewers"; private static final String ID_OUTCOME_IF_NO_REVIEWERS_HELP = "outcomeIfNoReviewersHelp"; private static final String ID_STOP_REVIEW_ON = "stopReviewOn"; private static final String ID_STOP_REVIEW_ON_HELP = "stopReviewOnHelp"; // TODO remove pageBase from the constructor -- replace with delayed layout initialization public DefinitionStagePanel(String id, IModel<StageDefinitionDto> model, PageBase pageBase) { super(id, model); initLayout(pageBase); } protected void initLayout(PageBase pageBase) { TextField nameField = new TextField<>(ID_NAME, new PropertyModel<>(getModel(), StageDefinitionDto.F_NAME)); add(nameField); TextArea descriptionField = new TextArea<>(ID_DESCRIPTION, new PropertyModel<>(getModel(), StageDefinitionDto.F_DESCRIPTION)); add(descriptionField); TextField durationField = new TextField<>(ID_DURATION, new PropertyModel<>(getModel(), StageDefinitionDto.F_DURATION)); add(durationField); add(WebComponentUtil.createHelp(ID_STAGE_DURATION_HELP)); TextField notifyBeforeDeadlineField = new TextField<>(ID_NOTIFY_BEFORE_DEADLINE, new PropertyModel<>(getModel(), StageDefinitionDto.F_NOTIFY_BEFORE_DEADLINE)); add(notifyBeforeDeadlineField); add(WebComponentUtil.createHelp(ID_NOTIFY_BEFORE_DEADLINE_HELP)); add(new CheckBox(ID_NOTIFY_ONLY_WHEN_NO_DECISION, new PropertyModel<>(getModel(), StageDefinitionDto.F_NOTIFY_ONLY_WHEN_NO_DECISION))); add(WebComponentUtil.createHelp(ID_NOTIFY_WHEN_NO_DECISION_HELP)); TextField reviewerNameField = new TextField<>(ID_REVIEWER_NAME, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_NAME)); add(reviewerNameField); TextArea reviewerDescriptionField = new TextArea<>(ID_REVIEWER_DESCRIPTION, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_DESCRIPTION)); add(reviewerDescriptionField); add(new CheckBox(ID_USE_TARGET_OWNER, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_TARGET_OWNER))); add(new CheckBox(ID_USE_TARGET_APPROVER, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_TARGET_APPROVER))); add(WebComponentUtil.createHelp(ID_TARGET_HELP)); add(new CheckBox(ID_USE_OBJECT_OWNER, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_OBJECT_OWNER))); add(new CheckBox(ID_USE_OBJECT_APPROVER, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_OBJECT_APPROVER))); add(WebComponentUtil.createHelp(ID_OBJECT_HELP)); AjaxCheckBox useObjectManagerCheckbox = new AjaxCheckBox(ID_USE_OBJECT_MANAGER, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_OBJECT_MANAGER_PRESENT)) { @Override protected void onUpdate(AjaxRequestTarget target) { target.add(DefinitionStagePanel.this.get(ID_USE_OBJECT_MANAGER_DETAILS)); } }; add(useObjectManagerCheckbox); WebMarkupContainer useObjectManagerDetails = new WebMarkupContainer(ID_USE_OBJECT_MANAGER_DETAILS); useObjectManagerDetails.add(new VisibleEnableBehaviour() { @Override public boolean isEnabled() { return useObjectManagerCheckbox.getModelObject(); } }); useObjectManagerDetails.setOutputMarkupId(true); add(useObjectManagerDetails); add(WebComponentUtil.createHelp(ID_USE_OBJECT_MANAGER_HELP)); TextField orgTypeField = new TextField<>(ID_USE_OBJECT_MANAGER_ORG_TYPE, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_OBJECT_MANAGER + "." + ManagerSearchDto.F_ORG_TYPE)); orgTypeField.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); useObjectManagerDetails.add(orgTypeField); useObjectManagerDetails.add(WebComponentUtil.createHelp(ID_USE_OBJECT_MANAGER_ORG_TYPE_HELP)); CheckBox allowSelf = new CheckBox(ID_USE_OBJECT_MANAGER_ALLOW_SELF, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_USE_OBJECT_MANAGER + "." + ManagerSearchDto.F_ALLOW_SELF)); allowSelf.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); useObjectManagerDetails.add(allowSelf); useObjectManagerDetails.add(WebComponentUtil.createHelp(ID_USE_OBJECT_MANAGER_ALLOW_SELF_HELP)); PrismPropertyPanel defaultOwnerRefPanel = new NoOffsetPrismReferencePanel(ID_DEFAULT_REVIEWER_REF, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_DEFAULT_REVIEWERS), null, pageBase); defaultOwnerRefPanel.setLabelContainerVisible(false); add(defaultOwnerRefPanel); add(WebComponentUtil.createHelp(ID_DEFAULT_REVIEWER_REF_HELP)); PrismPropertyPanel additionalOwnerRefPanel = new NoOffsetPrismReferencePanel(ID_ADDITIONAL_REVIEWER_REF, new PropertyModel<>(getModel(), StageDefinitionDto.F_REVIEWER_DTO + "." + AccessCertificationReviewerDto.F_ADDITIONAL_REVIEWERS), null, pageBase); additionalOwnerRefPanel.setLabelContainerVisible(false); add(additionalOwnerRefPanel); add(WebComponentUtil.createHelp(ID_ADDITIONAL_REVIEWER_REF_HELP)); DropDownChoice outcomeStrategy1 = new DropDownChoice<>(ID_OUTCOME_STRATEGY, new PropertyModel<>(getModel(), StageDefinitionDto.F_OUTCOME_STRATEGY), WebComponentUtil.createReadonlyModelFromEnum(AccessCertificationCaseOutcomeStrategyType.class), new EnumChoiceRenderer<>(this)); add(outcomeStrategy1); add(WebComponentUtil.createHelp(ID_OUTCOME_STRATEGY_HELP)); DropDownChoice<AccessCertificationResponseType> outcomeIfNoReviewers = new DropDownChoice<>(ID_OUTCOME_IF_NO_REVIEWERS, new PropertyModel<>(getModel(), StageDefinitionDto.F_OUTCOME_IF_NO_REVIEWERS), WebComponentUtil.createReadonlyModelFromEnum(AccessCertificationResponseType.class), new EnumChoiceRenderer<>(this)); add(outcomeIfNoReviewers); add(WebComponentUtil.createHelp(ID_OUTCOME_IF_NO_REVIEWERS_HELP)); Label stopReviewOn = new Label(ID_STOP_REVIEW_ON, new AbstractReadOnlyModel<String>() { @Override public String getObject() { List<AccessCertificationResponseType> stopOn = getModelObject().getStopReviewOn(); return CertMiscUtil.getStopReviewOnText(stopOn, getPageBase()); } }); add(stopReviewOn); add(WebComponentUtil.createHelp(ID_STOP_REVIEW_ON_HELP)); } private class NoOffsetPrismReferencePanel extends PrismPropertyPanel<ReferenceWrapper> { public NoOffsetPrismReferencePanel(String id, IModel<ReferenceWrapper> propertyModel, Form form, PageBase pageBase) { super(id, propertyModel, form, pageBase); } // quite a hack, to get rid of col-md-offset-2 style @Override protected IModel<String> createStyleClassModel(IModel value) { return new AbstractReadOnlyModel<String>() { @Override public String getObject() { return null; } }; } } }