Skip to content

Commit

Permalink
MID-7976 more implementation on shopping cart step (request access ui)
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jun 15, 2022
1 parent 4eeac88 commit e3957c5
Show file tree
Hide file tree
Showing 5 changed files with 204 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ public class RequestAccess implements Serializable {
private QName relation;
private List<AssignmentType> shoppingCartAssignments;

private String comment;

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

public List<ObjectReferenceType> getPersonOfInterest() {
if (personOfInterest == null) {
personOfInterest = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import java.util.Objects;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.page.PageBase;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand All @@ -32,6 +30,7 @@
import com.evolveum.midpoint.gui.api.component.wizard.Badge;
import com.evolveum.midpoint.gui.api.component.wizard.WizardStepPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.search.Search;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,24 @@ <h3 class="card-title">
</h3>
</div>
<div class="card-body d-flex flex-column gap-3 pb-1">
<div class="form-group mb-0">
<label>
<wicket:message key="ShoppingCartPanel.validity"/>
<i class="fas fa-info-circle fa-xs text-primary"></i>
</label>
<select class="form-control">
<!-- todo -->
</select>
</div>
<div class="form-group mb-0">
<label>
<wicket:message key="ShoppingCartPanel.comment"/>
<i class="fas fa-info-circle fa-xs text-primary"></i>
</label>
<textarea class="form-control" rows="4"></textarea>
</div>
<wicket:enclosure wicket:child="validity">
<div class="form-group mb-0">
<label>
<wicket:message key="ShoppingCartPanel.validity"/>
<i class="fas fa-info-circle fa-xs text-primary"></i>
</label>
<select class="form-control" wicket:id="validity"/>
</div>
</wicket:enclosure>
<wicket:enclosure wicket:child="comment">
<div class="form-group mb-0">
<label>
<wicket:message key="ShoppingCartPanel.comment"/>
<i class="fas fa-info-circle fa-xs text-primary"></i>
</label>
<textarea class="form-control" rows="4" wicket:id="comment"></textarea>
</div>
</wicket:enclosure>
<a class="btn btn-danger">
<i class="fas fa-triangle-exclamation mr-1"></i>
<wicket:message key="ShoppingCartPanel.openConflict"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,10 @@
package com.evolveum.midpoint.gui.impl.page.self.requestAccess;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.evolveum.midpoint.gui.api.component.wizard.Badge;

import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel;

import com.evolveum.midpoint.web.component.dialog.Popupable;

import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand All @@ -26,38 +20,84 @@
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import com.evolveum.midpoint.gui.api.component.wizard.Badge;
import com.evolveum.midpoint.gui.api.component.wizard.WizardStepPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.web.component.data.BoxedTablePanel;
import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel;
import com.evolveum.midpoint.web.component.dialog.Popupable;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;

/**
* Created by Viliam Repan (lazyman).
*/
public class ShoppingCartPanel extends WizardStepPanel<RequestAccess> {

public static final String STEP_ID = "shoppingCart";
private static final long serialVersionUID = 1L;

private static final String ID_TABLE = "table";
private static final List<ValidityPredefinedValueType> DEFAULT_VALIDITY_PERIODS = Arrays.asList(
new ValidityPredefinedValueType()
.duration(XmlTypeConverter.createDuration("P1D"))
.display(new DisplayType().label("ShoppingCartPanel.validity1Day")),
new ValidityPredefinedValueType()
.duration(XmlTypeConverter.createDuration("P7D"))
.display(new DisplayType().label("ShoppingCartPanel.validity1Week")),
new ValidityPredefinedValueType()
.duration(XmlTypeConverter.createDuration("P1M"))
.display(new DisplayType().label("ShoppingCartPanel.validity1Month")),
new ValidityPredefinedValueType()
.duration(XmlTypeConverter.createDuration("P1Y"))
.display(new DisplayType().label("ShoppingCartPanel.validity1Year"))
);

private static final String VALIDITY_CUSTOM_LENGTH = "validityCustomLength";

private static final String VALIDITY_CUSTOM_FOR_EACH = "validityCustomForEach";

public static final String STEP_ID = "shoppingCart";
private static final String ID_TABLE = "table";
private static final String ID_TABLE_HEADER_FRAGMENT = "tableHeaderFragment";
private static final String ID_TABLE_FOOTER_FRAGMENT = "tableFooterFragment";
private static final String ID_TABLE_BUTTON_COLUMN = "tableButtonColumn";
private static final String ID_CLEAR_CART = "clearCart";
private static final String ID_EDIT = "edit";
private static final String ID_REMOVE = "remove";
private static final String ID_COMMENT = "comment";
private static final String ID_VALIDITY = "validity";

public ShoppingCartPanel(IModel<RequestAccess> model) {
super(model);

initLayout();
}

@Override
protected void onBeforeRender() {
super.onBeforeRender();

DropDownChoice validity = (DropDownChoice) get(ID_VALIDITY);
validity.setRequired(isValidityRequired());

TextArea comment = (TextArea) get(ID_COMMENT);
comment.setRequired(isCommentRequired());
}

@Override
public IModel<List<Badge>> getTitleBadges() {
return Model.ofList(List.of(
Expand Down Expand Up @@ -111,6 +151,128 @@ protected Component createHeader(String headerId) {
}
};
add(table);

DropDownChoice validity = new DropDownChoice(ID_VALIDITY, createValidityOptions(), (IChoiceRenderer) object -> {
if (VALIDITY_CUSTOM_LENGTH.equals(object)) {
return getString("ShoppingCartPanel.validityCustomLength");
} else if (VALIDITY_CUSTOM_FOR_EACH.equals(object)) {
return getString("ShoppingCartPanel.validityCustomForEach");
}

if (!(object instanceof ValidityPredefinedValueType)) {
throw new IllegalArgumentException("Incorrect option type for validity dropdown choice: " + object);
}

ValidityPredefinedValueType value = (ValidityPredefinedValueType) object;
DisplayType display = value.getDisplay();
if (display != null && display.getLabel() != null) {
return WebComponentUtil.getTranslatedPolyString(display.getLabel());
}

return value.getDuration().toString();
});
validity.add(new VisibleBehaviour(() -> isValidityVisible()));
add(validity);

TextArea comment = new TextArea(ID_COMMENT, new PropertyModel(getModel(), "comment"));
comment.add(new VisibleBehaviour(() -> isCommentVisible()));
add(comment);
}

//todo use configuration to populate this
private IModel<List> createValidityOptions() {
return new LoadableModel<>(false) {

@Override
protected List load() {
List items = new ArrayList();

items.addAll(getValidityPeriods());

if (!isAllowOnlyGlobalSettings()) {
items.add(VALIDITY_CUSTOM_LENGTH);
items.add(VALIDITY_CUSTOM_FOR_EACH);
}

return items;
}
};
}

private boolean isAllowOnlyGlobalSettings() {
CheckoutType config = getCheckoutConfiguration();
if (config == null || config.getValidityConfiguration() == null) {
return false;
}

CheckoutValidityConfigurationType validityConfig = config.getValidityConfiguration();

return BooleanUtils.toBoolean(validityConfig.isAllowOnlyGlobalSettings());
}

private List<ValidityPredefinedValueType> getValidityPeriods() {
CheckoutType config = getCheckoutConfiguration();
if (config == null || config.getValidityConfiguration() == null) {
return DEFAULT_VALIDITY_PERIODS;
}

CheckoutValidityConfigurationType validityConfig = config.getValidityConfiguration();
List<ValidityPredefinedValueType> values = validityConfig.getPredefinedValue();
return values != null ? values : DEFAULT_VALIDITY_PERIODS;
}

private CheckoutType getCheckoutConfiguration() {
CompiledGuiProfile profile = getPageBase().getCompiledGuiProfile();
if (profile == null) {
return null;
}

AccessRequestType accessRequest = profile.getAccessRequest();
if (accessRequest == null) {
return null;
}

return accessRequest.getCheckout();
}

private boolean isValidityRequired() {
CheckoutType config = getCheckoutConfiguration();
if (config == null || config.getValidityConfiguration() == null) {
return false;
}

CheckoutValidityConfigurationType validity = config.getValidityConfiguration();
return validity != null && BooleanUtils.toBoolean(validity.isMandatory());
}

private boolean isCommentRequired() {
CheckoutType config = getCheckoutConfiguration();
if (config == null || config.getComment() == null) {
return false;
}

CheckoutCommentType comment = config.getComment();
return comment != null && BooleanUtils.toBoolean(comment.isMandatory());
}

private boolean isValidityVisible() {
CheckoutType config = getCheckoutConfiguration();
if (config == null || config.getValidityConfiguration() == null) {
return true;
}

CheckoutValidityConfigurationType validity = config.getValidityConfiguration();
return validity.getVisibility() == null || WebComponentUtil.getElementVisibility(validity.getVisibility());
}

private boolean isCommentVisible() {
CheckoutType config = getCheckoutConfiguration();
if (config == null || config.getComment() == null) {
return true;
}

CheckoutCommentType comment = config.getComment();
return comment.getVisibility() == null || WebComponentUtil.getElementVisibility(comment.getVisibility());
}

private List<IColumn> createColumns() {
Expand Down Expand Up @@ -160,7 +322,7 @@ public void onClick(AjaxRequestTarget target) {
}

private void clearCartPerformed(AjaxRequestTarget target) {
ConfirmationPanel content = new ConfirmationPanel(Popupable.ID_CONTENT, createStringResource("ShoppingCartPanel.clearCartConfirmMessage")) {
ConfirmationPanel content = new ConfirmationPanel(Popupable.ID_CONTENT, createStringResource("ShoppingCartPanel.clearCartConfirmMessage")) {

@Override
public void yesPerformed(AjaxRequestTarget target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@

<xsd:complexType name="CheckoutType">
<xsd:sequence>
<xsd:element name="comment" type="tns:CheckoutCommentType">
<xsd:element name="comment" type="tns:CheckoutCommentType" minOccurs="0">

</xsd:element>
<xsd:element name="validityConfiguration" type="tns:CheckoutValidityConfigurationType" minOccurs="0">
Expand Down

0 comments on commit e3957c5

Please sign in to comment.