Skip to content

Commit

Permalink
improving audit list page, table will be configurable same as user li…
Browse files Browse the repository at this point in the history
…st for example, work in progress
  • Loading branch information
1azyman committed Dec 19, 2022
1 parent 812f0f9 commit 459d574
Show file tree
Hide file tree
Showing 17 changed files with 712 additions and 705 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,10 @@
*/
package com.evolveum.midpoint.gui.api.component;

import java.util.*;

import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.impl.util.ObjectCollectionViewUtil;
import com.evolveum.midpoint.gui.impl.util.TableUtil;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.common.util.DefaultColumnUtils;

import com.evolveum.midpoint.prism.delta.ChangeType;
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.QNameUtil;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.web.component.*;

import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction;
import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;

import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.xml.namespace.QName;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -41,38 +22,54 @@
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.button.CsvDownloadButtonPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.AjaxCompositedIconButton;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIcon;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle;
import com.evolveum.midpoint.gui.impl.component.icon.LayeredIconCssStyle;
import com.evolveum.midpoint.gui.impl.util.ObjectCollectionViewUtil;
import com.evolveum.midpoint.gui.impl.util.TableUtil;
import com.evolveum.midpoint.model.api.AssignmentObjectRelation;
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.delta.ChangeType;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.AjaxIconButton;
import com.evolveum.midpoint.web.component.CompositedIconButtonDto;
import com.evolveum.midpoint.web.component.MultiFunctinalButtonDto;
import com.evolveum.midpoint.web.component.data.ISelectableDataProvider;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.PageImportObject;
import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.model.PropertyModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

