From 27e57f7caf3fadd879fe08c2e9e9905d0ff3d2b0 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Wed, 25 Mar 2020 07:11:08 +0100 Subject: [PATCH] task page visibility improvements, new panel for ExecuteScriptType, fix for CleanupTaskHandler.getArchetypeOid() --- .../gui/api/util/WebComponentUtil.java | 24 + .../gui/impl/factory/ExecuteScriptModel.java | 67 +++ .../factory/ExecuteScriptWrapperFactory.java | 44 ++ .../PrismObjectWrapperFactoryImpl.java | 1 - .../page/admin/PageAdminObjectDetails.java | 19 +- .../web/page/admin/server/PageTask.java | 22 + .../page/admin/server/TaskBasicTabPanel.java | 57 +- .../web/page/admin/server/TaskMainPanel.java | 100 ++-- .../page/admin/server/TaskTabsVisibility.java | 556 ++++++++++-------- .../impl/cleanup/CleanUpTaskHandler.java | 2 +- 10 files changed, 545 insertions(+), 347 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptModel.java create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptWrapperFactory.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index 69cb1c4b1e2..2daaa4e3ebe 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -4540,10 +4540,34 @@ public static Class resolveSelfPage() { return null; } + public static boolean hasAnyArchetypeAssignemnt(AH assignmentHolder) { + if (assignmentHolder.getAssignment() == null) { + return false; + } + List archetypeAssignments = assignmentHolder.getAssignment() + .stream() + .filter(assignmentType -> WebComponentUtil.isArchetypeAssignment(assignmentType)).collect(Collectors.toList()); + return CollectionUtils.isNotEmpty(archetypeAssignments); + } + public static boolean isArchetypeAssignment(AssignmentType assignmentType) { if (assignmentType.getTargetRef() == null) { return false; } return QNameUtil.match(assignmentType.getTargetRef().getType(), ArchetypeType.COMPLEX_TYPE); } + + + public static boolean hasArchetypeAssignment(AH assignmentHolder, String archetypeOid) { + if (assignmentHolder.getAssignment() == null) { + return false; + } + List archetypeAssignments = assignmentHolder.getAssignment() + .stream() + .filter(assignmentType -> WebComponentUtil.isArchetypeAssignment(assignmentType) + && archetypeOid.equals(assignmentType.getTargetRef().getOid())) + .collect(Collectors.toList()); + return CollectionUtils.isNotEmpty(archetypeAssignments); + } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptModel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptModel.java new file mode 100644 index 00000000000..7b15f07184e --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptModel.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ + +package com.evolveum.midpoint.gui.impl.factory; + +import org.apache.commons.lang3.StringUtils; +import org.apache.wicket.ThreadContext; +import org.apache.wicket.model.IModel; + +import com.evolveum.midpoint.gui.api.util.ModelServiceLocator; +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.xml.ns._public.model.scripting_3.ExecuteScriptType; + +public class ExecuteScriptModel implements IModel { + + private static final transient Trace LOGGER = TraceManager.getTrace(ExecuteScriptModel.class); + + private IModel baseModel; + private ModelServiceLocator locator; + + public ExecuteScriptModel(IModel model, ModelServiceLocator locator) { + this.baseModel = model; + this.locator = locator; + } + + + @Override + public String getObject() { + try { + ExecuteScriptType value = baseModel.getObject(); + if (value == null) { + return null; + } + + return locator.getPrismContext().xmlSerializer().serializeRealValue(value); + } catch (Exception e) { + // TODO handle!!!! + LoggingUtils.logUnexpectedException(LOGGER, "Cannot serialize script", e); + ThreadContext.getSession().error("Cannot serialize script: " + e.getMessage()); +// getSession().error("Cannot serialize filter"); + } + return null; + } + + @Override + public void setObject(String object) { + if (StringUtils.isBlank(object)) { + return; + } + + try { + ExecuteScriptType script = locator.getPrismContext().parserFor(object).parseRealValue(ExecuteScriptType.class); + baseModel.setObject(script); + } catch (Exception e) { + // TODO handle!!!! + LoggingUtils.logUnexpectedException(LOGGER, "Cannot parse script", e); + ThreadContext.getSession().error("Cannot parse script: " + e.getMessage()); +// getSession().error("Cannot parse filter"); + } + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptWrapperFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptWrapperFactory.java new file mode 100644 index 00000000000..f6c6419ad2a --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ExecuteScriptWrapperFactory.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ + +package com.evolveum.midpoint.gui.impl.factory; + +import org.apache.wicket.markup.html.panel.Panel; + +import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; +import com.evolveum.midpoint.gui.api.prism.ItemWrapper; +import com.evolveum.midpoint.util.QNameUtil; +import com.evolveum.midpoint.web.component.input.TextAreaPanel; +import com.evolveum.midpoint.xml.ns._public.model.scripting_3.ExecuteScriptType; + +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class ExecuteScriptWrapperFactory extends AbstractGuiComponentFactory { + + @PostConstruct + public void register() { + getRegistry().addToRegistry(this); + } + + @Override + public boolean match(IW wrapper) { + return QNameUtil.match(ExecuteScriptType.COMPLEX_TYPE, wrapper.getTypeName()); + } + + @Override + public Integer getOrder() { + return super.getOrder() - 1; + } + + @Override + protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + return new TextAreaPanel<>(panelCtx.getComponentId(), new ExecuteScriptModel(panelCtx.getRealValueModel(), panelCtx.getPageBase()), 100); + } +} 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 00fce6063f1..6f00ede7237 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,7 +74,6 @@ 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); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java index 9324d2b5e47..cc82b6bab47 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java @@ -400,7 +400,12 @@ public boolean isRefreshEnabled() { return false; } - public void refresh(AjaxRequestTarget target) { + public void refresh(AjaxRequestTarget target) { + refresh(target, true); + } + + public void refresh(AjaxRequestTarget target, boolean soft) { + if (!isAdd()) { getObjectModel().reset(); } @@ -408,12 +413,16 @@ public void refresh(AjaxRequestTarget target) { target.add(getOperationalButtonsPanel()); target.add(getFeedbackPanel()); - for (Component component : getMainPanel().getTabbedPanel()) { - if (component instanceof RefreshableTabPanel) { - for (Component c : ((RefreshableTabPanel) component).getComponentsToUpdate()) { - target.add(c); + if (soft) { + for (Component component : getMainPanel().getTabbedPanel()) { + if (component instanceof RefreshableTabPanel) { + for (Component c : ((RefreshableTabPanel) component).getComponentsToUpdate()) { + target.add(c); + } } } + } else { + target.add(getMainPanel().getTabbedPanel()); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java index 5314b297b71..ccc9d7a0db5 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTask.java @@ -88,6 +88,8 @@ public class PageTask extends PageAdminObjectDetails implements Refres private Boolean refreshEnabled; + private TaskTabsVisibility taskTabsVisibility; + public PageTask() { initialize(null); } @@ -541,6 +543,8 @@ private String createResumePauseButtonLabel() { @Override protected AbstractObjectMainPanel createMainPanel(String id) { + taskTabsVisibility = new TaskTabsVisibility(); + taskTabsVisibility.computeAll(this, getObjectWrapper()); return new TaskMainPanel(id, getObjectModel(), this); } @@ -575,4 +579,22 @@ public boolean isRefreshEnabled() { return refreshEnabled; } + + @Override + public void refresh(AjaxRequestTarget target) { + TaskTabsVisibility taskTabsVisibilityNew = new TaskTabsVisibility(); + taskTabsVisibilityNew.computeAll(this, getObjectWrapper()); + + boolean soft = false; + if (taskTabsVisibilityNew.equals(taskTabsVisibility)) { + soft = true; + } + + taskTabsVisibility = taskTabsVisibilityNew; + super.refresh(target, soft); + } + + public TaskTabsVisibility getTaskTabVisibilty() { + return taskTabsVisibility; + } } 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 47daa6b7d74..43ecee1e169 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 @@ -7,9 +7,7 @@ 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; @@ -80,7 +78,7 @@ protected void onUpdatePerformed(AjaxRequestTarget target) { return; } - if (!hasArchetypeAssignemnt()) { + if (!WebComponentUtil.hasAnyArchetypeAssignemnt(getTask())) { try { PrismContainerWrapper archetypeAssignment = TaskBasicTabPanel.this.getModelObject().findContainer(TaskType.F_ASSIGNMENT); PrismContainerValue archetypeAssignmentValue = archetypeAssignment.getItem().createNewValue(); @@ -111,7 +109,7 @@ protected void onUpdatePerformed(AjaxRequestTarget target) { @Override public boolean isVisible() { - return !hasArchetypeAssignemnt() || isSystemArchetypeAssignemnt() || isUtilityArchetypeAssignemnt(); + return satisfyArchetypeAssignment(); } }); @@ -136,9 +134,9 @@ public boolean isVisible() { } private ItemVisibility getBasicTabVisibility(ItemPath path) { - if (ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_CLEANUP_POLICIES).equivalent(path)) { - return ItemVisibility.HIDDEN; - } +// if (ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_CLEANUP_POLICIES).equivalent(path)) { +// return ItemVisibility.HIDDEN; +// } if (TaskType.F_SUBTASK_REF.equivalent(path)) { return ItemVisibility.HIDDEN; @@ -162,7 +160,7 @@ private ItemVisibility getBasicTabVisibility(ItemPath path) { return ItemVisibility.AUTO; } - if (hasArchetypeAssignemnt() && !isUtilityArchetypeAssignemnt() && !isSystemArchetypeAssignemnt()) { + if (!satisfyArchetypeAssignment()) { //Visibility defined in archetype definition return ItemVisibility.AUTO; } @@ -253,7 +251,7 @@ private boolean getBasicTabEditability(ItemPath path) { return false; } - if ((!hasArchetypeAssignemnt() || isSystemArchetypeAssignemnt() || isUtilityArchetypeAssignemnt()) && getTask().getHandlerUri() == null) { + if (satisfyArchetypeAssignment() && getTask().getHandlerUri() == null) { return false; } @@ -273,6 +271,12 @@ private boolean getBasicTabEditability(ItemPath path) { } + private boolean satisfyArchetypeAssignment() { + return !WebComponentUtil.hasAnyArchetypeAssignemnt(getTask()) + || WebComponentUtil.hasArchetypeAssignment(getTask(), SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value()) + || WebComponentUtil.hasArchetypeAssignment(getTask(), SystemObjectsType.ARCHETYPE_UTILITY_TASK.value()); + } + private ItemMandatoryHandler getItemMandatoryHandler() { return itemWrapper -> { if (TaskType.F_RECURRENCE.equivalent(itemWrapper.getPath())) { @@ -282,42 +286,7 @@ private ItemMandatoryHandler getItemMandatoryHandler() { }; } - private boolean hasArchetypeAssignemnt() { - TaskType task = getTask(); - if (task.getAssignment() == null) { - return false; - } - List archetypeAssignments = task.getAssignment() - .stream() - .filter(assignmentType -> WebComponentUtil.isArchetypeAssignment(assignmentType)).collect(Collectors.toList()); - return CollectionUtils.isNotEmpty(archetypeAssignments); - } - - private boolean isSystemArchetypeAssignemnt() { - TaskType task = getTask(); - if (task.getAssignment() == null) { - return false; - } - List archetypeAssignments = task.getAssignment() - .stream() - .filter(assignmentType -> WebComponentUtil.isArchetypeAssignment(assignmentType) - && SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value().equals(assignmentType.getTargetRef().getOid())) - .collect(Collectors.toList()); - return CollectionUtils.isNotEmpty(archetypeAssignments); - } - private boolean isUtilityArchetypeAssignemnt() { - TaskType task = getTask(); - if (task.getAssignment() == null) { - return false; - } - List archetypeAssignments = task.getAssignment() - .stream() - .filter(assignmentType -> WebComponentUtil.isArchetypeAssignment(assignmentType) - && SystemObjectsType.ARCHETYPE_UTILITY_TASK.value().equals(assignmentType.getTargetRef().getOid())) - .collect(Collectors.toList()); - return CollectionUtils.isNotEmpty(archetypeAssignments); - } @Override public Collection getComponentsToUpdate() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java index 06c0e34e401..90a4aed155d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskMainPanel.java @@ -33,6 +33,8 @@ import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails; import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskWorkManagementType; + import org.apache.commons.collections4.CollectionUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.tabs.ITab; @@ -72,17 +74,17 @@ protected void initLayoutButtons(PageAdminObjectDetails parentPage) { @Override protected List createTabs(PageAdminObjectDetails parentPage) { List tabs = new ArrayList<>(); - TaskTabsVisibility taskTabsVisibility = new TaskTabsVisibility(); - taskTabsVisibility.computeAll((PageTask) parentPage, getObjectWrapper()); + + PageTask parentTaskPage = (PageTask) parentPage; ObjectTabVisibleBehavior basicTabVisibility = new ObjectTabVisibleBehavior - (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_TASK_TAB_BASIC_URL, (PageTask) parentPage){ + (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_TASK_TAB_BASIC_URL, parentTaskPage){ private static final long serialVersionUID = 1L; @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isBasicVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isBasicVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.basic.title"), basicTabVisibility) { @@ -109,7 +111,7 @@ protected void updateHandlerPerformed(AjaxRequestTarget target) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isSchedulingVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isSchedulingVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.schedule.title"), scheduleTabVisibility) { @@ -129,7 +131,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isWorkManagementVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isWorkManagementVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.workManagement.title"), workManagementTabVisibility) { @@ -137,33 +139,33 @@ public boolean isVisible(){ @Override public WebMarkupContainer createPanel(String panelId) { - ItemVisibilityHandler visibilityHandler = wrapper -> ItemVisibility.AUTO; + ItemVisibilityHandler visibilityHandler = wrapper -> getWorkManagementVisibility(wrapper.getPath()); return createContainerPanel(panelId, TaskType.COMPLEX_TYPE, PrismContainerWrapperModel.fromContainerWrapper(getObjectModel(), TaskType.F_WORK_MANAGEMENT), visibilityHandler, getTaskEditabilityHandler()); } }); - ObjectTabVisibleBehavior cleanupPoliciesTabVisibility = new ObjectTabVisibleBehavior - (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_TASK_TAB_CLEANUP_POLICIES_URL, parentPage){ - - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isCleanupPolicyVisible(); - } - }; - tabs.add(new PanelTab(parentPage.createStringResource("pageTask.cleanupPolicies.title"), cleanupPoliciesTabVisibility) { - private static final long serialVersionUID = 1L; - - @Override - public WebMarkupContainer createPanel(String panelId) { - ItemVisibilityHandler visibilityHandler = wrapper -> ItemVisibility.AUTO; - return createContainerPanel(panelId, TaskType.COMPLEX_TYPE, - PrismContainerWrapperModel.fromContainerWrapper(getObjectModel(), ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_CLEANUP_POLICIES)), - visibilityHandler, getTaskEditabilityHandler()); - } - }); +// ObjectTabVisibleBehavior cleanupPoliciesTabVisibility = new ObjectTabVisibleBehavior +// (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_TASK_TAB_CLEANUP_POLICIES_URL, parentPage){ +// +// private static final long serialVersionUID = 1L; +// +// @Override +// public boolean isVisible(){ +// return super.isVisible() && taskTabsVisibility.isCleanupPolicyVisible(); +// } +// }; +// tabs.add(new PanelTab(parentPage.createStringResource("pageTask.cleanupPolicies.title"), cleanupPoliciesTabVisibility) { +// private static final long serialVersionUID = 1L; +// +// @Override +// public WebMarkupContainer createPanel(String panelId) { +// ItemVisibilityHandler visibilityHandler = wrapper -> ItemVisibility.AUTO; +// return createContainerPanel(panelId, TaskType.COMPLEX_TYPE, +// PrismContainerWrapperModel.fromContainerWrapper(getObjectModel(), ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_CLEANUP_POLICIES)), +// visibilityHandler, getTaskEditabilityHandler()); +// } +// }); ObjectTabVisibleBehavior subtasksTabVisibility = new ObjectTabVisibleBehavior (Model.of(getObjectWrapper().getObject()), ComponentConstants.UI_TASK_TAB_SUBTASKS_URL, parentPage){ @@ -172,7 +174,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isSubtasksAndThreadsVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isSubtasksAndThreadsVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.subtasks.title"), subtasksTabVisibility) { @@ -192,7 +194,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isInternalPerformanceVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isInternalPerformanceVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.operationStats.title"), operationStatsAndInternalPerfTabsVisibility) { @@ -212,7 +214,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isEnvironmentalPerformanceVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isEnvironmentalPerformanceVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.environmentalPerformance.title"), envPerfTabVisibility) { @@ -232,7 +234,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isOperationVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isOperationVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTaskEdit.operation"), operationTabVisibility) { @@ -251,7 +253,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isInternalPerformanceVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isInternalPerformanceVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.internalPerformance.title"), internalPerfTabsVisibility) { @@ -270,7 +272,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isResultVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isResultVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.result.title"), resultTabVisibility) { @@ -290,7 +292,7 @@ public WebMarkupContainer createPanel(String panelId) { @Override public boolean isVisible(){ - return super.isVisible() && taskTabsVisibility.isErrorsVisible(); + return super.isVisible() && parentTaskPage.getTaskTabVisibilty().isErrorsVisible(); } }; tabs.add(new PanelTab(parentPage.createStringResource("pageTask.errors.title"), errorsTabVisibility) { @@ -305,6 +307,33 @@ public WebMarkupContainer createPanel(String panelId) { return tabs; } + private ItemVisibility getWorkManagementVisibility(ItemPath path) { + TaskType task = getTask(); + String handler = task.getHandlerUri(); + if (handler == null) { + return ItemVisibility.AUTO; + } + + if (ItemPath.create(TaskType.F_WORK_MANAGEMENT, TaskWorkManagementType.F_PARTITIONS).equivalent(path)) { + if (handler.endsWith("task/workers-creation/handler-3")) { + return ItemVisibility.AUTO; + } else { + return ItemVisibility.HIDDEN; + } + } + + if (ItemPath.create(TaskType.F_WORK_MANAGEMENT, TaskWorkManagementType.F_WORKERS).equivalent(path)) { + if (handler.endsWith("task/lightweight-partitioning/handler-3") || handler.endsWith("model/partitioned-focus-validity-scanner/handler-3") + || handler.endsWith("model/synchronization/task/partitioned-reconciliation/handler-3") || handler.endsWith("task/generic-partitioning/handler-3")) { + return ItemVisibility.AUTO; + } + return ItemVisibility.HIDDEN; + } + + return ItemVisibility.AUTO; + + } + protected void initLayoutSaveAndRunButton() { AjaxSubmitButton saveButton = new AjaxSubmitButton(ID_SAVE_AND_RUN, getDetailsPage().createStringResource("TaskMainPanel.button.saveAndRun")) { private static final long serialVersionUID = 1L; @@ -364,4 +393,5 @@ private ItemEditabilityHandler getTaskEditabilityHandler(){ private TaskType getTask() { return getObject().asObjectable(); } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTabsVisibility.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTabsVisibility.java index 81f3af6e9ef..f72dedf9b15 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTabsVisibility.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTabsVisibility.java @@ -1,261 +1,295 @@ -/* - * Copyright (c) 2010-2019 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ -package com.evolveum.midpoint.web.page.admin.server; - -import com.evolveum.midpoint.gui.api.prism.ItemWrapper; -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.model.api.ModelPublicConstants; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.schema.constants.SchemaConstants; -import com.evolveum.midpoint.schema.statistics.StatisticsUtil; -import com.evolveum.midpoint.util.QNameUtil; -import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; - -import java.io.Serializable; - -/** - * Used to determine whether tabs have to be refreshed - by comparing instances of this class before and after task update. - * - * @author mederly - */ -class TaskTabsVisibility implements Serializable { - - private static final transient Trace LOGGER = TraceManager.getTrace(TaskTabsVisibility.class); - - private boolean basicVisible; - private boolean schedulingVisible; - private boolean workManagementVisible; - private boolean subtasksAndThreadsVisible; - private boolean cleanupPolicyVisible; - private boolean progressVisible; - private boolean environmentalPerformanceVisible; - private boolean internalPerformanceVisible; - private boolean operationVisible; - private boolean resultVisible; - private boolean errorsVisible; - - public boolean computeBasicVisible(PageTask parentPage, TaskType task) { - basicVisible = !WebComponentUtil.isWorkflowTask(task); - return basicVisible; - } - - public boolean computeSchedulingVisible(PageTask parentPage, TaskType task) { - schedulingVisible = !WebComponentUtil.isWorkflowTask(task); - return schedulingVisible; - } - - public boolean computeWorkManagementVisible(){ - workManagementVisible = true; //todo when work management should be visible? - return workManagementVisible; - } - - public boolean computeCleanupPolicyVisible(){ - cleanupPolicyVisible = true; //todo when cleanup policy should be visible? - return cleanupPolicyVisible; - } - - public boolean computeSubtasksAndThreadsVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { - - return subtasksAndThreadsVisible = taskWrapper.getObject().findReference(TaskType.F_SUBTASK_REF) != null; - - // TODO we want to show subtasks always when subtasks exist. Following should be the behavior for tables on subtasks tab. -// boolean isThreadsReadable = isTaskItemReadable(taskWrapper, ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_WORKER_THREADS)); -// TaskType task = taskWrapper.getObject().asObjectable(); -// -// if (parentPage.isEditingFocus()) { -// subtasksAndThreadsVisible = configuresWorkerThreads(task) && isThreadsReadable; -// } else if (!parentPage.isAdd() && !WebComponentUtil.isWorkflowTask(taskWrapper.getObject().asObjectable())) { -// subtasksAndThreadsVisible = configuresWorkerThreads(task) && isThreadsReadable -// || !CollectionUtils.isNotEmpty(task.getSubtaskRef()); -// } else { -// subtasksAndThreadsVisible = false; -// } -// return subtasksAndThreadsVisible; - } - - public boolean configuresWorkerThreads(TaskType task) { - return WebComponentUtil.isReconciliation(task) || WebComponentUtil.isImport(task) || WebComponentUtil.isRecomputation(task) || isExecuteChanges(task.getHandlerUri()) - || isShadowIntegrityCheck(task.getHandlerUri()) || isFocusValidityScanner(task.getHandlerUri()) || isTriggerScanner(task.getHandlerUri()); - } - - public boolean computeEnvironmentalPerformanceVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { - final OperationStatsType operationStats = taskWrapper.getObject().asObjectable().getOperationStats(); - environmentalPerformanceVisible = parentPage.isEditingFocus(); - return environmentalPerformanceVisible; - } - - public boolean computeInternalPerformanceVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { - internalPerformanceVisible = parentPage.isEditingFocus(); - return internalPerformanceVisible; - } - - public boolean computeOperationVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { - PrismContainerWrapper lensContext = null; - try{ - lensContext = taskWrapper.findContainer(TaskType.F_MODEL_OPERATION_CONTEXT); - } catch (SchemaException ex){ - LOGGER.warn("Unable to find modelOperationContext in task {}", taskWrapper.getObject().asObjectable()); - } - operationVisible = parentPage.isEditingFocus() - && isTaskItemReadable(taskWrapper, TaskType.F_MODEL_OPERATION_CONTEXT) - && lensContext != null && !lensContext.isEmpty() - && !WebComponentUtil.isWorkflowTask(taskWrapper.getObject().asObjectable()); - return operationVisible; - } - - public boolean computeResultVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { - resultVisible = parentPage.isEditingFocus() - && isTaskItemReadable(taskWrapper, TaskType.F_RESULT) - && !WebComponentUtil.isWorkflowTask(taskWrapper.getObject().asObjectable()); - return resultVisible; - } - - public boolean computeErrorsVisible(PageTask parentPage, TaskType task) { - errorsVisible = parentPage.isEditingFocus() - && !WebComponentUtil.isWorkflowTask(task); - return errorsVisible; - } - - public void computeAll(PageTask parentPage, PrismObjectWrapper taskWrapper) { - computeBasicVisible(parentPage, taskWrapper.getObject().asObjectable()); - computeSchedulingVisible(parentPage, taskWrapper.getObject().asObjectable()); - computeWorkManagementVisible(); - computeCleanupPolicyVisible(); - computeSubtasksAndThreadsVisible(parentPage, taskWrapper); - computeProgressVisible(parentPage); - computeEnvironmentalPerformanceVisible(parentPage, taskWrapper); - computeInternalPerformanceVisible(parentPage, taskWrapper); - computeOperationVisible(parentPage, taskWrapper); - computeResultVisible(parentPage, taskWrapper); - computeErrorsVisible(parentPage, taskWrapper.getObject().asObjectable()); - } - - public boolean computeProgressVisible(PageTask parentPage) { - progressVisible = parentPage.isEditingFocus(); - return progressVisible; - } - - private boolean isShadowIntegrityCheck(String handlerUri) { - return ModelPublicConstants.SHADOW_INTEGRITY_CHECK_TASK_HANDLER_URI.equals(handlerUri); - } - - private boolean isFocusValidityScanner(String handlerUri) { - return ModelPublicConstants.FOCUS_VALIDITY_SCANNER_TASK_HANDLER_URI.equals(handlerUri) - || ModelPublicConstants.DEPRECATED_FOCUS_VALIDITY_SCANNER_TASK_HANDLER_URI.equals(handlerUri); - } - - private boolean isTriggerScanner(String handlerUri) { - return ModelPublicConstants.TRIGGER_SCANNER_TASK_HANDLER_URI.equals(handlerUri); - } - - private boolean isExecuteChanges(String handlerUri) { - return ModelPublicConstants.EXECUTE_CHANGES_TASK_HANDLER_URI.equals(handlerUri); - } - - private boolean isTaskItemReadable(PrismObjectWrapper taskWrapper, ItemPath itemPath){ - ItemWrapper taskProperty = null; - try { - taskProperty = taskWrapper.findProperty(itemPath); - } catch (SchemaException ex){ - LOGGER.warn("Unable to find {} property in task object {}, {}", itemPath, - taskWrapper.getObject().asObjectable(), ex.getLocalizedMessage()); - } - return taskProperty != null && taskProperty.canRead(); - } - - public boolean isBasicVisible() { - return basicVisible; - } - - public boolean isSchedulingVisible() { - return schedulingVisible; - } - - public boolean isWorkManagementVisible() { - return workManagementVisible; - } - - public boolean isCleanupPolicyVisible() { - return cleanupPolicyVisible; - } - - public boolean isSubtasksAndThreadsVisible() { - return subtasksAndThreadsVisible; - } - - public boolean isProgressVisible() { - return progressVisible; - } - - public boolean isEnvironmentalPerformanceVisible() { - return environmentalPerformanceVisible; - } - - public boolean isInternalPerformanceVisible() { - return internalPerformanceVisible; - } - - public boolean isOperationVisible() { - return operationVisible; - } - - public boolean isResultVisible() { - return resultVisible; - } - - public boolean isErrorsVisible() { - return errorsVisible; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - TaskTabsVisibility that = (TaskTabsVisibility) o; - - if (basicVisible != that.basicVisible) - return false; - if (schedulingVisible != that.schedulingVisible) - return false; - if (subtasksAndThreadsVisible != that.subtasksAndThreadsVisible) - return false; - if (progressVisible != that.progressVisible) - return false; - if (environmentalPerformanceVisible != that.environmentalPerformanceVisible) - return false; - if (operationVisible != that.operationVisible) - return false; - if (errorsVisible != that.errorsVisible) - return false; - return resultVisible == that.resultVisible; - - } - - @Override - public int hashCode() { - int result = (basicVisible ? 1 : 0); - result = 31 * result + (schedulingVisible ? 1 : 0); - result = 31 * result + (subtasksAndThreadsVisible ? 1 : 0); - result = 31 * result + (progressVisible ? 1 : 0); - result = 31 * result + (environmentalPerformanceVisible ? 1 : 0); - result = 31 * result + (operationVisible ? 1 : 0); - result = 31 * result + (resultVisible ? 1 : 0); - result = 31 * result + (errorsVisible ? 1 : 0); - return result; - } -} +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.web.page.admin.server; + +import com.evolveum.midpoint.gui.api.prism.ItemWrapper; +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.impl.prism.PrismReferenceWrapper; +import com.evolveum.midpoint.model.api.ModelPublicConstants; +import com.evolveum.midpoint.prism.PrismReference; +import com.evolveum.midpoint.prism.PrismReferenceValue; +import com.evolveum.midpoint.prism.Referencable; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.schema.constants.SchemaConstants; +import com.evolveum.midpoint.schema.statistics.StatisticsUtil; +import com.evolveum.midpoint.util.QNameUtil; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import java.io.Serializable; + +/** + * Used to determine whether tabs have to be refreshed - by comparing instances of this class before and after task update. + * + * @author mederly + */ +class TaskTabsVisibility implements Serializable { + + private static final transient Trace LOGGER = TraceManager.getTrace(TaskTabsVisibility.class); + + private boolean basicVisible; + private boolean schedulingVisible; + private boolean workManagementVisible; + private boolean subtasksAndThreadsVisible; + private boolean cleanupPolicyVisible; + private boolean progressVisible; + private boolean environmentalPerformanceVisible; + private boolean internalPerformanceVisible; + private boolean operationVisible; + private boolean resultVisible; + private boolean errorsVisible; + + public boolean computeBasicVisible(PageTask parentPage, TaskType task) { + basicVisible = !WebComponentUtil.isWorkflowTask(task); + return basicVisible; + } + + public boolean computeSchedulingVisible(PageTask parentPage, TaskType task) { + schedulingVisible = !WebComponentUtil.isWorkflowTask(task); + return schedulingVisible; + } + + public boolean computeWorkManagementVisible(TaskType taskType){ + String taskHandler = taskType.getHandlerUri(); + if (WebComponentUtil.hasArchetypeAssignment(taskType, SystemObjectsType.ARCHETYPE_RECONCILIATION_TASK.value()) || (taskHandler != null && + (taskHandler.endsWith("task/lightweight-partitioning/handler-3") + || taskHandler.endsWith("model/partitioned-focus-validity-scanner/handler-3") + || taskHandler.endsWith("model/synchronization/task/partitioned-reconciliation/handler-3") + || taskHandler.endsWith("task/generic-partitioning/handler-3") + || taskHandler.endsWith("task/workers-creation/handler-3")))) { + workManagementVisible = true; + } + return workManagementVisible; + } + + public boolean computeCleanupPolicyVisible(){ + cleanupPolicyVisible = false; //todo when cleanup policy should be visible? + return cleanupPolicyVisible; + } + + public boolean computeSubtasksAndThreadsVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { + + PrismReference subtasks = taskWrapper.getObject().findReference(TaskType.F_SUBTASK_REF); + if (subtasks == null) { + return subtasksAndThreadsVisible = false; + } + if (CollectionUtils.isEmpty(subtasks.getValues())) { + return subtasksAndThreadsVisible = false; + } + + boolean allEmpty = true; + for (PrismReferenceValue val : subtasks.getValues()) { + if (!val.isEmpty()) { + allEmpty = false; + break; + } + } + + return subtasksAndThreadsVisible = allEmpty; + + + + // TODO we want to show subtasks always when subtasks exist. Following should be the behavior for tables on subtasks tab. +// boolean isThreadsReadable = isTaskItemReadable(taskWrapper, ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.MODEL_EXTENSION_WORKER_THREADS)); +// TaskType task = taskWrapper.getObject().asObjectable(); +// +// if (parentPage.isEditingFocus()) { +// subtasksAndThreadsVisible = configuresWorkerThreads(task) && isThreadsReadable; +// } else if (!parentPage.isAdd() && !WebComponentUtil.isWorkflowTask(taskWrapper.getObject().asObjectable())) { +// subtasksAndThreadsVisible = configuresWorkerThreads(task) && isThreadsReadable +// || !CollectionUtils.isNotEmpty(task.getSubtaskRef()); +// } else { +// subtasksAndThreadsVisible = false; +// } +// return subtasksAndThreadsVisible; + } + + public boolean configuresWorkerThreads(TaskType task) { + return WebComponentUtil.isReconciliation(task) || WebComponentUtil.isImport(task) || WebComponentUtil.isRecomputation(task) || isExecuteChanges(task.getHandlerUri()) + || isShadowIntegrityCheck(task.getHandlerUri()) || isFocusValidityScanner(task.getHandlerUri()) || isTriggerScanner(task.getHandlerUri()); + } + + public boolean computeEnvironmentalPerformanceVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { + final OperationStatsType operationStats = taskWrapper.getObject().asObjectable().getOperationStats(); + environmentalPerformanceVisible = parentPage.isEditingFocus(); + return environmentalPerformanceVisible; + } + + public boolean computeInternalPerformanceVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { + internalPerformanceVisible = parentPage.isEditingFocus(); + return internalPerformanceVisible; + } + + public boolean computeOperationVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { + PrismContainerWrapper lensContext = null; + try{ + lensContext = taskWrapper.findContainer(TaskType.F_MODEL_OPERATION_CONTEXT); + } catch (SchemaException ex){ + LOGGER.warn("Unable to find modelOperationContext in task {}", taskWrapper.getObject().asObjectable()); + } + operationVisible = parentPage.isEditingFocus() + && isTaskItemReadable(taskWrapper, TaskType.F_MODEL_OPERATION_CONTEXT) + && lensContext != null && !lensContext.isEmpty() + && !WebComponentUtil.isWorkflowTask(taskWrapper.getObject().asObjectable()); + return operationVisible; + } + + public boolean computeResultVisible(PageTask parentPage, PrismObjectWrapper taskWrapper) { + resultVisible = parentPage.isEditingFocus() + && isTaskItemReadable(taskWrapper, TaskType.F_RESULT) + && !WebComponentUtil.isWorkflowTask(taskWrapper.getObject().asObjectable()); + return resultVisible; + } + + public boolean computeErrorsVisible(PageTask parentPage, TaskType task) { + errorsVisible = parentPage.isEditingFocus() + && !WebComponentUtil.isWorkflowTask(task); + return errorsVisible; + } + + public void computeAll(PageTask parentPage, PrismObjectWrapper taskWrapper) { + TaskType taskType = taskWrapper.getObject().asObjectable(); + computeBasicVisible(parentPage, taskType); + computeSchedulingVisible(parentPage, taskType); + computeWorkManagementVisible(taskType); + computeCleanupPolicyVisible(); + computeSubtasksAndThreadsVisible(parentPage, taskWrapper); + computeProgressVisible(parentPage); + computeEnvironmentalPerformanceVisible(parentPage, taskWrapper); + computeInternalPerformanceVisible(parentPage, taskWrapper); + computeOperationVisible(parentPage, taskWrapper); + computeResultVisible(parentPage, taskWrapper); + computeErrorsVisible(parentPage, taskType); + } + + public boolean computeProgressVisible(PageTask parentPage) { + progressVisible = parentPage.isEditingFocus(); + return progressVisible; + } + + private boolean isShadowIntegrityCheck(String handlerUri) { + return ModelPublicConstants.SHADOW_INTEGRITY_CHECK_TASK_HANDLER_URI.equals(handlerUri); + } + + private boolean isFocusValidityScanner(String handlerUri) { + return ModelPublicConstants.FOCUS_VALIDITY_SCANNER_TASK_HANDLER_URI.equals(handlerUri) + || ModelPublicConstants.DEPRECATED_FOCUS_VALIDITY_SCANNER_TASK_HANDLER_URI.equals(handlerUri); + } + + private boolean isTriggerScanner(String handlerUri) { + return ModelPublicConstants.TRIGGER_SCANNER_TASK_HANDLER_URI.equals(handlerUri); + } + + private boolean isExecuteChanges(String handlerUri) { + return ModelPublicConstants.EXECUTE_CHANGES_TASK_HANDLER_URI.equals(handlerUri); + } + + private boolean isTaskItemReadable(PrismObjectWrapper taskWrapper, ItemPath itemPath){ + ItemWrapper taskProperty = null; + try { + taskProperty = taskWrapper.findProperty(itemPath); + } catch (SchemaException ex){ + LOGGER.warn("Unable to find {} property in task object {}, {}", itemPath, + taskWrapper.getObject().asObjectable(), ex.getLocalizedMessage()); + } + return taskProperty != null && taskProperty.canRead(); + } + + public boolean isBasicVisible() { + return basicVisible; + } + + public boolean isSchedulingVisible() { + return schedulingVisible; + } + + public boolean isWorkManagementVisible() { + return workManagementVisible; + } + + public boolean isCleanupPolicyVisible() { + return cleanupPolicyVisible; + } + + public boolean isSubtasksAndThreadsVisible() { + return subtasksAndThreadsVisible; + } + + public boolean isProgressVisible() { + return progressVisible; + } + + public boolean isEnvironmentalPerformanceVisible() { + return environmentalPerformanceVisible; + } + + public boolean isInternalPerformanceVisible() { + return internalPerformanceVisible; + } + + public boolean isOperationVisible() { + return operationVisible; + } + + public boolean isResultVisible() { + return resultVisible; + } + + public boolean isErrorsVisible() { + return errorsVisible; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + TaskTabsVisibility that = (TaskTabsVisibility) o; + + if (basicVisible != that.basicVisible) + return false; + if (schedulingVisible != that.schedulingVisible) + return false; + if (subtasksAndThreadsVisible != that.subtasksAndThreadsVisible) + return false; + if (progressVisible != that.progressVisible) + return false; + if (workManagementVisible != that.workManagementVisible) + return false; + if (environmentalPerformanceVisible != that.environmentalPerformanceVisible) + return false; + if (operationVisible != that.operationVisible) + return false; + if (errorsVisible != that.errorsVisible) + return false; + return resultVisible == that.resultVisible; + + } + + @Override + public int hashCode() { + int result = (basicVisible ? 1 : 0); + result = 31 * result + (schedulingVisible ? 1 : 0); + result = 31 * result + (subtasksAndThreadsVisible ? 1 : 0); + result = 31 * result + (progressVisible ? 1 : 0); + result = 31 * result + (workManagementVisible ? 1 : 0); + result = 31 * result + (environmentalPerformanceVisible ? 1 : 0); + result = 31 * result + (operationVisible ? 1 : 0); + result = 31 * result + (resultVisible ? 1 : 0); + result = 31 * result + (errorsVisible ? 1 : 0); + return result; + } +} diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/cleanup/CleanUpTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/cleanup/CleanUpTaskHandler.java index c2d903489eb..880f962bee6 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/cleanup/CleanUpTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/cleanup/CleanUpTaskHandler.java @@ -201,6 +201,6 @@ public List getCategoryNames() { @Override public String getArchetypeOid() { - return SystemObjectsType.TASK_CLEANUP.value(); + return SystemObjectsType.ARCHETYPE_CLEANUP_TASK.value(); } }