Skip to content

Commit

Permalink
simulation ui, simulation result column actions
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 10, 2023
1 parent e88f8d6 commit f807604
Showing 1 changed file with 100 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,21 @@
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
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.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem;
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.page.admin.users.component.ExecuteChangeOptionsDto;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType;
Expand All @@ -41,6 +50,14 @@
*/
public class SimulationResultsPanel extends MainObjectListPanel<SimulationResultType> {

private static final long serialVersionUID = 1L;

private static final Trace LOGGER = TraceManager.getTrace(SimulationResultsPanel.class);

private static final String DOT_CLASS = SimulationResultsPanel.class.getName() + ".";
private static final String OPERATION_DELETE_OBJECTS = DOT_CLASS + "deleteObjects";
private static final String OPERATION_DELETE_OBJECT = DOT_CLASS + "deleteObject";

public SimulationResultsPanel(String id, ContainerPanelConfigurationType config) {
super(id, SimulationResultType.class, null, config);
}
Expand All @@ -67,7 +84,7 @@ protected List<Component> createToolbarButtonsList(String buttonId) {
protected List<InlineMenuItem> createInlineMenu() {
List<InlineMenuItem> items = new ArrayList<>();

items.add(new ButtonInlineMenuItem(createStringResource("list processed objects")) {
items.add(new ButtonInlineMenuItem(createStringResource("PageSimulationResultObjects.listObjects")) {
@Override
public CompositedIconBuilder getIconCompositedBuilder() {
return getDefaultCompositedIconBuilder("fa-solid fa-eye");
Expand All @@ -85,7 +102,7 @@ public void onClick(AjaxRequestTarget target) {
};
}
});
items.add(new ButtonInlineMenuItem(createStringResource("delete")) {
items.add(new ButtonInlineMenuItem(createStringResource("PageSimulationResultObjects.delete")) {

@Override
public CompositedIconBuilder getIconCompositedBuilder() {
Expand All @@ -94,20 +111,98 @@ public CompositedIconBuilder getIconCompositedBuilder() {

@Override
public InlineMenuItemAction initAction() {
return null;
return new ColumnMenuAction<SelectableBean<SimulationResultType>>() {

@Override
public void onClick(AjaxRequestTarget target) {
deleteConfirmedPerformed(target, getRowModel());
}
};
}

@Override
public IModel<String> getConfirmationMessageModel() {
return createConfirmationMessage((ColumnMenuAction) getAction(),
"SimulationResultsPanel.message.deleteResultActionSingle", "SimulationResultsPanel.message.deleteResultActionMulti");
}
});
items.add(new InlineMenuItem(createStringResource("Delete processed objects")) {
items.add(new InlineMenuItem(createStringResource("PageSimulationResultObjects.deleteObjects")) {

@Override
public InlineMenuItemAction initAction() {
return null;
return new ColumnMenuAction<SelectableBean<SimulationResultType>>() {

@Override
public void onClick(AjaxRequestTarget target) {
deleteResultObjectsConfirmedPerformed(target, getRowModel());
}
};
}

@Override
public IModel<String> getConfirmationMessageModel() {
return createConfirmationMessage((ColumnMenuAction<SelectableBean<SimulationResultType>>) getAction(),
"SimulationResultsPanel.message.deleteResultObjectsActionSingle",
"SimulationResultsPanel.message.deleteResultObjectsActionMulti");
}
});

return items;
}

private void deleteResultObjectsConfirmedPerformed(AjaxRequestTarget target, IModel<SelectableBean<SimulationResultType>> rowModel) {
List<SelectableBean<SimulationResultType>> objects = isAnythingSelected(target, rowModel);

if (objects.isEmpty()) {
return;
}

OperationResult result = new OperationResult(objects.size() == 1 ? OPERATION_DELETE_OBJECT : OPERATION_DELETE_OBJECTS);
for (SelectableBean<SimulationResultType> object : objects) {
OperationResult subResult = result.createSubresult(OPERATION_DELETE_OBJECT);
SimulationResultType simResult = object.getValue();

try {
Task task = getPageBase().createSimpleTask(OPERATION_DELETE_OBJECT);

ObjectDelta delta = getPrismContext().deltaFor(SimulationResultType.class)
.item(SimulationResultType.F_PROCESSED_OBJECT).replace()
.asObjectDelta(simResult.getOid());

ExecuteChangeOptionsDto executeOptions = getExecuteOptions();
ModelExecuteOptions options = executeOptions.createOptions(getPrismContext());
LOGGER.debug("Using options {}.", executeOptions);

getPageBase().getModelService()
.executeChanges(MiscUtil.createCollection(delta), options, task, subResult);
subResult.computeStatus();
} catch (Exception ex) {
String name = WebComponentUtil.getName(simResult);

subResult.recomputeStatus();
subResult.recordFatalError(getString("SimulationResultsPanel.message.deleteResultObjectsFailed", name), ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete processed objects for simulation result {}", ex, name);
}
}
result.computeStatusComposite();

getPageBase().showResult(result);
target.add(getFeedbackPanel());
refreshTable(target);
clearCache();
}

private IModel<String> createConfirmationMessage(ColumnMenuAction<SelectableBean<SimulationResultType>> action, String singleKey, String multiKey) {
return () -> {
IModel<SelectableBean<SimulationResultType>> result = action.getRowModel();
if (action.getRowModel() != null || getSelectedObjectsCount() == 1) {
return getString(singleKey, WebComponentUtil.getName(result.getObject().getValue()));
}

return getString(multiKey, getSelectedRealObjects());
};
}

@Override
protected List<IColumn<SelectableBean<SimulationResultType>, String>> createDefaultColumns() {
List<IColumn<SelectableBean<SimulationResultType>, String>> columns = super.createDefaultColumns();
Expand Down

0 comments on commit f807604

Please sign in to comment.