Skip to content

Commit

Permalink
MID-7963 adding items to cart + toasts
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jun 7, 2022
1 parent 70ffec3 commit 2b384a8
Show file tree
Hide file tree
Showing 8 changed files with 192 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
/**
* Created by Viliam Repan (lazyman).
*/
public class CatalogTile extends Tile {
public class CatalogTile<T extends Serializable> extends Tile<T> {

private String logo;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@

import com.evolveum.midpoint.gui.api.component.BasePanel;

import java.io.Serializable;

/**
* Created by Viliam Repan (lazyman).
*/
public class CatalogTilePanel extends BasePanel<CatalogTile> {
public class CatalogTilePanel<T extends Serializable> extends BasePanel<CatalogTile<T>> {

private static final long serialVersionUID = 1L;

Expand All @@ -31,7 +33,7 @@ public class CatalogTilePanel extends BasePanel<CatalogTile> {
private static final String ID_ICON = "icon";
private static final String ID_TITLE = "title";

public CatalogTilePanel(String id, IModel<CatalogTile> model) {
public CatalogTilePanel(String id, IModel<CatalogTile<T>> model) {
super(id, model);

initLayout();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,31 @@
package com.evolveum.midpoint.gui.impl.page.self.requestAccess;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.*;

import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.api.context.EvaluatedAssignment;
import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule;
import com.evolveum.midpoint.model.api.context.ModelContext;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.DeltaSetTriple;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.web.page.self.PageAssignmentsList;
import com.evolveum.midpoint.web.page.self.dto.ConflictDto;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.security.MidPointAuthWebSession;
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Session;

import static com.evolveum.midpoint.xml.ns._public.common.common_3.PartialProcessingTypeType.SKIP;

/**
* Created by Viliam Repan (lazyman).
Expand Down Expand Up @@ -44,4 +64,54 @@ public List<AssignmentType> getShoppingCartAssignments() {
public void setShoppingCartAssignments(List<AssignmentType> shoppingCartAssignments) {
this.shoppingCartAssignments = shoppingCartAssignments;
}

public void computeConflicts() {
// MidPointApplication mp = MidPointApplication.get();
//
// SessionStorage storage = MidPointAuthWebSession.get().getSessionStorage();
//
// ObjectDelta<UserType> delta;
// OperationResult result = new OperationResult(OPERATION_PREVIEW_ASSIGNMENT_CONFLICTS);
// Task task = createSimpleTask(OPERATION_PREVIEW_ASSIGNMENT_CONFLICTS);
// Map<String, ConflictDto> conflictsMap = new HashMap<>();
// try {
// PrismObject<UserType> user = getTargetUser();
// delta = user.createModifyDelta();
//
// PrismContainerDefinition def = user.getDefinition().findContainerDefinition(UserType.F_ASSIGNMENT);
// handleAssignmentDeltas(delta, storage.getRoleCatalog().getAssignmentShoppingCart(), def);
//
// PartialProcessingOptionsType partialProcessing = new PartialProcessingOptionsType();
// partialProcessing.setInbound(SKIP);
// partialProcessing.setProjection(SKIP);
// ModelExecuteOptions recomputeOptions = ModelExecuteOptions
// .create(mp.getPrismContext())
// .partialProcessing(partialProcessing);
// ModelContext<UserType> modelContext = mp.getModelInteractionService()
// .previewChanges(MiscUtil.createCollection(delta), recomputeOptions, task, result);
// DeltaSetTriple<? extends EvaluatedAssignment> evaluatedAssignmentTriple =
// modelContext.getEvaluatedAssignmentTriple();
// if (evaluatedAssignmentTriple != null) {
// Collection<? extends EvaluatedAssignment> addedAssignments = evaluatedAssignmentTriple.getPlusSet();
// for (EvaluatedAssignment<UserType> evaluatedAssignment : addedAssignments) {
// for (EvaluatedPolicyRule policyRule : evaluatedAssignment.getAllTargetsPolicyRules()) {
// if (!policyRule.containsEnabledAction()) {
// continue;
// }
// // everything other than 'enforce' is a warning
// boolean isWarning = !policyRule.containsEnabledAction(EnforcementPolicyActionType.class);
// fillInConflictedObjects(evaluatedAssignment, policyRule.getAllTriggers(), isWarning, conflictsMap);
// }
// }
// } else if (!result.isSuccess() && StringUtils.isNotEmpty(getSubresultWarningMessages(result))) {
// getFeedbackMessages().warn(PageAssignmentsList.this,
// createStringResource("PageAssignmentsList.conflictsWarning").getString() + " " + getSubresultWarningMessages(result));
// conflictProblemExists = true;
// }
// } catch (Exception e) {
// LoggingUtils.logUnexpectedException(LOGGER, "Couldn't get assignments conflicts. Reason: ", e);
// error("Couldn't get assignments conflicts. Reason: " + e);
// }
// return new ArrayList<>(conflictsMap.values());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,38 +8,37 @@
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.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.SelectableListDataProvider;

import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
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 org.apache.wicket.util.string.Strings;

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.gui.impl.component.search.Search;
import com.evolveum.midpoint.gui.impl.component.search.SearchFactory;
import com.evolveum.midpoint.gui.impl.component.search.SearchPanel;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
import com.evolveum.midpoint.web.component.data.column.IconColumn;
import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;

/**
Expand Down Expand Up @@ -106,32 +105,65 @@ protected Search load() {
ObjectDataProvider provider = new ObjectDataProvider(this, searchModel);

List<IColumn> columns = createColumns();
TileTablePanel tilesTable = new TileTablePanel(ID_TILES, provider, columns) {
TileTablePanel<CatalogTile<SelectableBean<ObjectType>>, SelectableBean<ObjectType>> tilesTable = new TileTablePanel<>(ID_TILES, provider, columns) {

@Override
protected WebMarkupContainer createTableButtonToolbar(String id) {
TileTablePanel ttp = this;

Fragment fragment = new Fragment(id, ID_TABLE_FOOTER_FRAGMENT, RoleCatalogPanel.this);
fragment.add(new AjaxLink<>(ID_ADD_SELECTED) {

@Override
public void onClick(AjaxRequestTarget target) {
addSelectedPerformed(provider, ttp, target);
List<ObjectType> selected = provider.getSelectedData();
addItemsPerformed(target, selected);
}
});

fragment.add(new AjaxLink<>(ID_ADD_ALL) {

@Override
public void onClick(AjaxRequestTarget target) {
addAllPerformed(target);
addAllItemsPerformed(target);
}
});

return fragment;
}

@Override
protected CatalogTile createTileObject(SelectableBean<ObjectType> object) {
// todo improve
CatalogTile t = new CatalogTile("fas fa-building", WebComponentUtil.getName(object.getValue()));
t.setLogo("fas fa-utensils fa-2x");
t.setDescription(object.getValue().getDescription());
t.setValue(object);

return t;
}

@Override
protected Component createTile(String id, IModel<CatalogTile<SelectableBean<ObjectType>>> model) {
return new CatalogTilePanel(id, model) {

@Override
protected void onAdd(AjaxRequestTarget target) {
SelectableBean<ObjectType> bean = model.getObject().getValue();
addItemsPerformed(target, Arrays.asList(bean.getValue()));
}

@Override
protected void onDetails(AjaxRequestTarget target) {
SelectableBean<ObjectType> bean = model.getObject().getValue();
itemDetailsPerformed(target, bean.getValue());
}

@Override
protected void onClick(AjaxRequestTarget target) {
// no selection to be done
}
};
}

@Override
protected IModel<Search> createSearchModel() {
return searchModel;
Expand Down Expand Up @@ -163,30 +195,33 @@ protected DisplayType getIconDisplayType(IModel rowModel) {
});
columns.add(new PropertyColumn(createStringResource("ObjectType.name"), "value.name"));
columns.add(new PropertyColumn(createStringResource("ObjectType.description"), "value.description"));
columns.add(new LinkColumn(createStringResource("RoleCatalogPanel.details")) {

@Override
protected IModel createLinkModel(IModel rowModel) {
return createStringResource("RoleCatalogPanel.details");
}
columns.add(new AbstractColumn(null) {

@Override
public void onClick(IModel rowModel) {
onDetails(rowModel);
public void populateItem(Item item, String id, IModel rowModel) {
item.add(new AjaxLink<>(id, createStringResource("RoleCatalogPanel.details")) {

@Override
public void onClick(AjaxRequestTarget target) {
// itemDetailsPerformed(target, );
}
});
}
});

return columns;
}

protected void onDetails(IModel rowModel) {
private void itemDetailsPerformed(AjaxRequestTarget target, ObjectType object) {

}

protected void addSelectedPerformed(ObjectDataProvider provider, TileTablePanel tileTable, AjaxRequestTarget target) {
List<ObjectType> selected = provider.getSelectedData();
new Toast().cssClass("bg-success").title("funky").body("selected: " + selected.size()).show(target);
private void addAllItemsPerformed(AjaxRequestTarget target) {

}

private void addItemsPerformed(AjaxRequestTarget target, List<ObjectType> selected) {
RequestAccess requestAccess = getModelObject();
for (ObjectType object : selected) {
AssignmentType a = new AssignmentType()
Expand All @@ -196,10 +231,23 @@ protected void addSelectedPerformed(ObjectDataProvider provider, TileTablePanel

getPageBase().reloadShoppingCartIcon(target);
target.add(get(ID_TILES));
}

protected void addAllPerformed(AjaxRequestTarget target) {
String msg;
if (selected.size() > 1) {
msg = getString("RoleCatalogPanel.multipleAdded", selected.size());
} else {
String name = WebComponentUtil.getName(selected.get(0));
msg = getString("RoleCatalogPanel.singleAdded",
Strings.escapeMarkup(name, false, true));
}

new Toast()
.cssClass("bg-success m-3")
.title(getString("RoleCatalogPanel.itemAdded"))
.icon("fas fa-cart-shopping")
.autohide(true)
.delay(10_000)
.body(msg).show(target);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,11 @@ <h3 class="card-title">
</wicket:fragment>

<wicket:fragment wicket:id="tableButtonColumn">
<a class="btn btn-link" wicket:id="edit">
<i class="fas fa-pen-to-square mr-1"></i>
<wicket:message key="ShoppingCartPanel.edit"/>
<a class="btn btn-link" wicket:id="edit" wicket:message="title:ShoppingCartPanel.edit">
<i class="fas fa-pen-to-square"></i>
</a>
<a class="btn btn-link text-danger" wicket:id="remove">
<i class="fas fa-trash-can mr-1"></i>
<wicket:message key="ShoppingCartPanel.remove"/>
<a class="btn btn-link text-danger" wicket:id="remove" wicket:message="title:ShoppingCartPanel.remove">
<i class="fas fa-trash-can"></i>
</a>
</wicket:fragment>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ public String appendCssToWizard() {

private void initLayout() {
List<IColumn> columns = createColumns();
ISortableDataProvider provider = new ListDataProvider(this, () -> List.of(""));

ISortableDataProvider provider = new ListDataProvider(this, () -> getSession().getSessionStorage().getRequestAccess().getShoppingCartAssignments());
BoxedTablePanel table = new BoxedTablePanel(ID_TABLE, provider, columns) {

@Override
Expand Down Expand Up @@ -98,13 +99,13 @@ private List<IColumn> createColumns() {
// return null;
// }
// });
columns.add(new AbstractColumn(createStringResource("Access name")) {
columns.add(new AbstractColumn(createStringResource("ShoppingCartPanel.accessName")) {
@Override
public void populateItem(Item item, String id, IModel iModel) {
item.add(new Label(id, "asdf"));
}
});
columns.add(new AbstractColumn(createStringResource("Selected users")) {
columns.add(new AbstractColumn(createStringResource("ShoppingCartPanel.selectedUsers")) {
@Override
public void populateItem(Item item, String id, IModel model) {
item.add(new Label(id, "zxcv"));
Expand Down

0 comments on commit 2b384a8

Please sign in to comment.