diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OpResult.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OpResult.java index 9713b1e932e..4104b877789 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OpResult.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OpResult.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.gui.api.component.result; +import com.evolveum.midpoint.gui.api.model.ReadOnlyModel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.Visitable; @@ -27,6 +28,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.Validate; +import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; @@ -59,7 +61,7 @@ public class OpResult implements Serializable, Visitable { private List subresults; private OpResult parent; private int count; - private String xml; + private IModel xml; private LocalizableMessage userFriendlyMessage; // we assume there is at most one background task created (TODO revisit this assumption) @@ -165,17 +167,29 @@ public static OpResult getOpResult(PageBase page, OperationResult result) { opResult.caseOid = caseOid; } + if (opResult.parent == null) { + opResult.xml = createXmlModel(result, page); + } + return opResult; + } + + private static IModel createXmlModel(OperationResult result, PageBase page) { try { OperationResultType resultType = result.createOperationResultType(); ObjectFactory of = new ObjectFactory(); - opResult.xml = page.getPrismContext().xmlSerializer().serialize(of.createOperationResult(resultType)); - } catch (SchemaException | RuntimeException ex) { + return new ReadOnlyModel(() -> { + try { + return page.getPrismContext().xmlSerializer().serialize(of.createOperationResult(resultType)); + } catch (SchemaException e) { + throw new TunnelException(e); + } + }); + } catch (RuntimeException ex) { String m = "Can't create xml: " + ex; // error(m); - opResult.xml = "" + StringEscapeUtils.escapeXml(m) + ""; + return Model.of("" + StringEscapeUtils.escapeXml(m) + ""); // throw ex; } - return opResult; } // This method should be called along with getOpResult for root operationResult. However, it might take some time, @@ -301,8 +315,12 @@ public int getCount() { return count; } + public boolean isParent() { + return parent == null; + } + public String getXml() { - return xml; + return xml.getObject(); } public String getBackgroundTaskOid() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java index 6f65b27b04b..35a8822a47e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java @@ -15,6 +15,8 @@ import java.util.List; import java.util.Locale; +import com.evolveum.midpoint.web.component.util.VisibleBehaviour; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.AttributeModifier; @@ -258,6 +260,7 @@ public File getObject() { } }); + downloadXml.add(new VisibleBehaviour(() -> getModelObject().isParent())); downloadXml.setDeleteAfterDownload(true); box.add(downloadXml); }