diff --git a/jbpm-wb-common/jbpm-wb-common-api/src/main/java/org/jbpm/workbench/common/model/GenericErrorSummary.java b/jbpm-wb-common/jbpm-wb-common-api/src/main/java/org/jbpm/workbench/common/model/GenericErrorSummary.java new file mode 100644 index 0000000000..3ee0df6434 --- /dev/null +++ b/jbpm-wb-common/jbpm-wb-common-api/src/main/java/org/jbpm/workbench/common/model/GenericErrorSummary.java @@ -0,0 +1,89 @@ +/* + * Copyright 2017 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jbpm.workbench.common.model; + +public abstract class GenericErrorSummary extends GenericSummary{ + + private Integer errorCount; + + public GenericErrorSummary() { + + } + + public GenericErrorSummary(Integer errorCount, T id, String name) { + super(id,name); + this.errorCount = errorCount; + } + + public Integer getErrorCount() { + return errorCount; + } + + public void setErrorCount(Integer errorCount) { + this.errorCount = errorCount; + } + + @Override + @SuppressWarnings("PMD.AvoidMultipleUnaryOperators") + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = ~~result; + result = prime * result + ((errorCount == null) ? 0 : errorCount.hashCode()); + result = ~~result; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + GenericErrorSummary other = (GenericErrorSummary) obj; + if (id == null) { + if (other.id != null) { + return false; + } + } else if (!id.equals(other.id)) { + return false; + } + if (errorCount == null) { + if (other.errorCount != null) { + return false; + } + } else if (!errorCount.equals(other.errorCount)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "GenericErrorSummary{" + + "id=" + id + + ", errorCount=" + errorCount + + '}'; + } + +} diff --git a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/PerspectiveIds.java b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/PerspectiveIds.java index a028e01621..a0d15b8d9e 100644 --- a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/PerspectiveIds.java +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/PerspectiveIds.java @@ -22,6 +22,7 @@ public interface PerspectiveIds extends org.kie.workbench.common.workbench.clien String SEARCH_PARAMETER_PROCESS_DEFINITION_ID = "processDefinitionId"; String SEARCH_PARAMETER_TASK_ID = "taskId"; String SEARCH_PARAMETER_JOB_ID = "jobId"; + String SEARCH_PARAMETER_ERROR_TYPE = "errorType"; String SEARCH_PARAMETER_IS_ERROR_ACK = "isErrorAck"; String PROCESS_INSTANCE_DETAILS_SCREEN = "ProcessInstanceDetailsScreen"; diff --git a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/list/AbstractMultiGridPresenter.java b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/list/AbstractMultiGridPresenter.java index fbb0f7a685..e360378859 100644 --- a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/list/AbstractMultiGridPresenter.java +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/list/AbstractMultiGridPresenter.java @@ -17,6 +17,8 @@ package org.jbpm.workbench.common.client.list; import java.util.Optional; +import java.util.function.Predicate; + import javax.inject.Inject; import org.dashbuilder.dataset.filter.ColumnFilter; @@ -145,4 +147,10 @@ public boolean isUserAuthorizedForPerspective(final String perspectiveId) { return authorizationManager.authorize(resourceRef, identity); } + + public void openErrorView(final String parameterId) {} + + public Predicate getViewErrorsActionCondition(){ + return null; + } } \ No newline at end of file diff --git a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/resources/i18n/Constants.java b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/resources/i18n/Constants.java index d37354ca56..e5380cb400 100644 --- a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/resources/i18n/Constants.java +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/resources/i18n/Constants.java @@ -18,6 +18,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.Messages; +import com.google.gwt.i18n.client.Messages.PluralCount; /** * This uses GWT to provide client side compile time resolving of locales. See: @@ -140,4 +141,6 @@ String DataSetError(String dataSet, String RemoveSavedFilterMessage(String filterName); String Remove(); + + String ErrorCountNumberView(@PluralCount int errCount); } \ No newline at end of file diff --git a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.css b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.css new file mode 100644 index 0000000000..488c97ca50 --- /dev/null +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.css @@ -0,0 +1,12 @@ +.data-error-count { + margin-left: 0px; + cursor: initial !important; +} + +.data-error-count.error-present { + background-color: #c00; +} + +.data-error-count.link-available { + cursor: pointer !important; +} \ No newline at end of file diff --git a/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.html b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.html new file mode 100644 index 0000000000..f7e5b48034 --- /dev/null +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.html @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.java b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.java similarity index 68% rename from jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.java rename to jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.java index d6952839c2..3807f0f822 100644 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.java +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/java/org/jbpm/workbench/common/client/util/GenericErrorSummaryCountCell.java @@ -14,11 +14,10 @@ * limitations under the License. */ -package org.jbpm.workbench.pr.client.editors.instance.list; +package org.jbpm.workbench.common.client.util; import javax.enterprise.context.Dependent; import javax.inject.Inject; - import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.core.client.Scheduler; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -27,32 +26,31 @@ import org.jboss.errai.ui.client.local.api.IsElement; import org.jboss.errai.ui.shared.api.annotations.DataField; import org.jboss.errai.ui.shared.api.annotations.Templated; -import org.jbpm.workbench.pr.client.resources.i18n.Constants; -import org.jbpm.workbench.pr.model.ProcessInstanceSummary; +import org.jbpm.workbench.common.client.list.AbstractMultiGridPresenter; +import org.jbpm.workbench.common.model.GenericErrorSummary; +import org.jbpm.workbench.common.client.resources.i18n.Constants; @Dependent -@Templated(value = "ProcessInstanceSummaryErrorCountCell.html", stylesheet = "ProcessInstanceSummaryErrorCountCell.css") -public class ProcessInstanceSummaryErrorCountCell extends AbstractCell implements IsElement { +@Templated(value = "GenericErrorSummaryCountCell.html", stylesheet = "GenericErrorSummaryCountCell.css") +public class GenericErrorSummaryCountCell extends AbstractCell implements IsElement { private static final String TOOLTIP_NAME = "pisepc-tooltip"; - private static final String PROCESS_INSTANCE_ATTRIBUTE = "data-jbpm-processInstanceId"; + private static final String DATA_INSTANCE_ATTRIBUTE = "data-jbpm-id"; private static final String ERROR_PRESENT_STYLE = "error-present"; private static final String LINK_AVAILABLE_STYLE = "link-available"; - @Inject @DataField(TOOLTIP_NAME) private Anchor tooltip; - - private ProcessInstanceListPresenter viewPresenter; - - public ProcessInstanceSummaryErrorCountCell init(final ProcessInstanceListPresenter viewPresenter) { + private AbstractMultiGridPresenter viewPresenter; + + public GenericErrorSummaryCountCell init(final AbstractMultiGridPresenter viewPresenter) { this.viewPresenter = viewPresenter; return this; } @Override public void render(Context context, - ProcessInstanceSummary value, + C value, SafeHtmlBuilder sb) { Integer errCount = (value != null && value.getErrorCount() != null ? value.getErrorCount() : 0); @@ -67,34 +65,34 @@ public void render(Context context, if (viewPresenter.getViewErrorsActionCondition().test(value)) { tooltip.setTitle(Constants.INSTANCE.ErrorCountNumberView(errCount)); - tooltip.setAttribute(PROCESS_INSTANCE_ATTRIBUTE, - Long.toString(value.getProcessInstanceId())); + tooltip.setAttribute(DATA_INSTANCE_ATTRIBUTE, + value.getId().toString()); tooltipClasses.add(LINK_AVAILABLE_STYLE); initTooltipsAsync(); } else { tooltip.removeAttribute("title"); - tooltip.removeAttribute(PROCESS_INSTANCE_ATTRIBUTE); + tooltip.removeAttribute(DATA_INSTANCE_ATTRIBUTE); tooltipClasses.remove(LINK_AVAILABLE_STYLE); } sb.appendHtmlConstant(tooltip.getOuterHTML()); } - public void openErrorView(final String pid) { - viewPresenter.openErrorView(pid); + public void openErrorView(final String id){ + viewPresenter.openErrorView(id); } private void initTooltipsAsync(){ Scheduler.get().scheduleDeferred(() -> initTooltips(TOOLTIP_NAME, LINK_AVAILABLE_STYLE, - PROCESS_INSTANCE_ATTRIBUTE)); + DATA_INSTANCE_ATTRIBUTE)); } private native void initTooltips(String dataAttrVal, String linkClassName, - String procIdAttrName) /*-{ + String IdAttrName) /*-{ var thisCellRef = this; $wnd.jQuery(document).ready(function () { $wnd.jQuery("[data-field='" + dataAttrVal + "']") @@ -103,8 +101,8 @@ private native void initTooltips(String dataAttrVal, .filter("." + linkClassName) .tooltip() .on("click", function () { - var processInstId = $wnd.jQuery(this).attr(procIdAttrName); - thisCellRef.@org.jbpm.workbench.pr.client.editors.instance.list.ProcessInstanceSummaryErrorCountCell::openErrorView(Ljava/lang/String;)(processInstId); + var id = $wnd.jQuery(this).attr(IdAttrName); + thisCellRef.@org.jbpm.workbench.common.client.util.GenericErrorSummaryCountCell::openErrorView(Ljava/lang/String;)(id); }); }); }-*/; diff --git a/jbpm-wb-common/jbpm-wb-common-client/src/main/resources/org/jbpm/workbench/common/client/resources/i18n/Constants.properties b/jbpm-wb-common/jbpm-wb-common-client/src/main/resources/org/jbpm/workbench/common/client/resources/i18n/Constants.properties index d1c9c3fb13..dedfdd8e8e 100644 --- a/jbpm-wb-common/jbpm-wb-common-client/src/main/resources/org/jbpm/workbench/common/client/resources/i18n/Constants.properties +++ b/jbpm-wb-common/jbpm-wb-common-client/src/main/resources/org/jbpm/workbench/common/client/resources/i18n/Constants.properties @@ -51,4 +51,6 @@ FilterBy=Filter By SavedFilters=Saved Filters RemoveSavedFilterTitle=Remove Saved Filter RemoveSavedFilterMessage=Are you sure you want to remove saved filter: {0}? -Remove=Remove \ No newline at end of file +Remove=Remove +ErrorCountNumberView=Click to view {0} errors +ErrorCountNumberView[\=1]=Click to view {0} error \ No newline at end of file diff --git a/jbpm-wb-executor-service/jbpm-wb-executor-service-client/src/main/java/org/jbpm/workbench/es/client/editors/errorlist/ExecutionErrorListPresenter.java b/jbpm-wb-executor-service/jbpm-wb-executor-service-client/src/main/java/org/jbpm/workbench/es/client/editors/errorlist/ExecutionErrorListPresenter.java index d1a741c445..8f4b049848 100644 --- a/jbpm-wb-executor-service/jbpm-wb-executor-service-client/src/main/java/org/jbpm/workbench/es/client/editors/errorlist/ExecutionErrorListPresenter.java +++ b/jbpm-wb-executor-service/jbpm-wb-executor-service-client/src/main/java/org/jbpm/workbench/es/client/editors/errorlist/ExecutionErrorListPresenter.java @@ -348,6 +348,36 @@ public void setupActiveSearchFilters() { isDefaultFilters = false; } + final Optional taskIdSearch = getSearchParameter(PerspectiveIds.SEARCH_PARAMETER_TASK_ID); + if (taskIdSearch.isPresent()) { + final String taskId = taskIdSearch.get(); + view.addActiveFilter(constants.Task(), + taskId, + taskId, + v -> removeAdvancedSearchFilter(equalsTo(COLUMN_ACTIVITY_ID, + v)) + ); + + addAdvancedSearchFilter(equalsTo(COLUMN_ACTIVITY_ID, + taskId)); + isDefaultFilters = false; + } + + final Optional errorTypeSearch = getSearchParameter(PerspectiveIds.SEARCH_PARAMETER_ERROR_TYPE); + if (errorTypeSearch.isPresent()) { + final String errorType = errorTypeSearch.get(); + view.addActiveFilter(constants.Type(), + errorType, + errorType, + v -> removeAdvancedSearchFilter(equalsTo(COLUMN_ERROR_TYPE, + v)) + ); + + addAdvancedSearchFilter(equalsTo(COLUMN_ERROR_TYPE, + errorType)); + isDefaultFilters = false; + } + final Optional isErrorAckSearch = getSearchParameter(PerspectiveIds.SEARCH_PARAMETER_IS_ERROR_ACK); if (isErrorAckSearch.isPresent()) { final boolean isErrorAck = isErrorAckSearch.get().equalsIgnoreCase(Boolean.toString(true)); diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskDataSetConstants.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskDataSetConstants.java index 57aeda103e..fabfa841dd 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskDataSetConstants.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskDataSetConstants.java @@ -49,6 +49,7 @@ public final class TaskDataSetConstants { public static final String COLUMN_TASK_VARIABLE_NAME = "name"; public static final String COLUMN_TASK_VARIABLE_VALUE = "value"; - private TaskDataSetConstants() { - } + public static final String COLUMN_ERROR_COUNT = "errorCount"; + + private TaskDataSetConstants() {} } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskSummary.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskSummary.java index 48f7637573..c325b6ce88 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskSummary.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-api/src/main/java/org/jbpm/workbench/ht/model/TaskSummary.java @@ -21,10 +21,10 @@ import org.jboss.errai.common.client.api.annotations.NonPortable; import org.jboss.errai.common.client.api.annotations.Portable; -import org.jbpm.workbench.common.model.GenericSummary; +import org.jbpm.workbench.common.model.GenericErrorSummary; @Portable -public class TaskSummary extends GenericSummary { +public class TaskSummary extends GenericErrorSummary { private String description; private String status; @@ -215,25 +215,25 @@ public void setProcessSessionId(Long processSessionId) { @Override public String toString() { return "TaskSummary{" + - "description='" + description + '\'' + - ", status='" + status + '\'' + - ", priority=" + priority + - ", actualOwner='" + actualOwner + '\'' + - ", createdBy='" + createdBy + '\'' + - ", createdOn=" + createdOn + - ", activationTime=" + activationTime + - ", expirationTime=" + expirationTime + - ", lastModificationDate=" + lastModificationDate + - ", processInstanceId=" + processInstanceId + - ", processInstanceCorrelationKey='" + processInstanceCorrelationKey + '\'' + - ", processInstanceDescription='" + processInstanceDescription + '\'' + - ", processId='" + processId + '\'' + - ", deploymentId='" + deploymentId + '\'' + - ", isForAdmin=" + isForAdmin + - ", isLogOnly=" + isLogOnly + - ", parentId=" + parentId + - ", domainData=" + domainData + - "} " + super.toString(); + "description='" + description + '\'' + + ", status='" + status + '\'' + + ", priority=" + priority + + ", actualOwner='" + actualOwner + '\'' + + ", createdBy='" + createdBy + '\'' + + ", createdOn=" + createdOn + + ", activationTime=" + activationTime + + ", expirationTime=" + expirationTime + + ", lastModificationDate=" + lastModificationDate + + ", processInstanceId=" + processInstanceId + + ", processInstanceCorrelationKey='" + processInstanceCorrelationKey + '\'' + + ", processInstanceDescription='" + processInstanceDescription + '\'' + + ", processId='" + processId + '\'' + + ", deploymentId='" + deploymentId + '\'' + + ", isForAdmin=" + isForAdmin + + ", isLogOnly=" + isLogOnly + + ", parentId=" + parentId + + ", domainData=" + domainData + + "} " + super.toString(); } @NonPortable @@ -241,8 +241,7 @@ public static final class Builder { private TaskSummary taskSummary = new TaskSummary(); - private Builder() { - } + private Builder() {} public TaskSummary build() { return taskSummary; @@ -352,5 +351,10 @@ public Builder processSessionId(Long processSessionId) { this.taskSummary.setProcessSessionId(processSessionId); return this; } + + public Builder errorCount(Integer errorCount) { + this.taskSummary.setErrorCount(errorCount); + return this; + } } } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrap.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrap.java index da83709740..35dc577fec 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrap.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrap.java @@ -118,7 +118,16 @@ protected void registerDataSetDefinitions() { .name("FILTERED_BA_TASK-Human tasks and admins") .dataSource(JBPM_DATA_SOURCE) .dbSQL("select " + - SQL_SELECT_COMMON_COLS + + SQL_SELECT_COMMON_COLS + "," + + " (select COUNT(errInfo.id) " + + "from " + + "ExecutionErrorInfo errInfo " + + "where " + + "errInfo.activity_id=t.taskId and " + + "errInfo.process_inst_id=pil.processInstanceId and " + + "errInfo.error_ack=0 and " + + "errInfo.error_type=\'Task\'" + + ") as " + COLUMN_ERROR_COUNT + " " + "from " + "AuditTaskImpl t " + "left join " + @@ -129,6 +138,7 @@ protected void registerDataSetDefinitions() { false); builder = addBuilderCommonColumns(builder); + builder.number(COLUMN_ERROR_COUNT); DataSetDef humanTaskWithAdminDef = builder.buildDef(); DataSetDef humanTasksWithUserDomainDef = DataSetDefFactory.newSQLDataSetDef() //Add to this dataset TaskName? to apply with the specified filter @@ -189,4 +199,4 @@ private SQLDataSetDefBuilderImpl addBuilderCommonColumns(SQLDataSetDefBuilderImp .label(COLUMN_PROCESS_INSTANCE_CORRELATION_KEY) .text(COLUMN_PROCESS_INSTANCE_DESCRIPTION); } -} \ No newline at end of file +} diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/TaskSummaryMapper.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/TaskSummaryMapper.java index baa9061b3f..9c066c96c2 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/TaskSummaryMapper.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/main/java/org/jbpm/workbench/ht/backend/server/TaskSummaryMapper.java @@ -29,21 +29,22 @@ public TaskSummary apply(final TaskInstance taskInstance) { return null; } else { return TaskSummary.builder() - .id(taskInstance.getId()) - .name(taskInstance.getName()) - .description(taskInstance.getDescription()) - .status(taskInstance.getStatus()) - .priority(taskInstance.getPriority()) - .actualOwner(taskInstance.getActualOwner()) - .createdBy(taskInstance.getCreatedBy()) - .createdOn(taskInstance.getCreatedOn()) - .activationTime(taskInstance.getActivationTime()) - .expirationTime(taskInstance.getExpirationDate()) - .processId(taskInstance.getProcessId()) - .processInstanceId(taskInstance.getProcessInstanceId()) - .deploymentId(taskInstance.getContainerId()) - .parentId(taskInstance.getParentId()) - .build(); + .id(taskInstance.getId()) + .name(taskInstance.getName()) + .description(taskInstance.getDescription()) + .status(taskInstance.getStatus()) + .priority(taskInstance.getPriority()) + .actualOwner(taskInstance.getActualOwner()) + .createdBy(taskInstance.getCreatedBy()) + .createdOn(taskInstance.getCreatedOn()) + .activationTime(taskInstance.getActivationTime()) + .expirationTime(taskInstance.getExpirationDate()) + .processId(taskInstance.getProcessId()) + .processInstanceId(taskInstance.getProcessInstanceId()) + .deploymentId(taskInstance.getContainerId()) + .parentId(taskInstance.getParentId()) + .errorCount(0) + .build(); } } } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/test/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrapTest.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/test/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrapTest.java index 9f53b9ceaa..bf4303fd29 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/test/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrapTest.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-backend/src/test/java/org/jbpm/workbench/ht/backend/server/DataSetDefsBootstrapTest.java @@ -106,7 +106,7 @@ public void columnsAddedInHumanTaskWithAdminDataSet() { DataSetDef humanTaskWithAdminDataSet = dsList.stream().filter(a -> a.getUUID().equals(HUMAN_TASKS_WITH_ADMIN_DATASET)).findFirst().get(); List dataSetColumns = humanTaskWithAdminDataSet.getColumns(); - assertEquals(19, + assertEquals(20, dataSetColumns.size()); } } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListPresenter.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListPresenter.java index 045cdbf7d9..c02dc8c982 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListPresenter.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListPresenter.java @@ -50,7 +50,7 @@ import org.jbpm.workbench.common.client.dataset.AbstractDataSetReadyCallback; import org.jbpm.workbench.common.client.list.AbstractMultiGridPresenter; import org.jbpm.workbench.common.client.list.AbstractMultiGridView; -import org.jbpm.workbench.common.client.list.ExtendedPagedTable; +import org.jbpm.workbench.common.client.list.ListTable; import org.jbpm.workbench.common.client.list.MultiGridView; import org.jbpm.workbench.common.client.menu.RefreshMenuBuilder; import org.jbpm.workbench.common.client.util.DateUtils; @@ -65,6 +65,8 @@ import org.jbpm.workbench.ht.service.TaskService; import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter; import org.uberfire.ext.widgets.common.client.common.popups.errors.ErrorPopup; +import org.uberfire.mvp.PlaceRequest; +import org.uberfire.mvp.impl.DefaultPlaceRequest; import org.uberfire.workbench.model.menu.MenuFactory; import org.uberfire.workbench.model.menu.Menus; @@ -111,6 +113,23 @@ public void getData(final Range visibleRange) { } } + @Override + public void openErrorView(final String tId) { + final PlaceRequest request = new DefaultPlaceRequest(PerspectiveIds.EXECUTION_ERRORS); + request.addParameter(PerspectiveIds.SEARCH_PARAMETER_IS_ERROR_ACK, + Boolean.toString(false)); + request.addParameter(PerspectiveIds.SEARCH_PARAMETER_TASK_ID, + tId); + request.addParameter(PerspectiveIds.SEARCH_PARAMETER_ERROR_TYPE, + constants.Task()); + placeManager.goTo(request); + } + + @Override + public Predicate getViewErrorsActionCondition() { + return tId -> isUserAuthorizedForPerspective(PerspectiveIds.EXECUTION_ERRORS) && tId.getErrorCount() != null && tId.getErrorCount() > 0; + } + /** * Generates a dataset filter depending of the user roles and the kind of dataset. *
In case of the adminDataset (isAdminDateset=true), retrieve the tasks that are accessible for the user logged @@ -283,7 +302,7 @@ public void callback(DataSet dataSet) { } } } - view.addDomainSpecifColumns(view.getListGrid(), + view.addDomainSpecifColumns((ListTable) view.getListGrid(), columns); } updateDataOnCallback(instances, @@ -613,7 +632,6 @@ protected void addCommonColumnSettings(FilterSettingsBuilderHelper builder) { constants.Process_Instance_Correlation_Key()); builder.setColumn(COLUMN_PROCESS_INSTANCE_DESCRIPTION, constants.Process_Instance_Description()); - builder.filterOn(true, true, true); @@ -670,7 +688,7 @@ protected Predicate getProcessInstanceCondition() { public interface TaskListView extends MultiGridView { - void addDomainSpecifColumns(ExtendedPagedTable extendedPagedTable, + void addDomainSpecifColumns(ListTable extendedPagedTable, Set columns); void setSelectedTask(TaskSummary selectedTask); diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListView.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListView.java index a5d94d377c..9f76feb71a 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListView.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListView.java @@ -15,7 +15,12 @@ */ package org.jbpm.workbench.ht.client.editors.taskslist; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; import com.google.gwt.cell.client.CompositeCell; import com.google.gwt.cell.client.HasCell; @@ -24,7 +29,6 @@ import com.google.gwt.user.cellview.client.RowStyles; import com.google.gwt.view.client.CellPreviewEvent; import org.jbpm.workbench.common.client.list.AbstractMultiGridView; -import org.jbpm.workbench.common.client.list.ExtendedPagedTable; import org.jbpm.workbench.common.client.list.ListTable; import org.jbpm.workbench.common.client.util.ConditionalButtonActionCell; import org.jbpm.workbench.common.client.util.DateUtils; @@ -34,7 +38,7 @@ import org.uberfire.ext.services.shared.preferences.GridColumnPreference; import org.uberfire.ext.widgets.table.client.ColumnMeta; -import static org.jbpm.workbench.common.client.util.TaskUtils.*; +import static org.jbpm.workbench.common.client.util.TaskUtils.TASK_STATUS_COMPLETED; import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; public abstract class AbstractTaskListView

extends AbstractMultiGridView @@ -42,15 +46,6 @@ public abstract class AbstractTaskListView

protected final Constants constants = Constants.INSTANCE; - @Override - public List getInitColumns() { - return Arrays.asList(COLUMN_NAME, - COLUMN_PROCESS_ID, - COLUMN_STATUS, - COLUMN_CREATED_ON, - COL_ID_ACTIONS); - } - @Override public List getBannedColumns() { return Arrays.asList(COLUMN_NAME, @@ -158,11 +153,12 @@ public void initColumns(ListTable extendedPagedTable) { task -> task.getProcessSessionId()), constants.ProcessSessionId() )); + addNewColumn(extendedPagedTable, + columnMetas); columnMetas.add(new ColumnMeta<>(actionsColumn, constants.Actions())); List columPreferenceList = extendedPagedTable.getGridPreferencesStore().getColumnPreferences(); - for (GridColumnPreference colPref : columPreferenceList) { if (!isColumnAdded(columnMetas, colPref.getName())) { @@ -174,11 +170,14 @@ public void initColumns(ListTable extendedPagedTable) { true)); } } - extendedPagedTable.addColumns(columnMetas); } - private void initCellPreview(final ExtendedPagedTable extendedPagedTable) { + protected void addNewColumn(ListTable extendedPagedTable, + List> columnMetas) { + } + + protected void initCellPreview(final ListTable extendedPagedTable) { extendedPagedTable.addCellPreviewHandler(new CellPreviewEvent.Handler() { @Override @@ -192,8 +191,8 @@ public void onCellPreview(final CellPreviewEvent event) { }); } - private void onMouseOverGrid(ExtendedPagedTable extendedPagedTable, - final CellPreviewEvent event) { + protected void onMouseOverGrid(final ListTable extendedPagedTable, + final CellPreviewEvent event) { TaskSummary task = event.getValue(); if (task.getDescription() != null) { @@ -203,7 +202,7 @@ private void onMouseOverGrid(ExtendedPagedTable extendedPagedTable, } } - private Column initActionsColumn() { + protected Column initActionsColumn() { List> cells = new LinkedList>(); cells.add(new ConditionalButtonActionCell(constants.Claim(), @@ -240,12 +239,12 @@ public TaskSummary getValue(TaskSummary object) { actionsColumn.setDataStoreName(COL_ID_ACTIONS); return actionsColumn; } - - private boolean isColumnAdded( List> columnMetas, - String caption ) { - if ( caption != null ) { - for ( ColumnMeta colMet : columnMetas ) { - if ( caption.equals( colMet.getColumn().getDataStoreName() ) ) { + + protected boolean isColumnAdded(List> columnMetas, + String caption) { + if (caption != null) { + for (ColumnMeta colMet : columnMetas) { + if (caption.equals(colMet.getColumn().getDataStoreName())) { return true; } } @@ -253,7 +252,7 @@ private boolean isColumnAdded( List> columnMetas, return false; } - public void addDomainSpecifColumns(ExtendedPagedTable extendedPagedTable, + public void addDomainSpecifColumns(ListTable extendedPagedTable, Set columns) { extendedPagedTable.storeColumnToPreferences(); @@ -295,11 +294,10 @@ public void addDomainSpecifColumns(ExtendedPagedTable extendedPaged true, true)); } - extendedPagedTable.addColumns(columnMetas); } - private Column initGenericColumn(final String key) { + protected Column initGenericColumn(final String key) { return createTextColumn(key, task -> task.getDomainDataValue(key)); } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListPresenter.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListPresenter.java index 14ba04ddd6..a9b4f346c8 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListPresenter.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListPresenter.java @@ -16,17 +16,20 @@ package org.jbpm.workbench.ht.client.editors.taskslist; import java.util.ArrayList; +import java.util.List; import java.util.function.Predicate; import javax.enterprise.context.Dependent; import org.jbpm.workbench.common.client.PerspectiveIds; import org.jbpm.workbench.common.client.util.TaskUtils; import org.jbpm.workbench.df.client.filter.FilterSettings; +import org.jbpm.workbench.df.client.filter.FilterSettingsBuilderHelper; import org.jbpm.workbench.ht.model.TaskSummary; import org.uberfire.client.annotations.WorkbenchMenu; import org.uberfire.client.annotations.WorkbenchScreen; import org.uberfire.workbench.model.menu.Menus; +import static org.dashbuilder.dataset.filter.FilterFactory.equalsTo; import static org.jbpm.workbench.common.client.util.TaskUtils.*; import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; @@ -66,9 +69,27 @@ public FilterSettings createTableSettingsPrototype() { } public FilterSettings createAdminTabSettings() { - //Filter status Admin - return createStatusSettings(HUMAN_TASKS_WITH_ADMIN_DATASET, - new ArrayList<>(getStatusByType(TaskUtils.TaskType.ADMIN))); + FilterSettingsBuilderHelper builder = FilterSettingsBuilderHelper.init(); + builder.initBuilder(); + + builder.dataset(HUMAN_TASKS_WITH_ADMIN_DATASET); + List status = new ArrayList<>(getStatusByType(TaskUtils.TaskType.ADMIN)); + if (status != null) { + builder.filter(COLUMN_STATUS, + equalsTo(COLUMN_STATUS, + status)); + } + builder.group(COLUMN_TASK_ID); + + addCommonColumnSettings(builder); + return builder.buildSettings(); + } + + @Override + protected void addCommonColumnSettings(FilterSettingsBuilderHelper builder) { + builder.setColumn(COLUMN_ERROR_COUNT, + constants.Error_Count()); + super.addCommonColumnSettings(builder); } @Override diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImpl.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImpl.java index 48d732c046..31e6637791 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImpl.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImpl.java @@ -15,11 +15,21 @@ */ package org.jbpm.workbench.ht.client.editors.taskslist; +import java.util.Arrays; +import java.util.List; import javax.enterprise.context.Dependent; +import javax.inject.Inject; +import com.google.gwt.dom.client.Style; +import com.google.gwt.user.cellview.client.Column; +import org.jboss.errai.ioc.client.api.ManagedInstance; import org.jboss.errai.ui.shared.api.annotations.Templated; +import org.jbpm.workbench.common.client.list.ListTable; +import org.jbpm.workbench.common.client.util.GenericErrorSummaryCountCell; +import org.jbpm.workbench.ht.model.TaskSummary; +import org.uberfire.ext.widgets.table.client.ColumnMeta; -import static org.jbpm.workbench.ht.model.TaskDataSetConstants.HUMAN_TASKS_WITH_ADMIN_DATASET; +import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; @Dependent @Templated(value = "/org/jbpm/workbench/common/client/list/AbstractMultiGridView.html", stylesheet = "/org/jbpm/workbench/common/client/resources/css/kie-manage.less") @@ -28,16 +38,27 @@ public class TaskAdminListViewImpl extends AbstractTaskListView popoverCellInstance; + + @Override + public List getInitColumns() { + return Arrays.asList(COLUMN_NAME, + COLUMN_PROCESS_ID, + COLUMN_STATUS, + COLUMN_CREATED_ON, + COLUMN_ERROR_COUNT, + COL_ID_ACTIONS); + } + @Override public void initDefaultFilters() { super.initDefaultFilters(); - initTabFilter(presenter.createAdminTabSettings(), TAB_ADMIN, constants.Task_Admin(), constants.FilterTaskAdmin(), HUMAN_TASKS_WITH_ADMIN_DATASET); - } @Override @@ -45,4 +66,29 @@ public String getGridGlobalPreferencesKey() { return DATA_SET_TASK_LIST_PREFIX; } + @Override + protected void addNewColumn(ListTable extendedPagedTable, + List> columnMetas) { + Column errorCountColumn = initErrorCountColumn(); + extendedPagedTable.addSelectionIgnoreColumn(errorCountColumn); + columnMetas.add(new ColumnMeta<>(errorCountColumn, + constants.Errors())); + extendedPagedTable.setColumnWidth(errorCountColumn, + 65, + Style.Unit.PX); + } + + private Column initErrorCountColumn() { + Column column = new Column( + popoverCellInstance.get().init(presenter)) { + @Override + public TaskSummary getValue(TaskSummary task) { + return task; + } + }; + + column.setSortable(true); + column.setDataStoreName(COLUMN_ERROR_COUNT); + return column; + } } \ No newline at end of file diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImpl.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImpl.java index 42bf945eb6..f2f7aa751c 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImpl.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImpl.java @@ -20,8 +20,10 @@ import org.jboss.errai.ui.shared.api.annotations.Templated; import org.jbpm.workbench.ht.client.resources.i18n.Constants; import org.uberfire.ext.services.shared.preferences.MultiGridPreferencesStore; +import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; -import static org.jbpm.workbench.ht.model.TaskDataSetConstants.HUMAN_TASKS_WITH_USER_DATASET; +import java.util.Arrays; +import java.util.List; @Dependent @Templated(value = "/org/jbpm/workbench/common/client/list/AbstractMultiGridView.html", stylesheet = "/org/jbpm/workbench/common/client/resources/css/kie-manage.less") @@ -34,6 +36,15 @@ public class TaskListViewImpl extends AbstractTaskListView { protected static final String TAB_ACTIVE = DATA_SET_TASK_LIST_PREFIX + "_0"; protected static final String TAB_ADMIN = DATA_SET_TASK_LIST_PREFIX + "_4"; + @Override + public List getInitColumns() { + return Arrays.asList(COLUMN_NAME, + COLUMN_PROCESS_ID, + COLUMN_STATUS, + COLUMN_CREATED_ON, + COL_ID_ACTIONS); + } + @Override protected void loadTabsFromPreferences(final MultiGridPreferencesStore multiGridPreferencesStore, final TaskListPresenter presenter) { diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskSummaryDataSetMapper.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskSummaryDataSetMapper.java index 9e5d0b0c7e..65ff86cc92 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskSummaryDataSetMapper.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/main/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskSummaryDataSetMapper.java @@ -30,61 +30,64 @@ public class TaskSummaryDataSetMapper implements BiFunction argument = ArgumentCaptor.forClass(Set.class); - verify(viewMock).addDomainSpecifColumns(any(ExtendedPagedTable.class), + verify(viewMock).addDomainSpecifColumns(any(ListTable.class), argument.capture()); assertEquals(expectedColumns, @@ -355,7 +354,7 @@ public void getDomainSpecificDataForTasksTest() { argument = ArgumentCaptor.forClass(Set.class); verify(viewMock, - times(2)).addDomainSpecifColumns(any(ExtendedPagedTable.class), + times(2)).addDomainSpecifColumns(any(ListTable.class), argument.capture()); assertEquals(expectedColumns, @@ -381,7 +380,6 @@ public void testTaskSummaryAdmin() { final TaskSummary summary = new TaskSummaryDataSetMapper().apply(dataSetMock, 0); - assertNotNull(summary); assertEquals(HUMAN_TASKS_WITH_ADMIN_DATASET.equals(dataSet), summary.isForAdmin()); @@ -541,11 +539,13 @@ public void testCreateDataSetTaskCallback() { } @Test - public void testStatusSettingsColumns(){ + public void testStatusSettingsColumns() { final String dataSetId = "dataSetId"; - FilterSettings settings = getPresenter().createStatusSettings(dataSetId, null); + FilterSettings settings = getPresenter().createStatusSettings(dataSetId, + null); - assertEquals(dataSetId, settings.getDataSetLookup().getDataSetUUID()); + assertEquals(dataSetId, + settings.getDataSetLookup().getDataSetUUID()); getDataSetExpectedColumns().forEach(c -> assertNotNull(settings.getColumnSettings(c))); } @@ -604,5 +604,4 @@ public void testReadyTaskSelection() { verify(taskSelected).fire(captor.capture()); assertFalse(captor.getValue().isForLog()); } - } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListViewTest.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListViewTest.java index 4281e9a0a7..59697320d0 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListViewTest.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/AbstractTaskListViewTest.java @@ -15,7 +15,6 @@ */ package org.jbpm.workbench.ht.client.editors.taskslist; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -23,21 +22,17 @@ import com.google.gwt.user.cellview.client.RowStyles; import org.jbpm.workbench.common.client.list.AbstractMultiGridViewTest; -import org.jbpm.workbench.common.client.list.ExtendedPagedTable; import org.jbpm.workbench.common.client.list.ListTable; import org.jbpm.workbench.common.client.util.TaskUtils; import org.jbpm.workbench.ht.client.resources.HumanTaskResources; import org.jbpm.workbench.ht.model.TaskSummary; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.uberfire.ext.services.shared.preferences.GridColumnPreference; import org.uberfire.ext.services.shared.preferences.GridGlobalPreferences; import org.uberfire.ext.widgets.table.client.ColumnMeta; import static org.jbpm.workbench.common.client.list.AbstractMultiGridView.COL_ID_ACTIONS; -import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; +import static org.jbpm.workbench.ht.model.TaskDataSetConstants.COLUMN_NAME; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -47,15 +42,6 @@ public abstract class AbstractTaskListViewTest extends AbstractMultiGridViewTest public abstract AbstractTaskListPresenter getPresenter(); - @Override - public List getExpectedInitialColumns() { - return Arrays.asList(COLUMN_NAME, - COLUMN_PROCESS_ID, - COLUMN_STATUS, - COLUMN_CREATED_ON, - COL_ID_ACTIONS); - } - @Override public List getExpectedBannedColumns() { return Arrays.asList(COLUMN_NAME, @@ -67,44 +53,13 @@ public Integer getExpectedNumberOfColumns() { return 15; } - @Test - public void initColumnsWithTaskVarColumnsTest() { - final ListTable currentListGrid = spy(new ListTable<>(new GridGlobalPreferences())); - doAnswer(new Answer() { - @Override - public Void answer(InvocationOnMock invocationOnMock) throws Throwable { - final List columns = (List) invocationOnMock.getArguments()[0]; - assertTrue(columns.size() == 18); - return null; - } - }).when(currentListGrid).addColumns(anyList()); - - ArrayList columnPreferences = new ArrayList(); - columnPreferences.add(new GridColumnPreference("var1", - 0, - "40")); - columnPreferences.add(new GridColumnPreference("var2", - 1, - "40")); - columnPreferences.add(new GridColumnPreference("var3", - 1, - "40")); - when(currentListGrid.getGridPreferencesStore()).thenReturn(gridPreferencesStore); - when(gridPreferencesStore.getColumnPreferences()).thenReturn(columnPreferences); - - getView().initColumns(currentListGrid); - - verify(currentListGrid).addColumns(anyList()); - } - @Test public void addDomainSpecifColumnsTest() { - final ExtendedPagedTable currentListGrid = spy(new ExtendedPagedTable<>(new GridGlobalPreferences())); + final ListTable currentListGrid = spy(new ListTable<>(new GridGlobalPreferences())); final Set domainColumns = new HashSet(); domainColumns.add("var1"); domainColumns.add("var2"); domainColumns.add("var3"); - getView().addDomainSpecifColumns(currentListGrid, domainColumns); @@ -152,4 +107,6 @@ public void testStylesNotAppliedDependingOnPriority() { .build(), 1)); } + + public abstract List getExpectedInitialColumns(); } \ No newline at end of file diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImplTest.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImplTest.java index f088eb0e83..b1bfb99e72 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImplTest.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskAdminListViewImplTest.java @@ -15,18 +15,33 @@ */ package org.jbpm.workbench.ht.client.editors.taskslist; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.google.gwtmockito.GwtMockitoTestRunner; +import org.jboss.errai.ioc.client.api.ManagedInstance; +import org.jbpm.workbench.common.client.list.ListTable; +import org.jbpm.workbench.common.client.util.GenericErrorSummaryCountCell; +import org.jbpm.workbench.ht.model.TaskSummary; import org.junit.Before; +import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.uberfire.ext.services.shared.preferences.GridColumnPreference; +import org.uberfire.ext.services.shared.preferences.GridGlobalPreferences; +import org.uberfire.ext.widgets.table.client.ColumnMeta; +import static org.jbpm.workbench.common.client.list.AbstractMultiGridView.COL_ID_ACTIONS; import static org.jbpm.workbench.common.client.list.AbstractMultiGridView.TAB_SEARCH; import static org.jbpm.workbench.ht.client.editors.taskslist.TaskAdminListViewImpl.TAB_ADMIN; +import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; +import static org.junit.Assert.*; +import static org.mockito.Matchers.anyList; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) @@ -39,6 +54,12 @@ public class TaskAdminListViewImplTest extends AbstractTaskListViewTest { @Mock private TaskAdminListPresenter presenter; + @Spy + private GenericErrorSummaryCountCell cellMock; + + @Mock + private ManagedInstance cellInstance; + @Override public AbstractTaskListView getView() { return view; @@ -55,10 +76,57 @@ public List getExpectedTabs() { TAB_ADMIN); } + @Override + public List getExpectedInitialColumns() { + return Arrays.asList(COLUMN_NAME, + COLUMN_PROCESS_ID, + COLUMN_STATUS, + COLUMN_CREATED_ON, + COLUMN_ERROR_COUNT, + COL_ID_ACTIONS); + } + + @Override + public Integer getExpectedNumberOfColumns() { + return 16; + } + @Before @Override public void setupMocks() { super.setupMocks(); when(presenter.createAdminTabSettings()).thenReturn(filterSettings); + when(cellInstance.get()).thenReturn(cellMock); + } + + @Test + public void initColumnsWithTaskVarColumnsTest() { + final ListTable currentListGrid = spy(new ListTable<>(new GridGlobalPreferences())); + doAnswer(new Answer() { + @Override + public Void answer(InvocationOnMock invocationOnMock) throws Throwable { + final List columns = (List) invocationOnMock.getArguments()[0]; + assertEquals(19, + columns.size()); + return null; + } + }).when(currentListGrid).addColumns(anyList()); + + ArrayList columnPreferences = new ArrayList(); + columnPreferences.add(new GridColumnPreference("var1", + 0, + "40")); + columnPreferences.add(new GridColumnPreference("var2", + 1, + "40")); + columnPreferences.add(new GridColumnPreference("var3", + 1, + "40")); + when(currentListGrid.getGridPreferencesStore()).thenReturn(gridPreferencesStore); + when(gridPreferencesStore.getColumnPreferences()).thenReturn(columnPreferences); + + getView().initColumns(currentListGrid); + + verify(currentListGrid).addColumns(anyList()); } } diff --git a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImplTest.java b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImplTest.java index e0152fd112..1366407368 100644 --- a/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImplTest.java +++ b/jbpm-wb-human-tasks/jbpm-wb-human-tasks-client/src/test/java/org/jbpm/workbench/ht/client/editors/taskslist/TaskListViewImplTest.java @@ -15,22 +15,33 @@ */ package org.jbpm.workbench.ht.client.editors.taskslist; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.google.gwtmockito.GwtMockitoTestRunner; import org.jbpm.workbench.common.client.list.ExtendedPagedTable; +import org.jbpm.workbench.common.client.list.ListTable; +import org.jbpm.workbench.ht.model.TaskSummary; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.uberfire.ext.services.shared.preferences.GridColumnPreference; +import org.uberfire.ext.services.shared.preferences.GridGlobalPreferences; import org.uberfire.ext.services.shared.preferences.MultiGridPreferencesStore; +import org.uberfire.ext.widgets.table.client.ColumnMeta; import org.uberfire.mvp.Command; +import static org.jbpm.workbench.common.client.list.AbstractMultiGridView.COL_ID_ACTIONS; import static org.jbpm.workbench.ht.client.editors.taskslist.TaskListViewImpl.*; +import static org.jbpm.workbench.ht.model.TaskDataSetConstants.*; import static org.junit.Assert.*; +import static org.mockito.Matchers.anyList; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) @@ -62,6 +73,15 @@ public List getExpectedTabs() { TAB_ACTIVE); } + @Override + public List getExpectedInitialColumns() { + return Arrays.asList(COLUMN_NAME, + COLUMN_PROCESS_ID, + COLUMN_STATUS, + COLUMN_CREATED_ON, + COL_ID_ACTIONS); + } + @Before @Override public void setupMocks() { @@ -99,4 +119,35 @@ public void testLoadPreferencesRemovingAdminTab() { any(Command.class), eq(false)); } + + @Test + public void initColumnsWithTaskVarColumnsTest() { + final ListTable currentListGrid = spy(new ListTable<>(new GridGlobalPreferences())); + doAnswer(new Answer() { + @Override + public Void answer(InvocationOnMock invocationOnMock) throws Throwable { + final List columns = (List) invocationOnMock.getArguments()[0]; + assertEquals(18, + columns.size()); + return null; + } + }).when(currentListGrid).addColumns(anyList()); + + ArrayList columnPreferences = new ArrayList(); + columnPreferences.add(new GridColumnPreference("var1", + 0, + "40")); + columnPreferences.add(new GridColumnPreference("var2", + 1, + "40")); + columnPreferences.add(new GridColumnPreference("var3", + 1, + "40")); + when(currentListGrid.getGridPreferencesStore()).thenReturn(gridPreferencesStore); + when(gridPreferencesStore.getColumnPreferences()).thenReturn(columnPreferences); + + getView().initColumns(currentListGrid); + + verify(currentListGrid).addColumns(anyList()); + } } diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-api/src/main/java/org/jbpm/workbench/pr/model/ProcessInstanceSummary.java b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-api/src/main/java/org/jbpm/workbench/pr/model/ProcessInstanceSummary.java index 27831861e6..1863b113cf 100644 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-api/src/main/java/org/jbpm/workbench/pr/model/ProcessInstanceSummary.java +++ b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-api/src/main/java/org/jbpm/workbench/pr/model/ProcessInstanceSummary.java @@ -22,10 +22,10 @@ import java.util.Map; import org.jboss.errai.common.client.api.annotations.Portable; -import org.jbpm.workbench.common.model.GenericSummary; +import org.jbpm.workbench.common.model.GenericErrorSummary; @Portable -public class ProcessInstanceSummary extends GenericSummary { +public class ProcessInstanceSummary extends GenericErrorSummary { private Long processInstanceId; private String processId; @@ -42,7 +42,6 @@ public class ProcessInstanceSummary extends GenericSummary { private Map domainData = new HashMap(); private List activeTasks; private Date lastModificationDate; - private Integer errorCount; public ProcessInstanceSummary(Long processInstanceId, String processId, @@ -58,7 +57,7 @@ public ProcessInstanceSummary(Long processInstanceId, Long parentId, Date lastModificationDate, Integer errorCount) { - super(); + super(errorCount, processInstanceId, processName); this.id = processInstanceId; this.name = processName; this.processInstanceId = processInstanceId; @@ -74,7 +73,6 @@ public ProcessInstanceSummary(Long processInstanceId, this.correlationKey = correlationKey; this.parentId = parentId; this.lastModificationDate = lastModificationDate; - this.errorCount = errorCount; } public ProcessInstanceSummary() { @@ -206,14 +204,6 @@ public void setLastModificationDate(Date lastModificationDate) { this.lastModificationDate = lastModificationDate; } - public Integer getErrorCount() { - return this.errorCount; - } - - public void setErrorCount(Integer errorCount) { - this.errorCount = errorCount; - } - @Override public String toString() { return "ProcessInstanceSummary{" + @@ -232,7 +222,6 @@ public String toString() { ", domainData=" + domainData + ", activeTasks=" + activeTasks + ", lastModificationDate=" + lastModificationDate + - ", errorCount=" + errorCount + "} " + super.toString(); } } diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListPresenter.java b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListPresenter.java index 829534830d..62539aac62 100644 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListPresenter.java +++ b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListPresenter.java @@ -643,7 +643,8 @@ public void openTaskView(final String pid) { SEARCH_PARAMETER_PROCESS_INSTANCE_ID, pid); } - + + @Override public void openErrorView(final String pid) { final PlaceRequest request = new DefaultPlaceRequest(EXECUTION_ERRORS); request.addParameter(SEARCH_PARAMETER_PROCESS_INSTANCE_ID, @@ -669,6 +670,7 @@ public Predicate getViewTasksActionCondition() { return pis -> isUserAuthorizedForPerspective(TASKS_ADMIN) || isUserAuthorizedForPerspective(TASKS); } + @Override public Predicate getViewErrorsActionCondition() { return pis -> isUserAuthorizedForPerspective(EXECUTION_ERRORS) && pis.getErrorCount() != null && pis.getErrorCount() > 0; } diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImpl.java b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImpl.java index 025bfdae24..adf6347df8 100644 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImpl.java +++ b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImpl.java @@ -41,6 +41,7 @@ import org.jbpm.workbench.common.client.list.ListTable; import org.jbpm.workbench.common.client.util.ConditionalButtonActionCell; import org.jbpm.workbench.common.client.util.DateUtils; +import org.jbpm.workbench.common.client.util.GenericErrorSummaryCountCell; import org.jbpm.workbench.pr.client.resources.i18n.Constants; import org.jbpm.workbench.pr.model.ProcessInstanceSummary; import org.kie.api.runtime.process.ProcessInstance; @@ -65,7 +66,7 @@ public class ProcessInstanceListViewImpl extends AbstractMultiGridView popoverCellInstance; + private ManagedInstance popoverCellInstance; @Override public List getInitColumns() { diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.css b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.css deleted file mode 100644 index eb3a5534ff..0000000000 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.css +++ /dev/null @@ -1,12 +0,0 @@ -.process-instance-error-count { - margin-left: 0px; - cursor: initial !important; -} - -.process-instance-error-count.error-present { - background-color: #c00; -} - -.process-instance-error-count.link-available { - cursor: pointer !important; -} \ No newline at end of file diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.html b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.html deleted file mode 100644 index e955e7ebc2..0000000000 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceSummaryErrorCountCell.html +++ /dev/null @@ -1,3 +0,0 @@ - - \ No newline at end of file diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/resources/i18n/Constants.java b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/resources/i18n/Constants.java index ac0a727b10..1e7c6f978f 100644 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/resources/i18n/Constants.java +++ b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/main/java/org/jbpm/workbench/pr/client/resources/i18n/Constants.java @@ -237,8 +237,6 @@ public interface Constants extends Messages { String SelectServerTemplate(); - String ErrorCountNumberView(@PluralCount int errCount); - String FilterByProcessInstanceId(); String FilterByInitiator(); diff --git a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/test/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImplTest.java b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/test/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImplTest.java index 62cb8d4397..64af0a743e 100644 --- a/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/test/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImplTest.java +++ b/jbpm-wb-process-runtime/jbpm-wb-process-runtime-client/src/test/java/org/jbpm/workbench/pr/client/editors/instance/list/ProcessInstanceListViewImplTest.java @@ -23,6 +23,7 @@ import org.jbpm.workbench.common.client.list.AbstractMultiGridPresenter; import org.jbpm.workbench.common.client.list.AbstractMultiGridView; import org.jbpm.workbench.common.client.list.AbstractMultiGridViewTest; +import org.jbpm.workbench.common.client.util.GenericErrorSummaryCountCell; import org.jbpm.workbench.pr.model.ProcessInstanceSummary; import org.junit.Before; import org.junit.runner.RunWith; @@ -41,10 +42,10 @@ public class ProcessInstanceListViewImplTest extends AbstractMultiGridViewTest

cellInstance; + private ManagedInstance cellInstance; @InjectMocks @Spy