diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/PrismObjectWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/PrismObjectWrapper.java index f7c02623a4b..baf8b3ac34e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/PrismObjectWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/prism/PrismObjectWrapper.java @@ -18,7 +18,6 @@ */ public interface PrismObjectWrapper extends PrismContainerWrapper { -// List> getContainers(); ObjectDelta getObjectDelta() throws SchemaException; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactory.java index f5ea7696aab..1ddc6546578 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactory.java @@ -19,6 +19,8 @@ */ public interface PrismObjectWrapperFactory { - public PrismObjectWrapper createObjectWrapper(PrismObject object, ItemStatus status, WrapperContext context) throws SchemaException; + PrismObjectWrapper createObjectWrapper(PrismObject object, ItemStatus status, WrapperContext context) throws SchemaException; + + void updateWrapper(PrismObjectWrapper wrapper, WrapperContext context) throws SchemaException; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactoryImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactoryImpl.java index c4e66e1160a..00fce6063f1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactoryImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismObjectWrapperFactoryImpl.java @@ -74,6 +74,7 @@ public PrismObjectWrapper createObjectWrapper(PrismObject object, ItemStat context.setShowEmpty(ItemStatus.ADDED == status); objectWrapper.setExpanded(true); PrismContainerValueWrapper valueWrapper = createValueWrapper(objectWrapper, object.getValue(), ItemStatus.ADDED == status ? ValueStatus.ADDED : ValueStatus.NOT_CHANGED, context); + objectWrapper.getValues().clear(); objectWrapper.getValues().add(valueWrapper); registry.registerWrapperPanel(object.getDefinition().getTypeName(), PrismContainerPanel.class); @@ -81,6 +82,32 @@ public PrismObjectWrapper createObjectWrapper(PrismObject object, ItemStat } + public void updateWrapper(PrismObjectWrapper wrapper, WrapperContext context) throws SchemaException { + try { + applySecurityConstraints(wrapper.getObject(), context); + } catch (CommunicationException | ObjectNotFoundException | SecurityViolationException | ConfigurationException | ExpressionEvaluationException e) { + context.getResult().recordFatalError("Cannot create object wrapper for " + wrapper.getObject() + ". An error occurred: " + e.getMessage(), e); + throw new SchemaException(e.getMessage(), e); + } + if (context.getObjectStatus() == null) { + context.setObjectStatus(wrapper.getStatus()); + } + context.setObject(wrapper.getObject()); + + Collection virtualContainers = modelInteractionService.determineVirtualContainers(wrapper.getObject(), context.getTask(), context.getResult()); + context.setVirtualContainers(virtualContainers); + context.setShowEmpty(ItemStatus.ADDED == wrapper.getStatus()); + wrapper.setExpanded(true); + + wrapper.getValue().getItems().clear(); + + PrismContainerValueWrapper valueWrapper = createValueWrapper(wrapper, wrapper.getObject().getValue(), ItemStatus.ADDED == wrapper.getStatus() ? ValueStatus.ADDED : ValueStatus.NOT_CHANGED, context); + wrapper.getValues().clear(); + wrapper.getValues().add(valueWrapper); + + registry.registerWrapperPanel(wrapper.getObject().getDefinition().getTypeName(), PrismContainerPanel.class); + } + @Override public PrismObjectValueWrapper createContainerValueWrapper(PrismContainerWrapper objectWrapper, PrismContainerValue objectValue, ValueStatus status, WrapperContext context) { return new PrismObjectValueWrapperImpl((PrismObjectWrapper) objectWrapper, (PrismObjectValue) objectValue, status); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java index ca50354e917..47daa6b7d74 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskBasicTabPanel.java @@ -6,18 +6,32 @@ */ package com.evolveum.midpoint.web.page.admin.server; +import java.util.*; +import java.util.stream.Collectors; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.Component; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; + import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebPrismUtil; +import com.evolveum.midpoint.gui.impl.factory.PrismObjectWrapperFactory; +import com.evolveum.midpoint.gui.impl.factory.WrapperContext; import com.evolveum.midpoint.gui.impl.prism.*; -import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.schema.constants.ObjectTypes; 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.task.api.TaskHandler; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; @@ -29,23 +43,15 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemObjectsType; import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.wicket.Component; -import org.apache.wicket.RestartResponseException; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; - -import java.util.*; -import java.util.stream.Collectors; - public class TaskBasicTabPanel extends BasePanel> implements RefreshableTabPanel { private static final transient Trace LOGGER = TraceManager.getTrace(TaskBasicTabPanel.class); private static final String ID_MAIN_PANEL = "main"; private static final String ID_HANDLER = "handler"; + private static final String DOT_CLASS = TaskBasicTabPanel.class.getName() + "."; + private static final String OPERATION_UPDATE_WRAPPER = DOT_CLASS + "updateWrapper"; + public TaskBasicTabPanel(String id, IModel> model) { super(id, model); @@ -88,6 +94,15 @@ protected void onUpdatePerformed(AjaxRequestTarget target) { } } + PrismObjectWrapperFactory wrapperFactory = TaskBasicTabPanel.this.getPageBase().findObjectWrapperFactory(getTask().asPrismObject().getDefinition()); + Task task = getPageBase().createSimpleTask(OPERATION_UPDATE_WRAPPER); + OperationResult result = task.getResult(); + WrapperContext ctx = new WrapperContext(task, result); + try { + wrapperFactory.updateWrapper(TaskBasicTabPanel.this.getModelObject(), ctx); + } catch (SchemaException e) { + LOGGER.error("Unexpected problem occurs during updating wrapper. Reason: {}", e.getMessage(), e); + } updateHandlerPerformed(target); } @@ -147,6 +162,11 @@ private ItemVisibility getBasicTabVisibility(ItemPath path) { return ItemVisibility.AUTO; } + if (hasArchetypeAssignemnt() && !isUtilityArchetypeAssignemnt() && !isSystemArchetypeAssignemnt()) { + //Visibility defined in archetype definition + return ItemVisibility.AUTO; + } + List pathsToShow = new ArrayList<>(); if (taskHandler.endsWith("synchronization/task/delete/handler-3")) { pathsToShow = Arrays.asList(SchemaConstants.PATH_MODEL_EXTENSION_OBJECT_TYPE,