diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java index 84b331590f7..920543bd392 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java @@ -17,6 +17,7 @@ import java.util.*; import java.util.Objects; +import java.util.function.Supplier; import java.util.stream.Collectors; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; @@ -24,7 +25,6 @@ import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.schema.constants.ObjectTypes; 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.web.component.data.column.InlineMenuButtonColumn; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -66,6 +66,8 @@ import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; import org.jetbrains.annotations.NotNull; +import static java.util.Collections.singleton; + /** * @author katkav */ @@ -77,6 +79,8 @@ public abstract class ObjectListPanel extends BasePanel private static final String ID_TABLE = "table"; private static final Trace LOGGER = TraceManager.getTrace(ObjectListPanel.class); + private static final String DOT_CLASS = ObjectListPanel.class.getName(); + private static final String OPERATION_LOAD_CUSTOM_MENU_ITEMS = DOT_CLASS + "loadCustomMenuItems"; private ObjectTypes type; private PageBase parentPage; @@ -134,6 +138,7 @@ public int getSelectedObjectsCount(){ } @SuppressWarnings("unchecked") + @NotNull public List getSelectedObjects() { BaseSortableDataProvider> dataProvider = getDataProvider(); if (dataProvider instanceof SelectableBeanObjectDataProvider) { @@ -191,9 +196,12 @@ private BoxedTablePanel> createTable() { columns = initColumns(); } List menuItems = createInlineMenu(); - getCustomActions(menuItems); + if (menuItems == null) { + menuItems = new ArrayList<>(); + } + addCustomActions(menuItems, () -> getSelectedObjects()); - if (menuItems != null && menuItems.size() > 0) { + if (!menuItems.isEmpty()) { InlineMenuButtonColumn> actionsColumn = new InlineMenuButtonColumn<>(menuItems, parentPage); columns.add(actionsColumn); } @@ -399,6 +407,9 @@ public SelectableBean createDataObjectWrapper(O obj) { if (inlineMenu != null) { bean.getMenuItems().addAll(inlineMenu); } + if (obj.getOid() != null) { + addCustomActions(bean.getMenuItems(), () -> singleton(obj)); + } return bean; } @@ -610,17 +621,11 @@ public StringResourceModel createStringResource(String resourceKey, Object... ob protected abstract List createInlineMenu(); - protected void getCustomActions(List actionsList){ + protected void addCustomActions(@NotNull List actionsList, Supplier> objectsSupplier) { GuiObjectListViewType guiObjectListViewType = getGuiObjectListViewType(); - if (guiObjectListViewType != null && guiObjectListViewType.getAction() != null && - guiObjectListViewType.getAction().size() > 0){ - if (actionsList == null){ - actionsList = new ArrayList<>(); - } - List customActions = WebComponentUtil.createMenuItemsFromActions(guiObjectListViewType.getAction()); - if (customActions != null) { - actionsList.addAll(customActions); - } + if (guiObjectListViewType != null && !guiObjectListViewType.getAction().isEmpty()) { + actionsList.addAll(WebComponentUtil.createMenuItemsFromActions(guiObjectListViewType.getAction(), + OPERATION_LOAD_CUSTOM_MENU_ITEMS, parentPage, objectsSupplier)); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java index 1ee3ba01025..2d452a5241c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/PopupObjectListPanel.java @@ -17,6 +17,7 @@ import java.util.Collection; import java.util.List; +import java.util.function.Supplier; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.SelectorOptions; @@ -35,6 +36,7 @@ import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import org.apache.wicket.model.Model; +import org.jetbrains.annotations.NotNull; public abstract class PopupObjectListPanel extends ObjectListPanel { private static final long serialVersionUID = 1L; @@ -144,7 +146,7 @@ protected List createInlineMenu() { } @Override - protected void getCustomActions(List actionsList){ + protected void addCustomActions(@NotNull List actionsList, Supplier> objectsSupplier) { } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.html index b6f4fab8051..f4dd921a1cb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.html @@ -96,7 +96,12 @@ -