Skip to content

Commit

Permalink
header checkbox (select/deselect all) works again
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Mar 16, 2022
1 parent fafc69a commit 93a5b84
Show file tree
Hide file tree
Showing 14 changed files with 73 additions and 153 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -861,25 +861,11 @@ public List<PO> getSelectedObjects() {
if (row.getModelObject().isSelected()) {
objects.add(row.getModel().getObject());
}
// SelectableObjectModel<T> model = (SelectableObjectModel<T>) row.getModel();
// if (model.isSelected()) {
// objects.add((SelectableObjectModel<T>) row.getModel());
// }
});
return objects;
//
//
// ISelectableDataProvider dataProvider = getDataProvider();
// return dataProvider.getSelectedObjects();
}

public abstract List<C> getSelectedRealObjects();
// {
//
//// getTable().getsele
//// ISelectableDataProvider dataProvider = getDataProvider();
//// return dataProvider.getSelectedRealObjects();
// }

protected final Collection<SelectorOptions<GetOperationOptions>> createOptions() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,7 @@ protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelati
}

public List<PrismContainerValueWrapper<C>> getSelectedItems() {
BoxedTablePanel<PrismContainerValueWrapper<C>> itemsTable = getTable();
@SuppressWarnings("unchecked") ISelectableDataProvider<C, PrismContainerValueWrapper<C>> itemsProvider = (ISelectableDataProvider<C, PrismContainerValueWrapper<C>>) itemsTable.
getDataTable().getDataProvider();
return itemsProvider.getSelectedObjects();
return getSelectedObjects();
}

public void reloadSavePreviewButtons(AjaxRequestTarget target){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

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

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
Expand Down Expand Up @@ -60,15 +57,14 @@
import com.evolveum.midpoint.gui.impl.prism.panel.ShadowPanel;
import com.evolveum.midpoint.model.api.AssignmentObjectRelation;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.ResourceShadowDiscriminator;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
Expand All @@ -78,6 +74,7 @@
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel;
import com.evolveum.midpoint.web.component.dialog.DeleteConfirmationPanel;
import com.evolveum.midpoint.web.component.dialog.Popupable;
import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
Expand Down Expand Up @@ -193,6 +190,43 @@ protected List<IColumn<PrismContainerValueWrapper<ShadowType>, String>> createDe
return initBasicColumns();
}

@Override
protected IColumn<PrismContainerValueWrapper<ShadowType>, String> createNameColumn(IModel<String> displayModel, GuiObjectColumnType customColumn, ItemPath itemPath, ExpressionType expression) {
IModel<PrismContainerDefinition<ShadowType>> shadowDef = Model.of(getShadowDefinition());
return new PrismPropertyWrapperColumn<ShadowType, String>(shadowDef, ShadowType.F_NAME, ColumnType.LINK, getPageBase()) {
private static final long serialVersionUID = 1L;

@Override
protected void onClick(AjaxRequestTarget target, IModel<PrismContainerValueWrapper<ShadowType>> rowModel) {
getMultivalueContainerListPanel().itemDetailsPerformed(target, rowModel);
target.add(getPageBase().getFeedbackPanel());
}
};
}

@Override
protected IColumn<PrismContainerValueWrapper<ShadowType>, String> createIconColumn() {
return new CompositedIconColumn<>(Model.of("")) {

private static final long serialVersionUID = 1L;

@Override
protected CompositedIcon getCompositedIcon(IModel<PrismContainerValueWrapper<ShadowType>> rowModel) {
if (rowModel == null || rowModel.getObject() == null || rowModel.getObject().getRealValue() == null) {
return new CompositedIconBuilder().build();
}
ShadowType shadow = createShadowType(rowModel);
return WebComponentUtil.createAccountIcon(shadow, getPageBase(), true);
}

};
}

@Override
protected IColumn<PrismContainerValueWrapper<ShadowType>, String> createCheckboxColumn() {
return new CheckBoxHeaderColumn<>();
}

