Search in sources :

Example 1 with TaskHandler

use of com.evolveum.midpoint.task.api.TaskHandler in project midpoint by Evolveum.

the class TaskBasicTabPanel method initLayout.

private void initLayout() {
    ItemPanelSettings settings = new ItemPanelSettingsBuilder().editabilityHandler(wrapper -> getTask().getHandlerUri() == null).build();
    TaskHandlerSelectorPanel handlerSelectorPanel = new TaskHandlerSelectorPanel(ID_HANDLER, PrismPropertyWrapperModel.fromContainerWrapper(getModel(), TaskType.F_HANDLER_URI), settings) {

        @Override
        protected void onUpdatePerformed(AjaxRequestTarget target) {
            String newHandlerUri = getTask().getHandlerUri();
            if (StringUtils.isBlank(newHandlerUri) || !newHandlerUri.startsWith("http://")) {
                LOGGER.trace("Nothing to do, handler still not set");
                return;
            }
            TaskHandler taskHandler = getPageBase().getTaskManager().getHandler(newHandlerUri);
            if (taskHandler == null) {
                LOGGER.trace("Nothing to do, cannot find TaskHandler for {}", newHandlerUri);
                return;
            }
            if (!WebComponentUtil.hasAnyArchetypeAssignment(getTask())) {
                String archetypeOid = taskHandler.getArchetypeOid(newHandlerUri);
                WebComponentUtil.addNewArchetype(TaskBasicTabPanel.this.getModelObject(), archetypeOid, target, getPageBase());
            }
            PrismObjectWrapperFactory<TaskType> 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);
            ctx.setDetailsPageTypeConfiguration(getDetailsPanelsConfiguration(getTask().asPrismObject()));
            try {
                wrapperFactory.updateWrapper(TaskBasicTabPanel.this.getModelObject(), ctx);
                // TODO ugly hack: after updateWrapper method is called, both previously set items (handlerUri and assignments)
                // are marked as NOT_CHANGED with the same value. We need to find a way how to force the ValueStatus
                // or change the mechanism for computing deltas. Probably only the first will work
                PrismPropertyWrapper<String> handlerWrapper = TaskBasicTabPanel.this.getModelObject().findProperty(ItemPath.create(TaskType.F_HANDLER_URI));
                handlerWrapper.getValue().setStatus(ValueStatus.ADDED);
                PrismContainerWrapper<AssignmentType> assignmentWrapper = TaskBasicTabPanel.this.getModelObject().findContainer(ItemPath.create(TaskType.F_ASSIGNMENT));
                for (PrismContainerValueWrapper<AssignmentType> assignmentWrapperValue : assignmentWrapper.getValues()) {
                    if (WebComponentUtil.isArchetypeAssignment(assignmentWrapperValue.getRealValue())) {
                        assignmentWrapperValue.setStatus(ValueStatus.ADDED);
                    }
                }
            } catch (SchemaException | IllegalArgumentException e) {
                LOGGER.error("Unexpected problem occurs during updating wrapper. Reason: {}", e.getMessage(), e);
            }
            updateHandlerPerformed(target);
        }
    };
    handlerSelectorPanel.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            return satisfyArchetypeAssignment();
        }
    });
    add(handlerSelectorPanel);
    ItemVisibilityHandler visibilityHandler = wrapper -> getBasicTabVisibility(wrapper.getPath());
    ItemEditabilityHandler editabilityHandler = wrapper -> getBasicTabEditability(wrapper.getPath());
    try {
        ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(visibilityHandler).editabilityHandler(editabilityHandler).mandatoryHandler(getItemMandatoryHandler());
        Panel panel = getPageBase().initItemPanel(ID_MAIN_PANEL, TaskType.COMPLEX_TYPE, getModel(), builder.build());
        add(panel);
    } catch (SchemaException e) {
        LOGGER.error("Cannot create task basic panel: {}", e.getMessage(), e);
        // TODO opertion result? localization?
        getSession().error("Cannot create task basic panel");
        throw new RestartResponseException(PageTasks.class);
    }
}
Also used : java.util(java.util) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) SchemaConstants(com.evolveum.midpoint.schema.constants.SchemaConstants) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ConfigurationException(com.evolveum.midpoint.util.exception.ConfigurationException) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) Trace(com.evolveum.midpoint.util.logging.Trace) ItemVisibility(com.evolveum.midpoint.web.component.prism.ItemVisibility) StringUtils(org.apache.commons.lang3.StringUtils) RestartResponseException(org.apache.wicket.RestartResponseException) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) IModel(org.apache.wicket.model.IModel) PrismPropertyWrapperModel(com.evolveum.midpoint.web.model.PrismPropertyWrapperModel) ValueStatus(com.evolveum.midpoint.web.component.prism.ValueStatus) WrapperContext(com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext) Component(org.apache.wicket.Component) WebComponentUtil(com.evolveum.midpoint.gui.api.util.WebComponentUtil) PrismObject(com.evolveum.midpoint.prism.PrismObject) Task(com.evolveum.midpoint.task.api.Task) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) Panel(org.apache.wicket.markup.html.panel.Panel) TaskHandler(com.evolveum.midpoint.task.api.TaskHandler) BasePanel(com.evolveum.midpoint.gui.api.component.BasePanel) ItemPanelSettings(com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings) PrismObjectWrapperFactory(com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory) com.evolveum.midpoint.gui.api.prism.wrapper(com.evolveum.midpoint.gui.api.prism.wrapper) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) ItemPanelSettingsBuilder(com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) Task(com.evolveum.midpoint.task.api.Task) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemPanelSettings(com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings) ItemPanelSettingsBuilder(com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder) WrapperContext(com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext) TaskHandler(com.evolveum.midpoint.task.api.TaskHandler) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) Panel(org.apache.wicket.markup.html.panel.Panel) BasePanel(com.evolveum.midpoint.gui.api.component.BasePanel) RestartResponseException(org.apache.wicket.RestartResponseException)

Aggregations

BasePanel (com.evolveum.midpoint.gui.api.component.BasePanel)1 PrismObjectWrapperFactory (com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory)1 WrapperContext (com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext)1 com.evolveum.midpoint.gui.api.prism.wrapper (com.evolveum.midpoint.gui.api.prism.wrapper)1 WebComponentUtil (com.evolveum.midpoint.gui.api.util.WebComponentUtil)1 ItemPanelSettings (com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings)1 ItemPanelSettingsBuilder (com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder)1 PrismObject (com.evolveum.midpoint.prism.PrismObject)1 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)1 SchemaConstants (com.evolveum.midpoint.schema.constants.SchemaConstants)1 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)1 Task (com.evolveum.midpoint.task.api.Task)1 TaskHandler (com.evolveum.midpoint.task.api.TaskHandler)1 ConfigurationException (com.evolveum.midpoint.util.exception.ConfigurationException)1 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)1 Trace (com.evolveum.midpoint.util.logging.Trace)1 TraceManager (com.evolveum.midpoint.util.logging.TraceManager)1 ItemVisibility (com.evolveum.midpoint.web.component.prism.ItemVisibility)1 ValueStatus (com.evolveum.midpoint.web.component.prism.ValueStatus)1 VisibleEnableBehaviour (com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour)1