Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Mar 11, 2020
2 parents b39e36a + 9d7c749 commit d62726d
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 39 deletions.
Expand Up @@ -11,6 +11,9 @@
import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.GetOperationOptionsBuilder;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider;
import com.evolveum.midpoint.web.component.data.column.EnumPropertyColumn;
import com.evolveum.midpoint.web.component.util.SelectableBean;
Expand All @@ -25,6 +28,7 @@
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.*;

import javax.xml.namespace.QName;
import java.util.*;

/**
Expand Down Expand Up @@ -59,7 +63,7 @@ private void initLayout() {
Label subtasksLabel = new Label(ID_SUBTASKS_LABEL, new ResourceModel("pageTaskEdit.subtasksLabel"));
add(subtasksLabel);

TaskTablePanel subtasksPanel = new TaskTablePanel(ID_SUBTASKS_PANEL, UserProfileStorage.TableId.TABLE_SUBTASKS, null) {
TaskTablePanel subtasksPanel = new TaskTablePanel(ID_SUBTASKS_PANEL, UserProfileStorage.TableId.TABLE_SUBTASKS, createOperationOptions()) {
@Override
protected ObjectQuery addFilterToContentQuery(ObjectQuery query) {

Expand Down Expand Up @@ -124,6 +128,18 @@ protected boolean isHeaderVisible() {
add(workerThreadsTable);
}

private Collection<SelectorOptions<GetOperationOptions>> createOperationOptions() {
List<QName> propertiesToGet = new ArrayList<>();
propertiesToGet.add(TaskType.F_SUBTASK_REF);

GetOperationOptionsBuilder getOperationOptionsBuilder = getSchemaHelper().getOperationOptionsBuilder();
getOperationOptionsBuilder = getOperationOptionsBuilder.resolveNames();
Collection<SelectorOptions<GetOperationOptions>> searchOptions = getOperationOptionsBuilder
.items(propertiesToGet.toArray(new Object[0])).retrieve()
.build();
return searchOptions;
}

private IModel<List<TaskType>> createWorkersModel() {
return (IModel<List<TaskType>>) () -> {
PrismObject<TaskType> taskPrism = TaskSubtasksAndThreadsTabPanel.this.getModelObject().getObject();
Expand Down
Expand Up @@ -319,36 +319,13 @@ private String getProgressDescription(SelectableBean<TaskType> task) {
}

private String getRealProgressDescription(SelectableBean<TaskType> task) {
if (isWorkStateHolder(task)) {
if (TaskTypeUtil.isWorkStateHolder(task.getValue())) {
return getBucketedTaskProgressDescription(task.getValue());
} else {
return getPlainTaskProgressDescription(task.getValue());
}
}

private boolean isWorkStateHolder(SelectableBean<TaskType> taskType) {
return (TaskTypeUtil.isCoordinator(taskType.getValue()) || hasBuckets(taskType.getValue())) && !isCoordinatedWorker(taskType.getValue());
}

private boolean isCoordinatedWorker(TaskType taskType) {
return taskType.getWorkManagement() != null && taskType.getWorkManagement().getTaskKind() == TaskKindType.WORKER;
}

private boolean hasBuckets(TaskType taskType) {
if (taskType.getWorkState() == null) {
return false;
}
if (taskType.getWorkState().getNumberOfBuckets() != null && taskType.getWorkState().getNumberOfBuckets() > 1) {
return true;
}
List<WorkBucketType> buckets = taskType.getWorkState().getBucket();
if (buckets.size() > 1) {
return true;
} else {
return buckets.size() == 1 && buckets.get(0).getContent() != null;
}
}


private String getBucketedTaskProgressDescription(TaskType taskType) {
int completeBuckets = getCompleteBuckets(taskType);
Integer expectedBuckets = getExpectedBuckets(taskType);
Expand Down
Expand Up @@ -67,18 +67,22 @@ public boolean computeCleanupPolicyVisible(){
}

public boolean computeSubtasksAndThreadsVisible(PageTask parentPage, PrismObjectWrapper<TaskType> taskWrapper) {
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;

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) {
Expand Down
Expand Up @@ -94,7 +94,7 @@ public static int getObjectsProcessedFailures(TaskType task, PrismContext prismC
}

public static OperationStatsType getAggregatedOperationStats(TaskType task, PrismContext prismContext) {
if (!isPartitionedMaster(task)) {
if (!isPartitionedMaster(task) && !isWorkStateHolder(task)) {
return task.getOperationStats();
}

Expand Down Expand Up @@ -126,4 +126,27 @@ public static TaskType findChild(TaskType parent, String childOid) {
}
return null;
}

public static boolean isWorkStateHolder(TaskType taskType) {
return (isCoordinator(taskType) || hasBuckets(taskType)) && !isCoordinatedWorker(taskType);
}

private static boolean hasBuckets(TaskType taskType) {
if (taskType.getWorkState() == null) {
return false;
}
if (taskType.getWorkState().getNumberOfBuckets() != null && taskType.getWorkState().getNumberOfBuckets() > 1) {
return true;
}
List<WorkBucketType> buckets = taskType.getWorkState().getBucket();
if (buckets.size() > 1) {
return true;
} else {
return buckets.size() == 1 && buckets.get(0).getContent() != null;
}
}

private static boolean isCoordinatedWorker(TaskType taskType) {
return taskType.getWorkManagement() != null && TaskKindType.WORKER == taskType.getWorkManagement().getTaskKind();
}
}

0 comments on commit d62726d

Please sign in to comment.