@Override
protected List<InlineMenuItem> createInlineMenu() {
return createShadowMenu();
Expand Down Expand Up @@ -439,36 +473,13 @@ private IModel<ShadowWrapper> getParentModel(IModel<PrismContainerValueWrapper<S
return new PropertyModel<>(model, "parent");
}


private List<IColumn<PrismContainerValueWrapper<ShadowType>, String>> initBasicColumns() {

IModel<PrismContainerDefinition<ShadowType>> shadowDef = Model.of(getShadowDefinition());

List<IColumn<PrismContainerValueWrapper<ShadowType>, String>> columns = new ArrayList<>();
columns.add(new CheckBoxHeaderColumn<>());
columns.add(new CompositedIconColumn<>(Model.of("")) {

private static final long serialVersionUID = 1L;

@Override
protected CompositedIcon getCompositedIcon(IModel<PrismContainerValueWrapper<ShadowType>> rowModel) {
if (rowModel == null || rowModel.getObject() == null || rowModel.getObject().getRealValue() == null) {
return new CompositedIconBuilder().build();
}
ShadowType shadow = createShadowType(rowModel);
return WebComponentUtil.createAccountIcon(shadow, getPageBase(), true);
}

});

columns.add(new PrismPropertyWrapperColumn<ShadowType, String>(shadowDef, ShadowType.F_NAME, ColumnType.LINK, getPageBase()) {
private static final long serialVersionUID = 1L;

@Override
protected void onClick(AjaxRequestTarget target, IModel<PrismContainerValueWrapper<ShadowType>> rowModel) {
getMultivalueContainerListPanel().itemDetailsPerformed(target, rowModel);
target.add(getPageBase().getFeedbackPanel());
}
});
columns.add(new PrismReferenceWrapperColumn<>(shadowDef, ShadowType.F_RESOURCE_REF, ColumnType.STRING, getPageBase()));
columns.add(new PrismPropertyWrapperColumn<ShadowType, String>(shadowDef, ShadowType.F_OBJECT_CLASS, ColumnType.STRING, getPageBase()));
columns.add(new PrismPropertyWrapperColumn<ShadowType, String>(shadowDef, ShadowType.F_KIND, ColumnType.STRING, getPageBase()) {
Expand Down Expand Up @@ -747,7 +758,7 @@ public InlineMenuItemAction initAction() {
@Override
public void onClick(AjaxRequestTarget target) {
getMultivalueContainerListPanel().editItemPerformed(target,
getRowModel(), getMultivalueContainerListPanel().getSelectedItems());
getRowModel(), getMultivalueContainerListPanel().getSelectedObjects());
target.add(getPageBase().getFeedbackPanel());
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ public InlineMenuItemAction initAction() {

@Override
public void onClick(AjaxRequestTarget target) {
editItemPerformed(target, getRowModel(), getSelectedItems());
editItemPerformed(target, getRowModel(), getSelectedObjects());
target.add(getFeedbackPanel());
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public InlineMenuItemAction initAction() {
@Override
public void onClick(AjaxRequestTarget target) {
getMultivalueContainerListPanel().editItemPerformed(target, getRowModel(),
getMultivalueContainerListPanel().getSelectedItems());
getMultivalueContainerListPanel().getSelectedObjects());
target.add(getMultivalueContainerListPanel().getFeedbackPanel());
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,5 @@

public interface ISelectableDataProvider<O, S> extends ISortableDataProvider<S, String> {

@NotNull
List<S> getSelectedObjects();

@NotNull
List<O> getSelectedRealObjects();

void setQuery(ObjectQuery query);
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,29 +81,6 @@ public void clearSelectedObjects() {
selected.clear();
}

@Override
public List<SelectableBean<C>> getSelectedObjects() {
preprocessSelectedDataInternal();
List<SelectableBean<C>> ret = new ArrayList<>();
for (SelectableBean<C> selectable : super.getAvailableData()) {
if (selectable.isSelected()) {
(ret).add(selectable);
}
}
return ret;
}

@Override
public @NotNull List<C> getSelectedRealObjects() {
preprocessSelectedDataInternal();
for (SelectableBean<C> selectable : super.getAvailableData()) {
if (selectable.isSelected() && selectable.getValue() != null) {
((Set) selected).add(selectable.getValue());
}
}
return new ArrayList<>(selected);
}

private void preprocessSelectedData() {
preprocessSelectedDataInternal();
getAvailableData().clear();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@

import com.evolveum.midpoint.gui.impl.model.SelectableObjectModel;

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

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

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
Expand Down Expand Up @@ -100,37 +104,24 @@ protected void onUpdateHeader(AjaxRequestTarget target, boolean selected, DataTa
}

List<IModel<T>> objects = new ArrayList<>();
table.visitChildren(SelectableDataTable.SelectableRowItem.class, new IVisitor<SelectableDataTable.SelectableRowItem, Void>() {

@Override
public void component(SelectableDataTable.SelectableRowItem row, IVisit<Void> visit) {
objects.add(row.getModel());
}
});
table.visitChildren(SelectableDataTable.SelectableRowItem.class,
(IVisitor<SelectableDataTable.SelectableRowItem, Void>) (row, visit) -> objects.add(row.getModel()));

//update selected flag in model dto objects based on select all header state
BaseSortableDataProvider baseProvider = (BaseSortableDataProvider) provider;
// List<T> objects = new ArrayList<>();//baseProvider.getAvailableData();
for (IModel<T> object : objects) {
if (object instanceof SelectableObjectModel) {
T modelObject = object.getObject();

if (modelObject instanceof SelectableRow) {
((SelectableRow<?>) modelObject).setSelected(selected);
} else if (modelObject instanceof SelectableObjectModel) { //TODO is this needed?
((SelectableObjectModel<?>) object).setSelected(selected);
} else if (object instanceof Selectable) {
Selectable selectable = (Selectable) object;
selectable.setSelected(selected);
} else if (object instanceof PrismContainerValueWrapper){
PrismContainerValueWrapper valueWrapper = (PrismContainerValueWrapper) object;
valueWrapper.setSelected(selected);
}
}

table.visitChildren(SelectableDataTable.SelectableRowItem.class, new IVisitor<SelectableDataTable.SelectableRowItem, Void>() {

@Override
public void component(SelectableDataTable.SelectableRowItem row, IVisit<Void> visit) {
if (row.getOutputMarkupId()) {
//we skip rows that doesn't have outputMarkupId set to true (it would fail)
target.add(row);
}
table.visitChildren(SelectableDataTable.SelectableRowItem.class, (IVisitor<SelectableDataTable.SelectableRowItem, Void>) (row, visit) -> {
if (row.getOutputMarkupId()) {
//we skip rows that doesn't have outputMarkupId set to true (it would fail)
target.add(row);
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import java.util.Iterator;
import java.util.List;

import com.evolveum.midpoint.web.component.data.SelectableDataTable;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
Expand Down Expand Up @@ -40,6 +42,8 @@
import com.evolveum.midpoint.web.component.util.SelectableListDataProvider;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

import org.apache.wicket.util.visit.IVisitor;

/**
* @author lskublik
*/
Expand Down Expand Up @@ -134,8 +138,13 @@ public void onClick(AjaxRequestTarget target) {

private void performSelectedColumns(BoxedTablePanel<SelectableBean<Integer>> table) {
exportedColumnsIndex.clear();
List<Integer> availableData = ((SelectableListDataProvider) table.getDataTable().getDataProvider()).getSelectedRealObjects();
exportedColumnsIndex.addAll(availableData);

table.getDataTable().visitChildren(SelectableDataTable.SelectableRowItem.class, (IVisitor<SelectableDataTable.SelectableRowItem<SelectableBean<Integer>>, Void>) (row, visit) -> {
if (row.getModelObject().isSelected()) {
exportedColumnsIndex.add(row.getModelObject().getValue());
}
});
// exportedColumnsIndex.addAll(availableData);
}

private IModel<String> getWarningMessageModel() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,4 @@ protected int internalSize() {
return count;
}

@Override
public List<PrismContainerValueWrapper<C>> getSelectedObjects() {
return getAvailableData().stream().filter(a -> a.isSelected()).collect(Collectors.toList());
}

@Override
public @NotNull List<C> getSelectedRealObjects() {
return getAvailableData().stream().filter(a -> a.isSelected()).map(w -> w.getRealValue()).collect(Collectors.toList());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ private List<SelectableBean<F>> getObjectsToActOn(AjaxRequestTarget target, IMod
return Collections.singletonList(selectedObject.getObject());
} else {
List<SelectableBean<F>> objects;
objects = focusListComponent.isAnythingSelected(target, selectedObject); //getSelectedRealObjects();
objects = focusListComponent.isAnythingSelected(target, selectedObject);
if (objects.isEmpty()) {
parentPage.warn(parentPage.getString("FocusListInlineMenuHelper.message.nothingSelected"));
target.add(parentPage.getFeedbackPanel());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,15 +116,6 @@ protected int internalSize() {
return list.size();
}

@Override
public List<PrismContainerValueWrapper<C>> getSelectedObjects() {
return getAvailableData().stream().filter(a -> a.isSelected()).collect(Collectors.toList());
}

@Override
public @NotNull List<C> getSelectedRealObjects() {
return getAvailableData().stream().filter(a -> a.isSelected()).map(w -> w.getRealValue()).collect(Collectors.toList());
}

protected List<PrismContainerValueWrapper<C>> searchThroughList() {
List<PrismContainerValueWrapper<C>> list = model.getObject();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,31 +113,4 @@ protected int internalSize() {
return list.size();
}

@Override
public List<T> getSelectedRealObjects() {
List<T> allSelected = new ArrayList<>();
for (Serializable s : super.getAvailableData()) {
if (s instanceof Selectable) {
Selectable<T> selectable = (Selectable<T>) s;
if (selectable.isSelected() && selectable.getValue() != null) {
allSelected.add(selectable.getValue());
}
}
}
return allSelected;
}

@Override
public @NotNull List<W> getSelectedObjects() {
List<W> allSelected = new ArrayList<>();
for (Serializable s : super.getAvailableData()) {
if (s instanceof Selectable) {
Selectable selectable = (Selectable) s;
if (selectable.isSelected()) {
allSelected.add((W)selectable);
}
}
}
return allSelected;
}
}

0 comments on commit 93a5b84

Please sign in to comment.