/**
* @author katkav
Expand Down Expand Up @@ -128,7 +125,7 @@ protected IColumn<SelectableBean<O>, String> createCheckboxColumn() {
protected void newObjectPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation, CompiledObjectCollectionView collectionView) {
if (collectionView == null) {
collectionView = getObjectCollectionView();
}
}
try {
WebComponentUtil.initNewObjectWithReference(getPageBase(),
relation != null && CollectionUtils.isNotEmpty(relation.getObjectTypes()) ?
Expand All @@ -151,8 +148,8 @@ private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collect
PolyStringType tooltip = display != null ? display.getTooltip() : null;

builder.setBasicIcon(GuiDisplayTypeUtil.getIconCssClass(display), IconCssStyle.IN_ROW_STYLE)
.appendColorHtmlValue(GuiDisplayTypeUtil.getIconColor(display))
.setTitle(WebComponentUtil.getTranslatedPolyString(tooltip));
.appendColorHtmlValue(GuiDisplayTypeUtil.getIconColor(display))
.setTitle(WebComponentUtil.getTranslatedPolyString(tooltip));
// .appendLayerIcon(WebComponentUtil.createIconType(GuiStyleConstants.CLASS_PLUS_CIRCLE, "green"), IconCssStyle.BOTTOM_RIGHT_STYLE);

return builder.build();
Expand Down Expand Up @@ -225,7 +222,7 @@ protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRe
};

getPageBase().showMainPopup(buttonsPanel, target);
}
}
};
createNewObjectButton.add(new VisibleBehaviour(this::isCreateNewObjectEnabled));
createNewObjectButton.add(AttributeAppender.append("class", "btn btn-default btn-sm"));
Expand Down Expand Up @@ -291,20 +288,11 @@ protected MultiFunctinalButtonDto load() {

}

@Override
protected List<IColumn<SelectableBean<O>, String>> createDefaultColumns() {
GuiObjectListViewType defaultView = DefaultColumnUtils.getDefaultView(getType());
if (defaultView == null) {
return null;
}
return getViewColumnsTransformed(defaultView.getColumn());
}

private DisplayType getNewObjectButtonStandardDisplayType() {
if (isCollectionViewPanelForCompiledView()) {
CompiledObjectCollectionView view = getObjectCollectionView();
return GuiDisplayTypeUtil.getNewObjectDisplayTypeFromCollectionView(view, getPageBase());
}
}

String title = getTitleForNewObjectButton();
return GuiDisplayTypeUtil.createDisplayType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green", title);
Expand Down Expand Up @@ -482,7 +470,7 @@ public void deleteConfirmedPerformed(AjaxRequestTarget target, IModel<Selectable
return;
}

OperationResult result = new OperationResult(objects.size() == 1 ? OPERATION_DELETE_OBJECT: OPERATION_DELETE_OBJECTS);
OperationResult result = new OperationResult(objects.size() == 1 ? OPERATION_DELETE_OBJECT : OPERATION_DELETE_OBJECTS);
for (SelectableBean<O> object : objects) {
OperationResult subResult = result.createSubresult(OPERATION_DELETE_OBJECT);
try {
Expand Down Expand Up @@ -519,10 +507,11 @@ public ExecuteChangeOptionsDto getExecuteOptions() {
/**
* This method check selection in table. If selectedObject != null than it
* returns only this object.
*
* @return
*/
public List<SelectableBean<O>> isAnythingSelected(AjaxRequestTarget target, IModel<SelectableBean<O>> selectedObject) {
List<SelectableBean<O>> selectedObjects;
List<SelectableBean<O>> selectedObjects;
if (selectedObject != null) {
selectedObjects = new ArrayList<>();
selectedObjects.add(selectedObject.getObject());
Expand All @@ -536,13 +525,13 @@ protected String getNothingSelectedMessage() {
return null;
}

public IModel<String> getConfirmationMessageModel(ColumnMenuAction action, String actionName){
public IModel<String> getConfirmationMessageModel(ColumnMenuAction action, String actionName) {
if (action.getRowModel() == null) {
return createStringResource(getConfirmMessageKeyForMultiObject(),
actionName, getSelectedObjectsCount() );
actionName, getSelectedObjectsCount());
} else {
return createStringResource(getConfirmMessageKeyForSingleObject(),
actionName, ((ObjectType)((SelectableBean<?>)action.getRowModel().getObject()).getValue()).getName());
actionName, ((ObjectType) ((SelectableBean<?>) action.getRowModel().getObject()).getValue()).getName());
}
}

Expand All @@ -569,7 +558,7 @@ public void onClick(AjaxRequestTarget target) {
}

@Override
public IModel<String> getConfirmationMessageModel(){
public IModel<String> getConfirmationMessageModel() {
String actionName = createStringResource("MainObjectListPanel.message.deleteAction").getString();
return MainObjectListPanel.this.getConfirmationMessageModel((ColumnMenuAction) getAction(), actionName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,13 @@
*/
package com.evolveum.midpoint.gui.api.component;

import java.util.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;

import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.gui.impl.component.search.SearchFactory;
import com.evolveum.midpoint.gui.impl.component.search.Search;

import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.prism.query.ObjectOrdering;

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

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
Expand All @@ -29,8 +23,12 @@

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.gui.impl.component.search.SearchFactory;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectOrdering;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
Expand All @@ -39,8 +37,10 @@
import com.evolveum.midpoint.web.component.data.column.ObjectNameColumn;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.SerializableFunction;
import com.evolveum.midpoint.web.component.util.SerializableSupplier;
import com.evolveum.midpoint.web.session.PageStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

/**
* @author katkav
Expand Down Expand Up @@ -83,10 +83,9 @@ protected Search createSearch(Class<O> type) {
return SearchFactory.createSearch(type, collectionName, getPageBase());
}


protected final SelectableBeanObjectDataProvider<O> createSelectableBeanObjectDataProvider(SerializableSupplier<ObjectQuery> querySuplier,
SerializableFunction<SortParam<String>, List<ObjectOrdering>> orderingSuplier) {
SelectableBeanObjectDataProvider<O> provider = new SelectableBeanObjectDataProvider<O>(
SelectableBeanObjectDataProvider<O> provider = new SelectableBeanObjectDataProvider<>(
getPageBase(), getSearchModel(), null) {
private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -143,17 +142,14 @@ public void addPerformed(AjaxRequestTarget target, List<O> selected) {
}

@Override
protected boolean notContainsNameColumn(List<IColumn<SelectableBean<O>, String>> columns) {
for(IColumn<SelectableBean<O>, String> column : columns) {
if (column instanceof ObjectNameColumn) {
return false;
}
}
return true;
protected boolean notContainsNameColumn(@NotNull List<IColumn<SelectableBean<O>, String>> columns) {
return columns.stream().noneMatch(c -> c instanceof ObjectNameColumn);
}

@Override
protected IColumn<SelectableBean<O>, String> createNameColumn(IModel<String> displayModel, GuiObjectColumnType customColumn, ItemPath itemPath, ExpressionType expression) {
protected IColumn<SelectableBean<O>, String> createNameColumn(IModel<String> displayModel, GuiObjectColumnType customColumn, ExpressionType expression) {
ItemPath itemPath = getPath(customColumn);

return new ObjectNameColumn<>(displayModel == null ? createStringResource("ObjectType.name") : displayModel,
itemPath, expression, getPageBase(), itemPath == null) {
private static final long serialVersionUID = 1L;
Expand All @@ -175,7 +171,8 @@ protected boolean isObjectDetailsEnabled(IModel<SelectableBean<O>> rowModel) {
return true;
}

protected void objectDetailsPerformed(AjaxRequestTarget target, O object){}
protected void objectDetailsPerformed(AjaxRequestTarget target, O object) {
}

@Override
protected O getRowRealValue(SelectableBean<O> rowModelObject) {
Expand All @@ -192,6 +189,6 @@ protected IColumn<SelectableBean<O>, String> createIconColumn() {

@Override
public List<O> getSelectedRealObjects() {
return getSelectedObjects().stream().map(o -> o.getValue()).collect(Collectors.toList());
return getSelectedObjects().stream().map(SelectableBean::getValue).collect(Collectors.toList());
}
}

0 comments on commit 459d574

Please sign in to comment.