From 2cc33564cfe4bf5f9496d4516625625ac03e08f8 Mon Sep 17 00:00:00 2001 From: Cristiano Nicolai Date: Wed, 6 Apr 2016 02:34:08 +1000 Subject: [PATCH] BZ1263753 - Disable link to process instance details when activity not present New perspective exclusive to Drools that removes the new task button --- .../TaskProcessContextPresenter.java | 81 ++-- .../grid/AbstractTasksListGridPresenter.java | 441 ++++++++++++++++++ .../grid/DroolsTasksListGridPresenter.java | 59 +++ .../dash/DataSetTasksListGridPresenter.java | 423 +---------------- .../dash/DataSetTasksListGridViewImpl.java | 9 +- .../DroolsTasksListPerspective.java | 52 +++ .../TaskProcessContextPresenterTest.java | 60 ++- .../AbstractTasksListGridPresenterTest.java | 431 +++++++++++++++++ .../DroolsTasksListGridPresenterTest.java | 51 ++ .../DataSetTasksListGridPresenterTest.java | 403 +--------------- .../console/ng/client/ShowcaseEntryPoint.java | 3 + 11 files changed, 1157 insertions(+), 856 deletions(-) create mode 100644 jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenter.java create mode 100644 jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenter.java create mode 100644 jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/perspectives/DroolsTasksListPerspective.java create mode 100644 jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenterTest.java create mode 100644 jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenterTest.java diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenter.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenter.java index 7717639c8e..a03b59b02e 100644 --- a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenter.java +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenter.java @@ -14,6 +14,7 @@ */ package org.jbpm.console.ng.ht.client.editors.taskprocesscontext; +import java.util.Set; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Event; @@ -31,13 +32,18 @@ import org.jbpm.console.ng.ht.service.TaskQueryService; import org.jbpm.console.ng.pr.model.ProcessInstanceSummary; import org.jbpm.console.ng.pr.model.events.ProcessInstancesWithDetailsRequestEvent; +import org.uberfire.client.mvp.Activity; +import org.uberfire.client.mvp.ActivityManager; import org.uberfire.client.mvp.PlaceManager; import org.uberfire.client.mvp.UberView; import org.uberfire.ext.widgets.common.client.callbacks.DefaultErrorCallback; +import org.uberfire.mvp.impl.DefaultPlaceRequest; @Dependent public class TaskProcessContextPresenter { + public static final String PROCESS_INSTANCE_DETAILS = "DataSet Process Instances With Variables"; + public interface TaskProcessContextView extends UberView { void displayNotification(String text); @@ -51,6 +57,8 @@ public interface TaskProcessContextView extends UberView processInstanceSelected; @@ -61,25 +69,29 @@ public interface TaskProcessContextView extends UberView taskQueryService, - Caller dataServices, - Event processInstanceSelected - ) { + public TaskProcessContextPresenter(TaskProcessContextView view, + PlaceManager placeManager, + Caller taskQueryService, + Caller dataServices, + Event processInstanceSelected, + ActivityManager activityManager) { this.view = view; this.taskQueryService = taskQueryService; this.dataServices = dataServices; this.placeManager = placeManager; this.processInstanceSelected = processInstanceSelected; + this.activityManager = activityManager; } @PostConstruct public void init() { view.init(this); + final Set activity = activityManager.getActivities(new DefaultPlaceRequest(PROCESS_INSTANCE_DETAILS)); + enableProcessInstanceDetails = activity.isEmpty() == false; + view.enablePIDetailsButton(enableProcessInstanceDetails); } public IsWidget getView() { @@ -88,39 +100,40 @@ public IsWidget getView() { public void goToProcessInstanceDetails() { dataServices.call(new RemoteCallback() { - @Override - public void callback(ProcessInstanceSummary summary) { - placeManager.goTo("DataSet Process Instances With Variables"); - processInstanceSelected.fire(new ProcessInstancesWithDetailsRequestEvent( - summary.getDeploymentId(), - summary.getProcessInstanceId(), - summary.getProcessId(), - summary.getProcessName(), - summary.getState()) - ); - } - }, + @Override + public void callback(ProcessInstanceSummary summary) { + placeManager.goTo(PROCESS_INSTANCE_DETAILS); + processInstanceSelected.fire(new ProcessInstancesWithDetailsRequestEvent( + summary.getDeploymentId(), + summary.getProcessInstanceId(), + summary.getProcessId(), + summary.getProcessName(), + summary.getState()) + ); + } + }, new DefaultErrorCallback() ).getProcessInstanceById(currentProcessInstanceId); } public void refreshProcessContextOfTask() { taskQueryService.call(new RemoteCallback() { - @Override - public void callback(TaskSummary details) { - if (details == null || details.getProcessInstanceId() == -1) { - view.setProcessInstanceId("None"); - view.setProcessId("None"); - view.enablePIDetailsButton(false); - return; - } - - currentProcessInstanceId = details.getProcessInstanceId(); - view.setProcessInstanceId(String.valueOf(currentProcessInstanceId)); - view.setProcessId(details.getProcessId()); - view.enablePIDetailsButton(true); - } - }, + @Override + public void callback(TaskSummary details) { + if (details == null || details.getProcessInstanceId() == -1) { + view.setProcessInstanceId("None"); + view.setProcessId("None"); + view.enablePIDetailsButton(false); + return; + } + + currentProcessInstanceId = details.getProcessInstanceId(); + view.setProcessInstanceId(String.valueOf(currentProcessInstanceId)); + view.setProcessId(details.getProcessId()); + view.enablePIDetailsButton(true); + view.enablePIDetailsButton(enableProcessInstanceDetails); + } + }, new DefaultErrorCallback() ).getItem(new TaskKey(currentTaskId)); } diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenter.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenter.java new file mode 100644 index 0000000000..ebfff14f79 --- /dev/null +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenter.java @@ -0,0 +1,441 @@ +/* + * Copyright 2016 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.console.ng.ht.client.editors.taskslist.grid; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import javax.enterprise.event.Observes; +import javax.inject.Inject; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.cellview.client.ColumnSortList; +import com.google.gwt.view.client.AsyncDataProvider; +import com.google.gwt.view.client.HasData; +import com.google.gwt.view.client.Range; +import org.dashbuilder.dataset.DataSet; +import org.dashbuilder.dataset.DataSetOp; +import org.dashbuilder.dataset.DataSetOpType; +import org.dashbuilder.dataset.client.DataSetReadyCallback; +import org.dashbuilder.dataset.filter.ColumnFilter; +import org.dashbuilder.dataset.filter.CoreFunctionFilter; +import org.dashbuilder.dataset.filter.CoreFunctionType; +import org.dashbuilder.dataset.filter.DataSetFilter; +import org.dashbuilder.dataset.filter.FilterFactory; +import org.dashbuilder.dataset.sort.SortOrder; +import org.jboss.errai.bus.client.api.messaging.Message; +import org.jboss.errai.common.client.api.Caller; +import org.jboss.errai.common.client.api.ErrorCallback; +import org.jboss.errai.common.client.api.RemoteCallback; +import org.jboss.errai.security.shared.api.Group; +import org.jboss.errai.security.shared.api.identity.User; +import org.jbpm.console.ng.df.client.filter.FilterSettings; +import org.jbpm.console.ng.df.client.list.base.DataSetQueryHelper; +import org.jbpm.console.ng.gc.client.dataset.AbstractDataSetReadyCallback; +import org.jbpm.console.ng.gc.client.experimental.grid.base.ExtendedPagedTable; +import org.jbpm.console.ng.gc.client.list.base.AbstractListView; +import org.jbpm.console.ng.gc.client.list.base.AbstractScreenListPresenter; +import org.jbpm.console.ng.gc.client.list.base.events.SearchEvent; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.dash.DataSetTasksListGridPresenter; +import org.jbpm.console.ng.ht.client.i18n.Constants; +import org.jbpm.console.ng.ht.model.TaskSummary; +import org.jbpm.console.ng.ht.service.TaskLifeCycleService; +import org.uberfire.client.annotations.WorkbenchPartTitle; +import org.uberfire.client.annotations.WorkbenchPartView; +import org.uberfire.client.mvp.UberView; +import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter; +import org.uberfire.ext.widgets.common.client.menu.RefreshSelectorMenuBuilder; +import org.uberfire.paging.PageResponse; +import org.uberfire.workbench.model.menu.Menus; + +import static org.dashbuilder.dataset.filter.FilterFactory.*; +import static org.jbpm.console.ng.ht.model.TaskDataSetConstants.*; + +public abstract class AbstractTasksListGridPresenter extends AbstractScreenListPresenter { + + public interface DataSetTaskListView extends AbstractListView.ListView { + + int getRefreshValue(); + + void saveRefreshValue(int newValue); + + void applyFilterOnPresenter(String key); + + void addDomainSpecifColumns(ExtendedPagedTable extendedPagedTable, Set columns); + + FilterSettings getVariablesTableSettings(String processName); + } + + @Inject + private DataSetTasksListGridPresenter.DataSetTaskListView view; + + private Constants constants = GWT.create(Constants.class); + + @Inject + private Caller taskOperationsService; + + @Inject + DataSetQueryHelper dataSetQueryHelper; + + @Inject + private DataSetQueryHelper dataSetQueryHelperDomainSpecific; + + @Inject + private ErrorPopupPresenter errorPopup; + + protected RefreshSelectorMenuBuilder refreshSelectorMenuBuilder = new RefreshSelectorMenuBuilder(this); + + public AbstractTasksListGridPresenter() { + + dataProvider = new AsyncDataProvider() { + + @Override + protected void onRangeChanged(HasData display) { + view.showBusyIndicator(constants.Loading()); + final Range visibleRange = view.getListGrid().getVisibleRange(); + getData(visibleRange); + + } + }; + } + + public AbstractTasksListGridPresenter(DataSetTasksListGridPresenter.DataSetTaskListView view, + Caller taskOperationsService, + DataSetQueryHelper dataSetQueryHelper, + DataSetQueryHelper dataSetQueryHelperDomainSpecific, + User identity) { + this.view = view; + this.taskOperationsService = taskOperationsService; + this.dataSetQueryHelper = dataSetQueryHelper; + this.dataSetQueryHelperDomainSpecific = dataSetQueryHelperDomainSpecific; + this.identity = identity; + } + + @Override + protected AbstractListView.ListView getListView() { + return view; + } + + @Override + public void getData(final Range visibleRange) { + try { + if (!isAddingDefaultFilters()) { + FilterSettings currentTableSettings = dataSetQueryHelper.getCurrentTableSettings(); + if (currentTableSettings != null) { + currentTableSettings.setTablePageSize(view.getListGrid().getPageSize()); + ColumnSortList columnSortList = view.getListGrid().getColumnSortList(); + if (columnSortList != null && columnSortList.size() > 0) { + dataSetQueryHelper.setLastOrderedColumn((columnSortList.size() > 0) ? columnSortList.get(0).getColumn().getDataStoreName() : ""); + dataSetQueryHelper.setLastSortOrder((columnSortList.size() > 0) && columnSortList.get(0).isAscending() ? SortOrder.ASCENDING : SortOrder.DESCENDING); + } else { + dataSetQueryHelper.setLastOrderedColumn(COLUMN_CREATED_ON); + dataSetQueryHelper.setLastSortOrder(SortOrder.ASCENDING); + } + + final List filters = getColumnFilters(textSearchStr); + if (filters.isEmpty() == false) { + if (currentTableSettings.getDataSetLookup().getFirstFilterOp() != null) { + currentTableSettings.getDataSetLookup().getFirstFilterOp().addFilterColumn(OR(filters)); + } else { + final DataSetFilter filter = new DataSetFilter(); + filter.addFilterColumn(OR(filters)); + currentTableSettings.getDataSetLookup().addOperation(filter); + } + } + boolean isAdminDataset = currentTableSettings.getDataSetLookup().getDataSetUUID().equals(HUMAN_TASKS_WITH_ADMIN_DATASET); + + if (isAdminDataset || + currentTableSettings.getDataSetLookup().getDataSetUUID().equals(HUMAN_TASKS_WITH_USER_DATASET)) { + if (currentTableSettings.getDataSetLookup().getFirstFilterOp() != null) { + currentTableSettings.getDataSetLookup().getFirstFilterOp().addFilterColumn(getUserGroupFilters(isAdminDataset)); + } else { + final DataSetFilter filter = new DataSetFilter(); + filter.addFilterColumn(getUserGroupFilters(isAdminDataset)); + currentTableSettings.getDataSetLookup().addOperation(filter); + } + + } + dataSetQueryHelper.setDataSetHandler(currentTableSettings); + dataSetQueryHelper.lookupDataSet(visibleRange.getStart(), createDataSetTaskCallback(visibleRange.getStart(), currentTableSettings)); + } + } + } catch (Exception e) { + errorPopup.showMessage(Constants.INSTANCE.UnexpectedError(e.getMessage())); + } + + } + + protected List getColumnFilters(final String searchString) { + final List filters = new ArrayList(); + if (searchString != null && searchString.trim().length() > 0) { + try { + final Long taskId = Long.valueOf(searchString.trim()); + filters.add(equalsTo(COLUMN_TASK_ID, taskId)); + } catch (NumberFormatException ex) { + filters.add(likeTo(COLUMN_NAME, "%" + searchString.toLowerCase() + "%", false)); + filters.add(likeTo(COLUMN_DESCRIPTION, "%" + searchString.toLowerCase() + "%", false)); + filters.add(likeTo(COLUMN_PROCESS_ID, "%" + searchString.toLowerCase() + "%", false)); + } + } + return filters; + } + + /** + * 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 + * roles, without restriction over the task owner. + *
In other cases, retrieve the tasks available for the user logged roles AND without owner(claimed by the groups + * members) OR the user logged owned tasks + * @param isAdminDataset true if the filter to create is an adminDataSet + * @return the dynamic filter to add, depeding on the user logged roles and the kind of dataset + */ + protected ColumnFilter getUserGroupFilters(boolean isAdminDataset) { + Set groups = identity.getGroups(); + List condList = new ArrayList(); + for (Group g : groups) { + condList.add(FilterFactory.equalsTo(COLUMN_ORGANIZATIONAL_ENTITY, g.getName())); + + } + condList.add(FilterFactory.equalsTo(COLUMN_ORGANIZATIONAL_ENTITY, identity.getIdentifier())); + ColumnFilter myGroupFilter; + if (isAdminDataset) { + return FilterFactory.OR(COLUMN_ORGANIZATIONAL_ENTITY, condList); + } else { + myGroupFilter = FilterFactory.AND(FilterFactory.OR(condList), + FilterFactory.OR(FilterFactory.equalsTo(COLUMN_ACTUAL_OWNER, ""), FilterFactory.isNull(COLUMN_ACTUAL_OWNER))); + return FilterFactory.OR(myGroupFilter, FilterFactory.equalsTo(COLUMN_ACTUAL_OWNER, identity.getIdentifier())); + } + } + + protected DataSetReadyCallback createDataSetTaskCallback(final int startRange, final FilterSettings tableSettings) { + return new AbstractDataSetReadyCallback(errorPopup, view, tableSettings.getDataSet()) { + + @Override + public void callback(DataSet dataSet) { + if (dataSet != null) { + final List myTasksFromDataSet = new ArrayList(); + + for (int i = 0; i < dataSet.getRowCount(); i++) { + myTasksFromDataSet.add(createTaskSummaryFromDataSet(dataSet, i)); + + } + List ops = tableSettings.getDataSetLookup().getOperationList(); + String filterValue = isFilteredByTaskName(ops); //Add here the check to add the domain data columns taskName? + + + if (filterValue != null) { + getDomainSpecifDataForTasks(startRange, dataSet.getRowCountNonTrimmed(), filterValue, myTasksFromDataSet); + } else { + PageResponse taskSummaryPageResponse = new PageResponse(); + taskSummaryPageResponse.setPageRowList(myTasksFromDataSet); + taskSummaryPageResponse.setStartRowIndex(startRange); + taskSummaryPageResponse.setTotalRowSize(dataSet.getRowCountNonTrimmed()); + taskSummaryPageResponse.setTotalRowSizeExact(true); + if (startRange + dataSet.getRowCount() == dataSet.getRowCountNonTrimmed()) { + taskSummaryPageResponse.setLastPage(true); + } else { + taskSummaryPageResponse.setLastPage(false); + } + + updateDataOnCallback(taskSummaryPageResponse); + } + + } + view.hideBusyIndicator(); + } + + }; + } + + protected String isFilteredByTaskName(List ops) { + for (DataSetOp dataSetOp : ops) { + if (dataSetOp.getType().equals(DataSetOpType.FILTER)) { + List filters = ((DataSetFilter) dataSetOp).getColumnFilterList(); + + for (ColumnFilter filter : filters) { + + if (filter instanceof CoreFunctionFilter) { + CoreFunctionFilter coreFilter = ((CoreFunctionFilter) filter); + if (filter.getColumnId().toUpperCase().equals(COLUMN_NAME.toUpperCase()) && + ((CoreFunctionFilter) filter).getType() == CoreFunctionType.EQUALS_TO) { + + List parameters = coreFilter.getParameters(); + if (parameters.size() > 0) { + return parameters.get(0).toString(); + } + } + } + } + } + } + + return null; + + } + + public void getDomainSpecifDataForTasks(final int startRange, final int rowCountNotTrimmed, String filterValue, final List myTasksFromDataSet) { + + FilterSettings variablesTableSettings = view.getVariablesTableSettings(filterValue); + variablesTableSettings.setTablePageSize(-1); + + dataSetQueryHelperDomainSpecific.setDataSetHandler(variablesTableSettings); + dataSetQueryHelperDomainSpecific.setCurrentTableSettings(variablesTableSettings); + dataSetQueryHelperDomainSpecific.setLastOrderedColumn(COLUMN_TASK_ID); + dataSetQueryHelperDomainSpecific.setLastSortOrder(SortOrder.ASCENDING); + + List tasksIds = new ArrayList(); + for (TaskSummary task : myTasksFromDataSet) { + tasksIds.add(task.getTaskId()); + } + DataSetFilter filter = new DataSetFilter(); + ColumnFilter filter1 = FilterFactory.equalsTo(COLUMN_TASK_VARIABLE_TASK_ID, tasksIds); + filter.addFilterColumn(filter1); + variablesTableSettings.getDataSetLookup().addOperation(filter); + + dataSetQueryHelperDomainSpecific.lookupDataSet(0, createDataSetDomainSpecificCallback(startRange, rowCountNotTrimmed, myTasksFromDataSet, variablesTableSettings.getDataSet())); + + } + + protected DataSetReadyCallback createDataSetDomainSpecificCallback(final int startRange, final int totalRowSize, final List instances, final DataSet dataset) { + return new AbstractDataSetReadyCallback(errorPopup, view, dataset) { + @Override + public void callback(DataSet dataSet) { + if (dataSet.getRowCount() > 0) { + Set columns = new HashSet(); + for (int i = 0; i < dataSet.getRowCount(); i++) { + Long taskId = dataSetQueryHelperDomainSpecific.getColumnLongValue(dataSet, COLUMN_TASK_ID, i); + String variableName = dataSetQueryHelperDomainSpecific.getColumnStringValue(dataSet, COLUMN_TASK_VARIABLE_NAME, i); + String variableValue = dataSetQueryHelperDomainSpecific.getColumnStringValue(dataSet, COLUMN_TASK_VARIABLE_VALUE, i); + + for (TaskSummary task : instances) { + if (task.getTaskId().equals(taskId)) { + task.addDomainData(variableName, variableValue); + columns.add(variableName); + } + } + } + view.addDomainSpecifColumns(view.getListGrid(), columns); + } + PageResponse taskSummaryPageResponse = new PageResponse(); + taskSummaryPageResponse.setPageRowList(instances); + taskSummaryPageResponse.setStartRowIndex(startRange); + taskSummaryPageResponse.setTotalRowSize(totalRowSize); + taskSummaryPageResponse.setTotalRowSizeExact(true); + if (startRange + instances.size() == totalRowSize) { + taskSummaryPageResponse.setLastPage(true); + } else { + taskSummaryPageResponse.setLastPage(false); + } + + updateDataOnCallback(taskSummaryPageResponse); + } + + }; + } + + protected TaskSummary createTaskSummaryFromDataSet(final DataSet dataSet, int i) { + return new TaskSummary( + dataSetQueryHelper.getColumnLongValue(dataSet, COLUMN_TASK_ID, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_NAME, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_DESCRIPTION, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_STATUS, i), + dataSetQueryHelper.getColumnIntValue(dataSet, COLUMN_PRIORITY, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_ACTUAL_OWNER, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_CREATED_BY, i), + dataSetQueryHelper.getColumnDateValue(dataSet, COLUMN_CREATED_ON, i), + dataSetQueryHelper.getColumnDateValue(dataSet, COLUMN_ACTIVATION_TIME, i), + dataSetQueryHelper.getColumnDateValue(dataSet, COLUMN_DUE_DATE, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_PROCESS_ID, i), + dataSetQueryHelper.getColumnLongValue(dataSet, COLUMN_PROCESS_SESSION_ID, i), + dataSetQueryHelper.getColumnLongValue(dataSet, COLUMN_PROCESS_INSTANCE_ID, i), + dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_DEPLOYMENT_ID, i), + dataSetQueryHelper.getColumnLongValue(dataSet, COLUMN_PARENT_ID, i), + HUMAN_TASKS_WITH_ADMIN_DATASET.equals(dataSet.getUUID())); + } + + public void filterGrid(FilterSettings tableSettings) { + dataSetQueryHelper.setCurrentTableSettings(tableSettings); + refreshGrid(); + } + + @WorkbenchPartTitle + public String getTitle() { + return constants.Tasks_List(); + } + + @WorkbenchPartView + public UberView getView() { + return view; + } + + public void releaseTask(final Long taskId, + final String userId) { + taskOperationsService.call(new RemoteCallback() { + @Override + public void callback(Void nothing) { + view.displayNotification(Constants.INSTANCE.TaskReleased(String.valueOf(taskId))); + refreshGrid(); + } + }, new ErrorCallback() { + @Override + public boolean error(Message message, + Throwable throwable) { + errorPopup.showMessage(Constants.INSTANCE.UnexpectedError(throwable.getMessage())); + return true; + } + }).release(taskId, userId); + } + + public void claimTask(final Long taskId, + final String userId, + final String deploymentId) { + taskOperationsService.call(new RemoteCallback() { + @Override + public void callback(Void nothing) { + view.displayNotification(Constants.INSTANCE.TaskClaimed(String.valueOf(taskId))); + refreshGrid(); + } + }, new ErrorCallback() { + @Override + public boolean error(Message message, + Throwable throwable) { + errorPopup.showMessage(Constants.INSTANCE.UnexpectedError(throwable.getMessage())); + return true; + } + }).claim(taskId, userId, deploymentId); + } + + @Override + public void onGridPreferencesStoreLoaded() { + refreshSelectorMenuBuilder.loadOptions(view.getRefreshValue()); + } + + @Override + public void onUpdateRefreshInterval(boolean enableAutoRefresh, int newInterval) { + super.onUpdateRefreshInterval(enableAutoRefresh, newInterval); + view.saveRefreshValue(newInterval); + } + + @Override + protected void onSearchEvent(@Observes SearchEvent searchEvent) { + textSearchStr = searchEvent.getFilter(); + view.applyFilterOnPresenter(dataSetQueryHelper.getCurrentTableSettings().getKey()); + } + + public abstract Menus getMenus(); +} diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenter.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenter.java new file mode 100644 index 0000000000..4c52e08876 --- /dev/null +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenter.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 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.console.ng.ht.client.editors.taskslist.grid; + +import javax.enterprise.context.Dependent; + +import org.jboss.errai.common.client.api.Caller; +import org.jboss.errai.security.shared.api.identity.User; +import org.jbpm.console.ng.df.client.list.base.DataSetQueryHelper; +import org.jbpm.console.ng.gc.client.menu.RestoreDefaultFiltersMenuBuilder; +import org.jbpm.console.ng.ht.service.TaskLifeCycleService; +import org.uberfire.client.annotations.WorkbenchMenu; +import org.uberfire.client.annotations.WorkbenchScreen; +import org.uberfire.ext.widgets.common.client.menu.RefreshMenuBuilder; +import org.uberfire.workbench.model.menu.MenuFactory; +import org.uberfire.workbench.model.menu.Menus; + +@Dependent +@WorkbenchScreen(identifier = DroolsTasksListGridPresenter.SCREEN_ID) +public class DroolsTasksListGridPresenter extends AbstractTasksListGridPresenter { + + public static final String SCREEN_ID = "Drools Tasks List"; + + public DroolsTasksListGridPresenter() { + super(); + } + + public DroolsTasksListGridPresenter(final DataSetTaskListView view, + final Caller taskOperationsService, + final DataSetQueryHelper dataSetQueryHelper, + final DataSetQueryHelper dataSetQueryHelperDomainSpecific, + final User identity) { + super(view, taskOperationsService, dataSetQueryHelper, dataSetQueryHelperDomainSpecific, identity); + } + + @WorkbenchMenu + @Override + public Menus getMenus() { + return MenuFactory + .newTopLevelCustomMenu(new RefreshMenuBuilder(this)).endMenu() + .newTopLevelCustomMenu(refreshSelectorMenuBuilder).endMenu() + .newTopLevelCustomMenu(new RestoreDefaultFiltersMenuBuilder(this)).endMenu() + .build(); + } + +} \ No newline at end of file diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenter.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenter.java index f5dd980f1b..b7aab6dc70 100644 --- a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenter.java +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenter.java @@ -15,428 +15,47 @@ */ package org.jbpm.console.ng.ht.client.editors.taskslist.grid.dash; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; import javax.enterprise.context.Dependent; -import javax.enterprise.event.Observes; import javax.inject.Inject; -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.cellview.client.ColumnSortList; -import com.google.gwt.view.client.AsyncDataProvider; -import com.google.gwt.view.client.HasData; -import com.google.gwt.view.client.Range; -import org.dashbuilder.dataset.DataSet; -import org.dashbuilder.dataset.DataSetOp; -import org.dashbuilder.dataset.DataSetOpType; -import org.dashbuilder.dataset.client.DataSetReadyCallback; -import org.dashbuilder.dataset.filter.ColumnFilter; -import org.dashbuilder.dataset.filter.CoreFunctionFilter; -import org.dashbuilder.dataset.filter.CoreFunctionType; -import org.dashbuilder.dataset.filter.DataSetFilter; -import org.dashbuilder.dataset.filter.FilterFactory; -import org.dashbuilder.dataset.sort.SortOrder; -import org.jboss.errai.bus.client.api.messaging.Message; import org.jboss.errai.common.client.api.Caller; -import org.jboss.errai.common.client.api.ErrorCallback; -import org.jboss.errai.common.client.api.RemoteCallback; -import org.jboss.errai.security.shared.api.Group; import org.jboss.errai.security.shared.api.identity.User; -import org.jbpm.console.ng.df.client.filter.FilterSettings; import org.jbpm.console.ng.df.client.list.base.DataSetQueryHelper; -import org.jbpm.console.ng.gc.client.dataset.AbstractDataSetReadyCallback; -import org.jbpm.console.ng.gc.client.experimental.grid.base.ExtendedPagedTable; -import org.jbpm.console.ng.gc.client.list.base.AbstractListView.ListView; -import org.jbpm.console.ng.gc.client.list.base.AbstractScreenListPresenter; -import org.jbpm.console.ng.gc.client.list.base.events.SearchEvent; import org.jbpm.console.ng.gc.client.menu.RestoreDefaultFiltersMenuBuilder; import org.jbpm.console.ng.ht.client.editors.quicknewtask.QuickNewTaskPopup; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.AbstractTasksListGridPresenter; import org.jbpm.console.ng.ht.client.i18n.Constants; -import org.jbpm.console.ng.ht.model.TaskSummary; import org.jbpm.console.ng.ht.service.TaskLifeCycleService; import org.uberfire.client.annotations.WorkbenchMenu; -import org.uberfire.client.annotations.WorkbenchPartTitle; -import org.uberfire.client.annotations.WorkbenchPartView; import org.uberfire.client.annotations.WorkbenchScreen; -import org.uberfire.client.mvp.UberView; -import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter; import org.uberfire.ext.widgets.common.client.menu.RefreshMenuBuilder; -import org.uberfire.ext.widgets.common.client.menu.RefreshSelectorMenuBuilder; import org.uberfire.mvp.Command; -import org.uberfire.paging.PageResponse; import org.uberfire.workbench.model.menu.MenuFactory; import org.uberfire.workbench.model.menu.Menus; -import static org.dashbuilder.dataset.filter.FilterFactory.*; -import static org.jbpm.console.ng.ht.model.TaskDataSetConstants.*; - @Dependent -@WorkbenchScreen( identifier = "DataSet Tasks List" ) -public class DataSetTasksListGridPresenter extends AbstractScreenListPresenter { - - public interface DataSetTaskListView extends ListView { - - int getRefreshValue(); - - void saveRefreshValue( int newValue ); +@WorkbenchScreen(identifier = DataSetTasksListGridPresenter.SCREEN_ID) +public class DataSetTasksListGridPresenter extends AbstractTasksListGridPresenter { - void applyFilterOnPresenter( String key ); - - void addDomainSpecifColumns( ExtendedPagedTable extendedPagedTable, Set columns ); - - FilterSettings getVariablesTableSettings( String processName ); - } - - @Inject - private DataSetTaskListView view; - - private Constants constants = GWT.create( Constants.class ); - - @Inject - private Caller taskOperationsService; - - @Inject - DataSetQueryHelper dataSetQueryHelper; - - @Inject - private DataSetQueryHelper dataSetQueryHelperDomainSpecific; + public static final String SCREEN_ID = "DataSet Tasks List"; @Inject private QuickNewTaskPopup quickNewTaskPopup; - @Inject - private ErrorPopupPresenter errorPopup; - - private RefreshSelectorMenuBuilder refreshSelectorMenuBuilder = new RefreshSelectorMenuBuilder(this); - public DataSetTasksListGridPresenter() { - - dataProvider = new AsyncDataProvider() { - - @Override - protected void onRangeChanged( HasData display ) { - view.showBusyIndicator( constants.Loading() ); - final Range visibleRange = view.getListGrid().getVisibleRange(); - getData( visibleRange ); - - } - }; - } - - public DataSetTasksListGridPresenter(DataSetTaskListView view, - Caller taskOperationsService, - DataSetQueryHelper dataSetQueryHelper, - DataSetQueryHelper dataSetQueryHelperDomainSpecific, - User identity - ) { - this.view = view; - this.taskOperationsService = taskOperationsService; - this.dataSetQueryHelper = dataSetQueryHelper; - this.dataSetQueryHelperDomainSpecific = dataSetQueryHelperDomainSpecific; - this.identity=identity; - } - - @Override - protected ListView getListView() { - return view; - } - - @Override - public void getData( final Range visibleRange ) { - try { - if ( !isAddingDefaultFilters() ) { - FilterSettings currentTableSettings = dataSetQueryHelper.getCurrentTableSettings(); - if ( currentTableSettings != null ) { - currentTableSettings.setTablePageSize( view.getListGrid().getPageSize() ); - ColumnSortList columnSortList = view.getListGrid().getColumnSortList(); - if ( columnSortList != null && columnSortList.size() > 0 ) { - dataSetQueryHelper.setLastOrderedColumn( ( columnSortList.size() > 0 ) ? columnSortList.get( 0 ).getColumn().getDataStoreName() : "" ); - dataSetQueryHelper.setLastSortOrder( ( columnSortList.size() > 0 ) && columnSortList.get( 0 ).isAscending() ? SortOrder.ASCENDING : SortOrder.DESCENDING ); - } else { - dataSetQueryHelper.setLastOrderedColumn(COLUMN_CREATED_ON); - dataSetQueryHelper.setLastSortOrder( SortOrder.ASCENDING ); - } - - final List filters = getColumnFilters(textSearchStr); - if (filters.isEmpty() == false) { - if (currentTableSettings.getDataSetLookup().getFirstFilterOp() != null) { - currentTableSettings.getDataSetLookup().getFirstFilterOp().addFilterColumn(OR(filters)); - } else { - final DataSetFilter filter = new DataSetFilter(); - filter.addFilterColumn(OR(filters)); - currentTableSettings.getDataSetLookup().addOperation(filter); - } - } - boolean isAdminDataset = currentTableSettings.getDataSetLookup().getDataSetUUID().equals(HUMAN_TASKS_WITH_ADMIN_DATASET); - - if( isAdminDataset || - currentTableSettings.getDataSetLookup().getDataSetUUID().equals(HUMAN_TASKS_WITH_USER_DATASET)) { - if (currentTableSettings.getDataSetLookup().getFirstFilterOp() != null) { - currentTableSettings.getDataSetLookup().getFirstFilterOp().addFilterColumn(getUserGroupFilters(isAdminDataset)); - } else { - final DataSetFilter filter = new DataSetFilter(); - filter.addFilterColumn(getUserGroupFilters(isAdminDataset)); - currentTableSettings.getDataSetLookup().addOperation(filter); - } - - } - dataSetQueryHelper.setDataSetHandler(currentTableSettings); - dataSetQueryHelper.lookupDataSet(visibleRange.getStart(), createDataSetTaskCallback(visibleRange.getStart(), currentTableSettings)); - } - } - } catch ( Exception e ) { - errorPopup.showMessage(Constants.INSTANCE.UnexpectedError(e.getMessage()) ); - } - - } - - protected List getColumnFilters(final String searchString) { - final List filters = new ArrayList(); - if (searchString != null && searchString.trim().length() > 0) { - try { - final Long taskId = Long.valueOf(searchString.trim()); - filters.add(equalsTo(COLUMN_TASK_ID, taskId)); - } catch (NumberFormatException ex) { - filters.add(likeTo(COLUMN_NAME, "%" + searchString.toLowerCase() + "%", false)); - filters.add(likeTo(COLUMN_DESCRIPTION, "%" + searchString.toLowerCase() + "%", false)); - filters.add(likeTo(COLUMN_PROCESS_ID, "%" + searchString.toLowerCase() + "%", false)); - } - } - return filters; - } - - /** - * 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 - * roles, without restriction over the task owner. - *
In other cases, retrieve the tasks available for the user logged roles AND without owner(claimed by the groups - * members) OR the user logged owned tasks - * @param isAdminDataset true if the filter to create is an adminDataSet - * @return the dynamic filter to add, depeding on the user logged roles and the kind of dataset - */ - protected ColumnFilter getUserGroupFilters(boolean isAdminDataset ) { - Set groups = identity.getGroups(); - List condList = new ArrayList(); - for ( Group g : groups ) { - condList.add( FilterFactory.equalsTo( COLUMN_ORGANIZATIONAL_ENTITY, g.getName() ) ); - - } - condList.add( FilterFactory.equalsTo( COLUMN_ORGANIZATIONAL_ENTITY, identity.getIdentifier() ) ); - ColumnFilter myGroupFilter; - if(isAdminDataset){ - return FilterFactory.OR( COLUMN_ORGANIZATIONAL_ENTITY, condList ); - } else { - myGroupFilter = FilterFactory.AND(FilterFactory.OR(condList), - FilterFactory.OR(FilterFactory.equalsTo(COLUMN_ACTUAL_OWNER, ""), FilterFactory.isNull(COLUMN_ACTUAL_OWNER))); - return FilterFactory.OR(myGroupFilter, FilterFactory.equalsTo(COLUMN_ACTUAL_OWNER, identity.getIdentifier())); - } - } - - protected DataSetReadyCallback createDataSetTaskCallback(final int startRange, final FilterSettings tableSettings){ - return new AbstractDataSetReadyCallback( errorPopup, view, tableSettings.getDataSet() ) { - - - @Override - public void callback(DataSet dataSet) { - - if (dataSet != null) { - final List myTasksFromDataSet = new ArrayList(); - - for (int i = 0; i < dataSet.getRowCount(); i++) { - myTasksFromDataSet.add(createTaskSummaryFromDataSet(dataSet, i)); - - } - List ops = tableSettings.getDataSetLookup().getOperationList(); - String filterValue = isFilteredByTaskName(ops); //Add here the check to add the domain data columns taskName? - - - if (filterValue != null) { - getDomainSpecifDataForTasks(startRange, dataSet.getRowCountNonTrimmed(),filterValue, myTasksFromDataSet); - } else { - PageResponse taskSummaryPageResponse = new PageResponse(); - taskSummaryPageResponse.setPageRowList(myTasksFromDataSet); - taskSummaryPageResponse.setStartRowIndex(startRange); - taskSummaryPageResponse.setTotalRowSize(dataSet.getRowCountNonTrimmed()); - taskSummaryPageResponse.setTotalRowSizeExact(true); - if (startRange + dataSet.getRowCount() == dataSet.getRowCountNonTrimmed()) { - taskSummaryPageResponse.setLastPage(true); - } else { - taskSummaryPageResponse.setLastPage(false); - } - - updateDataOnCallback(taskSummaryPageResponse); - } - - } - view.hideBusyIndicator(); - - } - - - - }; - } - - protected String isFilteredByTaskName(List ops) { - for (DataSetOp dataSetOp : ops) { - if (dataSetOp.getType().equals(DataSetOpType.FILTER)) { - List filters = ((DataSetFilter) dataSetOp).getColumnFilterList(); - - for (ColumnFilter filter : filters) { - - if (filter instanceof CoreFunctionFilter) { - CoreFunctionFilter coreFilter = ((CoreFunctionFilter) filter); - if (filter.getColumnId().toUpperCase().equals(COLUMN_NAME.toUpperCase()) && - ((CoreFunctionFilter) filter).getType()== CoreFunctionType.EQUALS_TO) { - - List parameters = coreFilter.getParameters(); - if (parameters.size() > 0) { - return parameters.get(0).toString(); - } - } - } - } - } - } - - return null; - - } - public void getDomainSpecifDataForTasks(final int startRange, final int rowCountNotTrimmed, String filterValue, final List myTasksFromDataSet) { - - FilterSettings variablesTableSettings = view.getVariablesTableSettings(filterValue); - variablesTableSettings.setTablePageSize(-1); - - dataSetQueryHelperDomainSpecific.setDataSetHandler(variablesTableSettings); - dataSetQueryHelperDomainSpecific.setCurrentTableSettings(variablesTableSettings); - dataSetQueryHelperDomainSpecific.setLastOrderedColumn(COLUMN_TASK_ID); - dataSetQueryHelperDomainSpecific.setLastSortOrder(SortOrder.ASCENDING); - - List tasksIds = new ArrayList(); - for (TaskSummary task : myTasksFromDataSet) { - tasksIds.add(task.getTaskId()); - } - DataSetFilter filter = new DataSetFilter(); - ColumnFilter filter1 = FilterFactory.equalsTo(COLUMN_TASK_VARIABLE_TASK_ID, tasksIds); - filter.addFilterColumn(filter1); - variablesTableSettings.getDataSetLookup().addOperation(filter); - - dataSetQueryHelperDomainSpecific.lookupDataSet(0, createDataSetDomainSpecificCallback(startRange, rowCountNotTrimmed, myTasksFromDataSet,variablesTableSettings.getDataSet())); - - } - - protected DataSetReadyCallback createDataSetDomainSpecificCallback(final int startRange, final int totalRowSize, final List instances, final DataSet dataset){ - return new AbstractDataSetReadyCallback( errorPopup, view, dataset ) { - @Override - public void callback(DataSet dataSet) { - if(dataSet.getRowCount()>0) { - Set columns = new HashSet(); - for (int i = 0; i < dataSet.getRowCount(); i++) { - Long taskId = dataSetQueryHelperDomainSpecific.getColumnLongValue(dataSet, COLUMN_TASK_ID, i); - String variableName = dataSetQueryHelperDomainSpecific.getColumnStringValue(dataSet,COLUMN_TASK_VARIABLE_NAME, i); - String variableValue = dataSetQueryHelperDomainSpecific.getColumnStringValue(dataSet,COLUMN_TASK_VARIABLE_VALUE, i); - - for (TaskSummary task : instances) { - if (task.getTaskId().equals(taskId)) { - task.addDomainData(variableName, variableValue); - columns.add(variableName); - } - } - } - view.addDomainSpecifColumns(view.getListGrid(), columns); - } - PageResponse taskSummaryPageResponse = new PageResponse(); - taskSummaryPageResponse.setPageRowList(instances); - taskSummaryPageResponse.setStartRowIndex(startRange); - taskSummaryPageResponse.setTotalRowSize(totalRowSize); - taskSummaryPageResponse.setTotalRowSizeExact(true); - if (startRange + instances.size() == totalRowSize) { - taskSummaryPageResponse.setLastPage(true); - } else { - taskSummaryPageResponse.setLastPage(false); - } - - updateDataOnCallback(taskSummaryPageResponse); - } - - }; + super(); } - protected TaskSummary createTaskSummaryFromDataSet(final DataSet dataSet, int i) { - return new TaskSummary( - dataSetQueryHelper.getColumnLongValue( dataSet, COLUMN_TASK_ID, i ), - dataSetQueryHelper.getColumnStringValue( dataSet, COLUMN_NAME, i ), - dataSetQueryHelper.getColumnStringValue( dataSet, COLUMN_DESCRIPTION, i ), - dataSetQueryHelper.getColumnStringValue( dataSet, COLUMN_STATUS, i ), - dataSetQueryHelper.getColumnIntValue(dataSet, COLUMN_PRIORITY, i), - dataSetQueryHelper.getColumnStringValue( dataSet, COLUMN_ACTUAL_OWNER, i ), - dataSetQueryHelper.getColumnStringValue( dataSet, COLUMN_CREATED_BY, i ), - dataSetQueryHelper.getColumnDateValue(dataSet, COLUMN_CREATED_ON, i), - dataSetQueryHelper.getColumnDateValue(dataSet, COLUMN_ACTIVATION_TIME, i), - dataSetQueryHelper.getColumnDateValue(dataSet, COLUMN_DUE_DATE, i), - dataSetQueryHelper.getColumnStringValue(dataSet, COLUMN_PROCESS_ID, i), - dataSetQueryHelper.getColumnLongValue(dataSet, COLUMN_PROCESS_SESSION_ID, i), - dataSetQueryHelper.getColumnLongValue(dataSet, COLUMN_PROCESS_INSTANCE_ID, i), - dataSetQueryHelper.getColumnStringValue( dataSet, COLUMN_DEPLOYMENT_ID, i ), - dataSetQueryHelper.getColumnLongValue( dataSet, COLUMN_PARENT_ID, i ), - HUMAN_TASKS_WITH_ADMIN_DATASET.equals(dataSet.getUUID())); - } - - public void filterGrid( FilterSettings tableSettings ) { - dataSetQueryHelper.setCurrentTableSettings( tableSettings ); - refreshGrid(); - } - - @WorkbenchPartTitle - public String getTitle() { - return constants.Tasks_List(); - } - - @WorkbenchPartView - public UberView getView() { - return view; - } - - public void releaseTask( final Long taskId, - final String userId ) { - taskOperationsService.call( new RemoteCallback() { - @Override - public void callback( Void nothing ) { - view.displayNotification( Constants.INSTANCE.TaskReleased(String.valueOf(taskId)) ); - refreshGrid(); - } - }, new ErrorCallback() { - @Override - public boolean error( Message message, - Throwable throwable ) { - errorPopup.showMessage( Constants.INSTANCE.UnexpectedError(throwable.getMessage()) ); - return true; - } - } ).release( taskId, userId ); - } - - public void claimTask( final Long taskId, - final String userId, - final String deploymentId ) { - taskOperationsService.call( new RemoteCallback() { - @Override - public void callback( Void nothing ) { - view.displayNotification( Constants.INSTANCE.TaskClaimed(String.valueOf(taskId))); - refreshGrid(); - } - }, new ErrorCallback() { - @Override - public boolean error( Message message, - Throwable throwable ) { - errorPopup.showMessage( Constants.INSTANCE.UnexpectedError(throwable.getMessage()) ); - return true; - } - } ).claim(taskId, userId, deploymentId ); + public DataSetTasksListGridPresenter(final DataSetTaskListView view, + final Caller taskOperationsService, + final DataSetQueryHelper dataSetQueryHelper, + final DataSetQueryHelper dataSetQueryHelperDomainSpecific, + final User identity) { + super(view, taskOperationsService, dataSetQueryHelper, dataSetQueryHelperDomainSpecific, identity); } @WorkbenchMenu + @Override public Menus getMenus() { return MenuFactory .newTopLevelMenu(Constants.INSTANCE.New_Task()) @@ -453,22 +72,4 @@ public void execute() { .build(); } - - @Override - public void onGridPreferencesStoreLoaded() { - refreshSelectorMenuBuilder.loadOptions(view.getRefreshValue()); - } - - - @Override - public void onUpdateRefreshInterval(boolean enableAutoRefresh, int newInterval) { - super.onUpdateRefreshInterval(enableAutoRefresh, newInterval); - view.saveRefreshValue(newInterval); - } - - @Override - protected void onSearchEvent( @Observes SearchEvent searchEvent ) { - textSearchStr = searchEvent.getFilter(); - view.applyFilterOnPresenter( dataSetQueryHelper.getCurrentTableSettings().getKey() ); - } } \ No newline at end of file diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridViewImpl.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridViewImpl.java index 23d03e92a9..9099d72ab4 100644 --- a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridViewImpl.java +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridViewImpl.java @@ -43,12 +43,10 @@ import com.google.gwt.view.client.DefaultSelectionEventManager; import com.google.gwt.view.client.NoSelectionModel; import com.google.gwt.view.client.SelectionChangeEvent; -import org.dashbuilder.dataset.filter.ColumnFilter; import org.dashbuilder.dataset.filter.FilterFactory; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.constants.ButtonSize; import org.gwtbootstrap3.client.ui.constants.IconType; -import org.jboss.errai.security.shared.api.Group; import org.jbpm.console.ng.df.client.filter.FilterSettings; import org.jbpm.console.ng.df.client.filter.FilterSettingsBuilderHelper; import org.jbpm.console.ng.df.client.list.base.DataSetEditorManager; @@ -58,6 +56,7 @@ import org.jbpm.console.ng.gc.client.util.DateUtils; import org.jbpm.console.ng.gc.client.util.TaskUtils; import org.jbpm.console.ng.ht.client.editors.quicknewtask.QuickNewTaskPopup; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.AbstractTasksListGridPresenter; import org.jbpm.console.ng.ht.client.i18n.Constants; import org.jbpm.console.ng.ht.model.TaskSummary; import org.jbpm.console.ng.ht.model.events.NewTaskEvent; @@ -77,8 +76,8 @@ import static org.jbpm.console.ng.ht.util.TaskRoleDefinition.*; @Dependent -public class DataSetTasksListGridViewImpl extends AbstractMultiGridView - implements DataSetTasksListGridPresenter.DataSetTaskListView { +public class DataSetTasksListGridViewImpl extends AbstractMultiGridView + implements AbstractTasksListGridPresenter.DataSetTaskListView { public static String DATASET_TASK_LIST_PREFIX = "DataSetTaskListGrid"; @@ -98,7 +97,7 @@ public class DataSetTasksListGridViewImpl extends AbstractMultiGridView bannedColumns = new ArrayList(); bannedColumns.add( COLUMN_NAME ); diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/perspectives/DroolsTasksListPerspective.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/perspectives/DroolsTasksListPerspective.java new file mode 100644 index 0000000000..9b4260b257 --- /dev/null +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/main/java/org/jbpm/console/ng/ht/client/perspectives/DroolsTasksListPerspective.java @@ -0,0 +1,52 @@ +/* + * Copyright 2016 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.console.ng.ht.client.perspectives; + +import javax.enterprise.context.ApplicationScoped; + +import org.jbpm.console.ng.gc.client.perspectives.AbstractPerspective; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.DroolsTasksListGridPresenter; +import org.uberfire.client.annotations.Perspective; +import org.uberfire.client.annotations.WorkbenchPerspective; +import org.uberfire.client.workbench.panels.impl.ClosableSimpleWorkbenchPanelPresenter; +import org.uberfire.mvp.impl.DefaultPlaceRequest; +import org.uberfire.workbench.model.PerspectiveDefinition; +import org.uberfire.workbench.model.impl.PartDefinitionImpl; +import org.uberfire.workbench.model.impl.PerspectiveDefinitionImpl; + +/** + * A Perspective to show tasks without process context + */ +@ApplicationScoped +@WorkbenchPerspective(identifier = DroolsTasksListPerspective.PERSPECTIVE_ID) +public class DroolsTasksListPerspective extends AbstractPerspective { + + public static final String PERSPECTIVE_ID = "Drools Tasks"; + + @Perspective + public PerspectiveDefinition getPerspective() { + final PerspectiveDefinition p = new PerspectiveDefinitionImpl(ClosableSimpleWorkbenchPanelPresenter.class.getName()); + p.setName(PERSPECTIVE_ID); + p.getRoot().addPart(new PartDefinitionImpl(new DefaultPlaceRequest(DroolsTasksListGridPresenter.SCREEN_ID))); + return p; + } + + @Override + public String getPerspectiveId() { + return PERSPECTIVE_ID; + } + +} diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenterTest.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenterTest.java index 916afb0c9f..17cb9c7d36 100644 --- a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenterTest.java +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskprocesscontext/TaskProcessContextPresenterTest.java @@ -15,7 +15,10 @@ */ package org.jbpm.console.ng.ht.client.editors.taskprocesscontext; +import java.util.Collections; import javax.enterprise.event.Event; + +import com.google.common.collect.Sets; import org.jbpm.console.ng.bd.service.DataServiceEntryPoint; import org.jbpm.console.ng.ht.client.editors.taskprocesscontext.TaskProcessContextPresenter.TaskProcessContextView; import org.jbpm.console.ng.ht.model.TaskKey; @@ -29,23 +32,26 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import org.mockito.runners.MockitoJUnitRunner; +import org.uberfire.client.mvp.Activity; +import org.uberfire.client.mvp.ActivityManager; import org.uberfire.client.mvp.PlaceManager; import org.uberfire.mocks.CallerMock; +import org.uberfire.mvp.PlaceRequest; + +import static org.junit.Assert.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class TaskProcessContextPresenterTest { - @Mock - private TaskProcessContextView viewMock; + private static final Long TASK_ID_NO_PROCESS = 1L; + private static final Long TASK_ID_WITH_PROC = 2L; + private static final Long TASK_ID_NULL_DETAILS = 3L; - @Mock - private PlaceManager placeManager; + TaskSummary taskNoProcess = new TaskSummary(TASK_ID_NO_PROCESS, "task without process", null, null, 0, null, null, null, null, null, null/*ProcessID*/, -1, -1 /*Proc instId*/, null, -1); + TaskSummary taskWithProcess = new TaskSummary(TASK_ID_WITH_PROC, "task with process", null, null, 0, null, null, null, null, null, "TEST_PROCESS_ID"/*ProcessID*/, -1, 123L /*Proc inst Id*/, null, -1); @Mock DataServiceEntryPoint dataServiceEntryPoint; @@ -53,13 +59,14 @@ public class TaskProcessContextPresenterTest { @Mock Event procNavigationMock; - private TaskProcessContextPresenter presenter; - private static final Long TASK_ID_NO_PROCESS = 1L; - private static final Long TASK_ID_WITH_PROC = 2L; - private static final Long TASK_ID_NULL_DETAILS = 3L; + @Mock + private TaskProcessContextView viewMock; + @Mock + private PlaceManager placeManager; + @Mock + private ActivityManager activityManager; - TaskSummary taskNoProcess = new TaskSummary(TASK_ID_NO_PROCESS, "task without process", null, null, 0, null, null, null, null, null, null/*ProcessID*/, -1, -1 /*Proc instId*/, null, -1); - TaskSummary taskWithProcess = new TaskSummary(TASK_ID_WITH_PROC, "task with process", null, null, 0, null, null, null, null, null, "TEST_PROCESS_ID"/*ProcessID*/, -1, 123L /*Proc inst Id*/, null, -1); + private TaskProcessContextPresenter presenter; @Before public void before() { @@ -79,7 +86,8 @@ public void before() { placeManager, taskQueryServiceMock, dataServiceCallerMock, - procNavigationMock); + procNavigationMock, + activityManager); } @Test @@ -106,7 +114,7 @@ public void processContextShowsProcessInfo_whenTaskDetailsHasProcess() { verify(viewMock).setProcessId("TEST_PROCESS_ID"); verify(viewMock).setProcessInstanceId("123"); - verify(viewMock).enablePIDetailsButton(true); + verify(viewMock, times(2)).enablePIDetailsButton(true); } @Test @@ -132,4 +140,22 @@ public void testGoToProcessInstanceDetails() { assertEquals(Integer.valueOf(summary.getState()), event.getProcessInstanceStatus()); } + @Test + public void testProcessContextEnabled() { + when(activityManager.getActivities(any(PlaceRequest.class))).thenReturn(Sets.newHashSet(mock(Activity.class))); + + presenter.init(); + + verify(viewMock).enablePIDetailsButton(true); + } + + @Test + public void testProcessContextDisabled() { + when(activityManager.getActivities(any(PlaceRequest.class))).thenReturn(Collections.emptySet()); + + presenter.init(); + + verify(viewMock).enablePIDetailsButton(false); + } + } \ No newline at end of file diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenterTest.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenterTest.java new file mode 100644 index 0000000000..00e56c2c5d --- /dev/null +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/AbstractTasksListGridPresenterTest.java @@ -0,0 +1,431 @@ +/* + * Copyright 2016 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.console.ng.ht.client.editors.taskslist.grid; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.google.gwt.view.client.Range; +import org.apache.commons.lang3.RandomStringUtils; +import org.dashbuilder.dataset.DataSet; +import org.dashbuilder.dataset.DataSetLookup; +import org.dashbuilder.dataset.DataSetOp; +import org.dashbuilder.dataset.client.DataSetReadyCallback; +import org.dashbuilder.dataset.filter.ColumnFilter; +import org.dashbuilder.dataset.filter.DataSetFilter; +import org.dashbuilder.dataset.filter.LogicalExprFilter; +import org.dashbuilder.dataset.filter.LogicalExprType; +import org.dashbuilder.dataset.sort.SortOrder; +import org.jboss.errai.security.shared.api.Group; +import org.jboss.errai.security.shared.api.identity.User; +import org.jbpm.console.ng.df.client.filter.FilterSettings; +import org.jbpm.console.ng.df.client.list.base.DataSetQueryHelper; +import org.jbpm.console.ng.gc.client.experimental.grid.base.ExtendedPagedTable; +import org.jbpm.console.ng.gc.client.list.base.events.SearchEvent; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.dash.DataSetTasksListGridViewImpl; +import org.jbpm.console.ng.ht.model.TaskSummary; +import org.jbpm.console.ng.ht.service.TaskLifeCycleService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.uberfire.mocks.CallerMock; + +import static org.dashbuilder.dataset.filter.FilterFactory.*; +import static org.jbpm.console.ng.ht.model.TaskDataSetConstants.*; +import static org.junit.Assert.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.*; + +public abstract class AbstractTasksListGridPresenterTest { + + private static final Long TASK_ID = 1L; + private static final String USR_ID = "admin"; + + private CallerMock callerMockTaskOperationsService; + + @Mock + private TaskLifeCycleService taskLifeCycleServiceMock; + + @Mock + private DataSetTasksListGridViewImpl viewMock; + + @Mock + DataSetQueryHelper dataSetQueryHelperMock; + + @Mock + DataSetQueryHelper dataSetDomainDataQueryHelperMock; + + @Mock + private ExtendedPagedTable extendedPagedTable; + + @Mock + private DataSet dataSetMock; + + @Mock + private DataSet dataSetTaskVarMock; + + @Mock + private FilterSettings filterSettings; + + @Mock + public User identity; + + //Thing under test + protected AbstractTasksListGridPresenter presenter; + + @Before + public void setupMocks() { + //Mock that actually calls the callbacks + DataSetLookup dataSetLookup = new DataSetLookup(); + dataSetLookup.setDataSetUUID(HUMAN_TASKS_DATASET); + + callerMockTaskOperationsService = new CallerMock(taskLifeCycleServiceMock); + when(filterSettings.getDataSetLookup()).thenReturn(dataSetLookup); + + when(viewMock.getListGrid()).thenReturn(extendedPagedTable); + when(viewMock.getVariablesTableSettings(anyString())).thenReturn(new DataSetTasksListGridViewImpl().getVariablesTableSettings("taskName")); + when(extendedPagedTable.getPageSize()).thenReturn(10); + when(dataSetQueryHelperMock.getCurrentTableSettings()).thenReturn(filterSettings); + + + //Mock that actually calls the callbacks + doAnswer(new Answer() { + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + ((DataSetReadyCallback) invocation.getArguments()[1]).callback(dataSetMock); + return null; + } + }).when(dataSetQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + + //Mock that actually calls the callbacks + doAnswer(new Answer() { + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + ((DataSetReadyCallback) invocation.getArguments()[1]).callback(dataSetTaskVarMock); + return null; + } + }).when(dataSetDomainDataQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + presenter = createPresenter(viewMock, callerMockTaskOperationsService, dataSetQueryHelperMock, dataSetDomainDataQueryHelperMock, identity); + + } + + protected abstract AbstractTasksListGridPresenter createPresenter(final DataSetTasksListGridViewImpl viewMock, + final CallerMock callerMockTaskOperationsService, + final DataSetQueryHelper dataSetQueryHelperMock, + final DataSetQueryHelper dataSetDomainDataQueryHelperMock, + final User identity); + + @Test + public void getDataTest() { + presenter.setAddingDefaultFilters(false); + presenter.getData(new Range(0, 5)); + + verify(dataSetQueryHelperMock).setLastSortOrder(SortOrder.ASCENDING); + verify(dataSetQueryHelperMock).setLastOrderedColumn(COLUMN_CREATED_ON); + verify(dataSetQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + verify(dataSetDomainDataQueryHelperMock, never()).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + } + + @Test + public void releaseTaskTest() { + presenter.releaseTask(TASK_ID, USR_ID); + + verify(taskLifeCycleServiceMock).release(TASK_ID, USR_ID); + } + + @Test + public void claimTaskTest() { + presenter.claimTask(TASK_ID, USR_ID, "deploymentId"); + + verify(taskLifeCycleServiceMock).claim(TASK_ID, USR_ID, "deploymentId"); + } + + public void isFilteredByTaskNameTest() { + final String taskName = "taskName"; + final DataSetFilter filter = new DataSetFilter(); + filter.addFilterColumn(equalsTo(COLUMN_NAME, taskName)); + + final String filterTaskName = presenter.isFilteredByTaskName(Collections.singletonList(filter)); + assertEquals(taskName, filterTaskName); + } + + public void isFilteredByTaskNameInvalidTest() { + final String taskName = "taskName"; + final DataSetFilter filter = new DataSetFilter(); + filter.addFilterColumn(likeTo(COLUMN_DESCRIPTION, taskName)); + + final String filterTaskName = presenter.isFilteredByTaskName(Collections.singletonList(filter)); + assertNull(filterTaskName); + } + + @Test + public void getDomainSpecificDataForTasksTest() { + presenter.setAddingDefaultFilters(false); + final DataSetFilter filter = new DataSetFilter(); + filter.addFilterColumn(equalsTo(COLUMN_NAME, "taskName")); + filterSettings.getDataSetLookup().addOperation(filter); + + when(dataSetMock.getRowCount()).thenReturn(1);//1 task + //Task summary creation + when(dataSetQueryHelperMock.getColumnLongValue(dataSetMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); + + when(dataSetTaskVarMock.getRowCount()).thenReturn(2); //two domain variables associated + when(dataSetDomainDataQueryHelperMock.getColumnLongValue(dataSetTaskVarMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); + String taskVariable1 = "var1"; + when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_NAME, 0)).thenReturn(taskVariable1); + when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_VALUE, 0)).thenReturn("value1"); + + when(dataSetDomainDataQueryHelperMock.getColumnLongValue(dataSetTaskVarMock, COLUMN_TASK_ID, 1)).thenReturn(Long.valueOf(1)); + String taskVariable2 = "var2"; + when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_NAME, 1)).thenReturn(taskVariable2); + when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_VALUE, 1)).thenReturn("value2"); + + Set expectedColumns = new HashSet(); + expectedColumns.add(taskVariable1); + expectedColumns.add(taskVariable2); + + presenter.getData(new Range(0, 5)); + + ArgumentCaptor argument = ArgumentCaptor.forClass(Set.class); + verify(viewMock).addDomainSpecifColumns(any(ExtendedPagedTable.class), argument.capture()); + + assertEquals(expectedColumns, argument.getValue()); + + verify(dataSetQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + verify(dataSetDomainDataQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + + when(dataSetTaskVarMock.getRowCount()).thenReturn(1); //one domain variables associated + when(dataSetDomainDataQueryHelperMock.getColumnLongValue(dataSetTaskVarMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); + taskVariable1 = "varTest1"; + when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_NAME, 0)).thenReturn(taskVariable1); + when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_VALUE, 0)).thenReturn("value1"); + + expectedColumns = Collections.singleton(taskVariable1); + + presenter.getData(new Range(0, 5)); + + argument = ArgumentCaptor.forClass(Set.class); + verify(viewMock, times(2)).addDomainSpecifColumns(any(ExtendedPagedTable.class), argument.capture()); + + assertEquals(expectedColumns, argument.getValue()); + verify(dataSetQueryHelperMock, times(2)).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + verify(dataSetDomainDataQueryHelperMock, times(2)).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); + } + + @Test + public void testTaskSummaryAdmin() { + final List dataSets = Arrays.asList( + HUMAN_TASKS_WITH_ADMIN_DATASET, + HUMAN_TASKS_WITH_USER_DATASET, + HUMAN_TASKS_DATASET, + HUMAN_TASKS_WITH_VARIABLES_DATASET); + + for (final String dataSet : dataSets) { + when(dataSetMock.getUUID()).thenReturn(dataSet); + + final TaskSummary summary = presenter.createTaskSummaryFromDataSet(dataSetMock, 0); + + assertNotNull(summary); + assertEquals(HUMAN_TASKS_WITH_ADMIN_DATASET.equals(dataSet), summary.isForAdmin()); + } + } + + @Test + public void testEmptySearchString() { + final SearchEvent searchEvent = new SearchEvent(""); + + presenter.onSearchEvent(searchEvent); + + verify(viewMock).applyFilterOnPresenter(anyString()); + assertEquals(searchEvent.getFilter(), presenter.getTextSearchStr()); + } + + @Test + public void testSearchString() { + final SearchEvent searchEvent = new SearchEvent(RandomStringUtils.random(10)); + + presenter.onSearchEvent(searchEvent); + + verify(viewMock).applyFilterOnPresenter(anyString()); + assertEquals(searchEvent.getFilter(), presenter.getTextSearchStr()); + } + + @Test + public void testSearchFilterEmpty() { + final List filters = presenter.getColumnFilters(""); + + assertTrue(filters.isEmpty()); + } + + @Test + public void testSearchFilterNull() { + final List filters = presenter.getColumnFilters(null); + + assertTrue(filters.isEmpty()); + } + + @Test + public void testSearchFilterEmptyTrim() { + final List filters = presenter.getColumnFilters(" "); + + assertTrue(filters.isEmpty()); + } + + @Test + public void testSearchFilterId() { + final List filters = presenter.getColumnFilters("1"); + + assertEquals(1, filters.size()); + assertEquals(COLUMN_TASK_ID, filters.get(0).getColumnId()); + } + + @Test + public void testSearchFilterIdTrim() { + final List filters = presenter.getColumnFilters(" 1 "); + + assertEquals(1, filters.size()); + assertEquals(COLUMN_TASK_ID, filters.get(0).getColumnId()); + } + + @Test + public void testSearchFilterString() { + final List filters = presenter.getColumnFilters("taskName"); + + assertEquals(3, filters.size()); + assertEquals(COLUMN_NAME, filters.get(0).getColumnId()); + assertEquals(COLUMN_DESCRIPTION, filters.get(1).getColumnId()); + assertEquals(COLUMN_PROCESS_ID, filters.get(2).getColumnId()); + } + + @Test + public void testGetUserGroupFilters() { + Group group1 = new Group() { + @Override + public String getName() { + return "group1"; + } + }; + Group group2 = new Group() { + @Override + public String getName() { + return "group2"; + } + }; + HashSet groups = new HashSet(); + groups.add(group1); + groups.add(group2); + when(identity.getGroups()).thenReturn(groups); + when(identity.getIdentifier()).thenReturn("userId"); + + final ColumnFilter userTaskFilter = presenter.getUserGroupFilters(false); + + List columnFilters = ((LogicalExprFilter) userTaskFilter).getLogicalTerms(); + + assertEquals(columnFilters.size(), 2); + assertEquals(((LogicalExprFilter) userTaskFilter).getLogicalOperator(), LogicalExprType.OR); + + assertEquals(((LogicalExprFilter) columnFilters.get(0)).getLogicalOperator(), LogicalExprType.AND); + List userGroupFilter = ((LogicalExprFilter) columnFilters.get(0)).getLogicalTerms(); + assertEquals(userGroupFilter.size(), 2); + assertEquals(((LogicalExprFilter) userGroupFilter.get(0)).getLogicalOperator(), LogicalExprType.OR); + + List groupFilter = ((LogicalExprFilter) userGroupFilter.get(0)).getLogicalTerms(); + List withoutActualOwnerFilter = ((LogicalExprFilter) userGroupFilter.get(1)).getLogicalTerms(); + + assertEquals(((LogicalExprFilter) userGroupFilter.get(1)).getLogicalOperator(), LogicalExprType.OR); + assertEquals(withoutActualOwnerFilter.size(), 2); + assertEquals(COLUMN_ACTUAL_OWNER, withoutActualOwnerFilter.get(0).getColumnId()); + assertEquals(COLUMN_ACTUAL_OWNER, withoutActualOwnerFilter.get(1).getColumnId()); + + assertEquals(((LogicalExprFilter) userGroupFilter.get(0)).getLogicalOperator(), LogicalExprType.OR); + assertEquals(groupFilter.size(), 3); + assertEquals(COLUMN_ORGANIZATIONAL_ENTITY, groupFilter.get(0).getColumnId()); + assertEquals(COLUMN_ORGANIZATIONAL_ENTITY, groupFilter.get(1).getColumnId()); + assertEquals(COLUMN_ORGANIZATIONAL_ENTITY, groupFilter.get(2).getColumnId()); + + ColumnFilter userOwnerFilter = columnFilters.get(1); + assertEquals(userOwnerFilter.getColumnId(), COLUMN_ACTUAL_OWNER); + } + + @Test + public void addDynamicUserRolesTest() { + Group group1 = new Group() { + @Override + public String getName() { + return "group1"; + } + }; + + HashSet groups = new HashSet(); + groups.add(group1); + when(identity.getGroups()).thenReturn(groups); + when(identity.getIdentifier()).thenReturn("userId"); + presenter.setAddingDefaultFilters(false); + filterSettings.getDataSetLookup().setDataSetUUID(HUMAN_TASKS_WITH_USER_DATASET); + + when(dataSetMock.getRowCount()).thenReturn(1);//1 task + when(dataSetQueryHelperMock.getColumnLongValue(dataSetMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); + + + presenter.getData(new Range(0, 5)); + + final ColumnFilter userTaskFilter = presenter.getUserGroupFilters(false); // false --> HUMAN_TASKS_WITH_USER_DATASET + assertEquals(filterSettings.getDataSetLookup().getFirstFilterOp().getColumnFilterList().get(0).toString(), + userTaskFilter.toString()); + + } + + @Test + public void addDynamicAdminRolesTest() { + Group group1 = new Group() { + @Override + public String getName() { + return "group1"; + } + }; + + HashSet groups = new HashSet(); + groups.add(group1); + when(identity.getGroups()).thenReturn(groups); + when(identity.getIdentifier()).thenReturn("userId"); + presenter.setAddingDefaultFilters(false); + filterSettings.getDataSetLookup().setDataSetUUID(HUMAN_TASKS_WITH_ADMIN_DATASET); + + when(dataSetMock.getRowCount()).thenReturn(1);//1 task + when(dataSetQueryHelperMock.getColumnLongValue(dataSetMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); + + + presenter.getData(new Range(0, 5)); + + final ColumnFilter userTaskFilter = presenter.getUserGroupFilters(true);// true --> HUMAN_TASKS_WITH_ADMIN_DATASET + + assertEquals(filterSettings.getDataSetLookup().getFirstFilterOp().getColumnFilterList().get(0).toString(), + userTaskFilter.toString()); + + } + +} diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenterTest.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenterTest.java new file mode 100644 index 0000000000..066e979baf --- /dev/null +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/DroolsTasksListGridPresenterTest.java @@ -0,0 +1,51 @@ +/* + * Copyright 2016 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.console.ng.ht.client.editors.taskslist.grid; + +import com.google.gwtmockito.GwtMockitoTestRunner; +import org.jboss.errai.security.shared.api.identity.User; +import org.jbpm.console.ng.df.client.list.base.DataSetQueryHelper; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.dash.DataSetTasksListGridViewImpl; +import org.jbpm.console.ng.ht.service.TaskLifeCycleService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.uberfire.mocks.CallerMock; +import org.uberfire.workbench.model.menu.Menus; + +import static org.junit.Assert.*; + +@RunWith(GwtMockitoTestRunner.class) +public class DroolsTasksListGridPresenterTest extends AbstractTasksListGridPresenterTest { + + @Override + protected AbstractTasksListGridPresenter createPresenter(final DataSetTasksListGridViewImpl viewMock, + final CallerMock callerMockTaskOperationsService, + final DataSetQueryHelper dataSetQueryHelperMock, + final DataSetQueryHelper dataSetDomainDataQueryHelperMock, + final User identity) { + return new DroolsTasksListGridPresenter(viewMock, callerMockTaskOperationsService, + dataSetQueryHelperMock, dataSetDomainDataQueryHelperMock, identity); + } + + @Test + public void testMenus() { + final Menus menus = presenter.getMenus(); + + assertEquals(3, menus.getItems().size()); + } + +} diff --git a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenterTest.java b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenterTest.java index 93a536a853..7c4feba748 100644 --- a/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenterTest.java +++ b/jbpm-console-ng-human-tasks/jbpm-console-ng-human-tasks-client/src/test/java/org/jbpm/console/ng/ht/client/editors/taskslist/grid/dash/DataSetTasksListGridPresenterTest.java @@ -15,411 +15,36 @@ */ package org.jbpm.console.ng.ht.client.editors.taskslist.grid.dash; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import com.google.gwt.view.client.Range; import com.google.gwtmockito.GwtMockitoTestRunner; -import org.apache.commons.lang3.RandomStringUtils; -import org.dashbuilder.dataset.DataSet; -import org.dashbuilder.dataset.DataSetLookup; -import org.dashbuilder.dataset.DataSetOp; -import org.dashbuilder.dataset.client.DataSetReadyCallback; -import org.dashbuilder.dataset.filter.ColumnFilter; -import org.dashbuilder.dataset.filter.DataSetFilter; -import org.dashbuilder.dataset.filter.LogicalExprFilter; -import org.dashbuilder.dataset.filter.LogicalExprType; -import org.dashbuilder.dataset.sort.SortOrder; -import org.jboss.errai.security.shared.api.Group; import org.jboss.errai.security.shared.api.identity.User; -import org.jbpm.console.ng.df.client.filter.FilterSettings; import org.jbpm.console.ng.df.client.list.base.DataSetQueryHelper; -import org.jbpm.console.ng.gc.client.experimental.grid.base.ExtendedPagedTable; -import org.jbpm.console.ng.gc.client.list.base.events.SearchEvent; -import org.jbpm.console.ng.ht.model.TaskSummary; +import org.jbpm.console.ng.ht.client.editors.taskslist.grid.AbstractTasksListGridPresenterTest; import org.jbpm.console.ng.ht.service.TaskLifeCycleService; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.uberfire.mocks.CallerMock; +import org.uberfire.workbench.model.menu.Menus; -import static org.dashbuilder.dataset.filter.FilterFactory.*; -import static org.jbpm.console.ng.ht.model.TaskDataSetConstants.*; import static org.junit.Assert.*; -import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) -public class DataSetTasksListGridPresenterTest { - - private static final Long TASK_ID = 1L; - private static final String USR_ID = "admin"; - - private CallerMock callerMockTaskOperationsService; - - @Mock - private TaskLifeCycleService taskLifeCycleServiceMock; - - @Mock - private DataSetTasksListGridViewImpl viewMock; - - @Mock - DataSetQueryHelper dataSetQueryHelperMock; - - @Mock - DataSetQueryHelper dataSetDomainDataQueryHelperMock; - - @Mock - private ExtendedPagedTable extendedPagedTable; - - @Mock - private DataSet dataSetMock; - - @Mock - private DataSet dataSetTaskVarMock; - - @Mock - private FilterSettings filterSettings; - - @Mock - public User identity; - - - //Thing under test - private DataSetTasksListGridPresenter presenter; - - - @Before - public void setupMocks() { - //Mock that actually calls the callbacks - DataSetLookup dataSetLookup= new DataSetLookup(); - dataSetLookup.setDataSetUUID(HUMAN_TASKS_DATASET); - - callerMockTaskOperationsService = new CallerMock(taskLifeCycleServiceMock); - when(filterSettings.getDataSetLookup()).thenReturn(dataSetLookup); - - when(viewMock.getListGrid()).thenReturn(extendedPagedTable); - when(viewMock.getVariablesTableSettings(anyString())).thenReturn(new DataSetTasksListGridViewImpl().getVariablesTableSettings("taskName")); - when(extendedPagedTable.getPageSize()).thenReturn(10); - when(dataSetQueryHelperMock.getCurrentTableSettings()).thenReturn(filterSettings); - - - //Mock that actually calls the callbacks - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - ((DataSetReadyCallback) invocation.getArguments()[1]).callback(dataSetMock); - return null; - } - }).when(dataSetQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - - //Mock that actually calls the callbacks - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - ((DataSetReadyCallback) invocation.getArguments()[1]).callback(dataSetTaskVarMock); - return null; - } - }).when(dataSetDomainDataQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - presenter = new DataSetTasksListGridPresenter(viewMock, callerMockTaskOperationsService, - dataSetQueryHelperMock, dataSetDomainDataQueryHelperMock,identity); - - } - - @Test - public void getDataTest() { - presenter.setAddingDefaultFilters(false); - presenter.getData(new Range(0, 5)); - - verify(dataSetQueryHelperMock).setLastSortOrder(SortOrder.ASCENDING); - verify(dataSetQueryHelperMock).setLastOrderedColumn(COLUMN_CREATED_ON); - verify(dataSetQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - verify(dataSetDomainDataQueryHelperMock, never()).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - } - - @Test - public void releaseTaskTest() { - presenter.releaseTask(TASK_ID, USR_ID); +public class DataSetTasksListGridPresenterTest extends AbstractTasksListGridPresenterTest { - verify(taskLifeCycleServiceMock).release(TASK_ID, USR_ID); + @Override + protected DataSetTasksListGridPresenter createPresenter(final DataSetTasksListGridViewImpl viewMock, + final CallerMock callerMockTaskOperationsService, + final DataSetQueryHelper dataSetQueryHelperMock, + final DataSetQueryHelper dataSetDomainDataQueryHelperMock, + final User identity) { + return new DataSetTasksListGridPresenter(viewMock, callerMockTaskOperationsService, + dataSetQueryHelperMock, dataSetDomainDataQueryHelperMock, identity); } @Test - public void claimTaskTest() { - presenter.claimTask(TASK_ID, USR_ID, "deploymentId"); + public void testMenus() { + final Menus menus = presenter.getMenus(); - verify(taskLifeCycleServiceMock).claim(TASK_ID, USR_ID, "deploymentId"); + assertEquals(4, menus.getItems().size()); } - public void isFilteredByTaskNameTest() { - final String taskName = "taskName"; - final DataSetFilter filter = new DataSetFilter(); - filter.addFilterColumn(equalsTo(COLUMN_NAME, taskName)); - - final String filterTaskName = presenter.isFilteredByTaskName(Collections.singletonList(filter)); - assertEquals(taskName, filterTaskName); - } - - public void isFilteredByTaskNameInvalidTest() { - final String taskName = "taskName"; - final DataSetFilter filter = new DataSetFilter(); - filter.addFilterColumn(likeTo(COLUMN_DESCRIPTION, taskName)); - - final String filterTaskName = presenter.isFilteredByTaskName(Collections.singletonList(filter)); - assertNull(filterTaskName); - } - - @Test - public void getDomainSpecificDataForTasksTest() { - presenter.setAddingDefaultFilters(false); - final DataSetFilter filter = new DataSetFilter(); - filter.addFilterColumn(equalsTo(COLUMN_NAME, "taskName")); - filterSettings.getDataSetLookup().addOperation(filter); - - when(dataSetMock.getRowCount()).thenReturn(1);//1 task - //Task summary creation - when(dataSetQueryHelperMock.getColumnLongValue(dataSetMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); - - when(dataSetTaskVarMock.getRowCount()).thenReturn(2); //two domain variables associated - when(dataSetDomainDataQueryHelperMock.getColumnLongValue(dataSetTaskVarMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); - String taskVariable1 = "var1"; - when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_NAME, 0)).thenReturn(taskVariable1); - when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_VALUE, 0)).thenReturn("value1"); - - when(dataSetDomainDataQueryHelperMock.getColumnLongValue(dataSetTaskVarMock, COLUMN_TASK_ID, 1)).thenReturn(Long.valueOf(1)); - String taskVariable2 = "var2"; - when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_NAME, 1)).thenReturn(taskVariable2); - when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_VALUE, 1)).thenReturn("value2"); - - Set expectedColumns = new HashSet(); - expectedColumns.add(taskVariable1); - expectedColumns.add(taskVariable2); - - presenter.getData(new Range(0, 5)); - - ArgumentCaptor argument = ArgumentCaptor.forClass(Set.class); - verify(viewMock).addDomainSpecifColumns(any(ExtendedPagedTable.class), argument.capture()); - - assertEquals(expectedColumns, argument.getValue()); - - verify(dataSetQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - verify(dataSetDomainDataQueryHelperMock).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - - when(dataSetTaskVarMock.getRowCount()).thenReturn(1); //one domain variables associated - when(dataSetDomainDataQueryHelperMock.getColumnLongValue(dataSetTaskVarMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); - taskVariable1 = "varTest1"; - when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_NAME, 0)).thenReturn(taskVariable1); - when(dataSetDomainDataQueryHelperMock.getColumnStringValue(dataSetTaskVarMock, COLUMN_TASK_VARIABLE_VALUE, 0)).thenReturn("value1"); - - expectedColumns = Collections.singleton(taskVariable1); - - presenter.getData(new Range(0, 5)); - - argument = ArgumentCaptor.forClass(Set.class); - verify(viewMock, times(2)).addDomainSpecifColumns(any(ExtendedPagedTable.class), argument.capture()); - - assertEquals(expectedColumns, argument.getValue()); - verify(dataSetQueryHelperMock, times(2)).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - verify(dataSetDomainDataQueryHelperMock, times(2)).lookupDataSet(anyInt(), any(DataSetReadyCallback.class)); - } - - @Test - public void testTaskSummaryAdmin() { - final List dataSets = Arrays.asList( - HUMAN_TASKS_WITH_ADMIN_DATASET, - HUMAN_TASKS_WITH_USER_DATASET, - HUMAN_TASKS_DATASET, - HUMAN_TASKS_WITH_VARIABLES_DATASET); - - for (final String dataSet : dataSets) { - when(dataSetMock.getUUID()).thenReturn(dataSet); - - final TaskSummary summary = presenter.createTaskSummaryFromDataSet(dataSetMock, 0); - - assertNotNull(summary); - assertEquals(HUMAN_TASKS_WITH_ADMIN_DATASET.equals(dataSet), summary.isForAdmin()); - } - } - - @Test - public void testEmptySearchString() { - final SearchEvent searchEvent = new SearchEvent(""); - - presenter.onSearchEvent(searchEvent); - - verify(viewMock).applyFilterOnPresenter(anyString()); - assertEquals(searchEvent.getFilter(), presenter.getTextSearchStr()); - } - - @Test - public void testSearchString() { - final SearchEvent searchEvent = new SearchEvent(RandomStringUtils.random(10)); - - presenter.onSearchEvent(searchEvent); - - verify(viewMock).applyFilterOnPresenter(anyString()); - assertEquals(searchEvent.getFilter(), presenter.getTextSearchStr()); - } - - @Test - public void testSearchFilterEmpty() { - final List filters = presenter.getColumnFilters(""); - - assertTrue(filters.isEmpty()); - } - - @Test - public void testSearchFilterNull() { - final List filters = presenter.getColumnFilters(null); - - assertTrue(filters.isEmpty()); - } - - @Test - public void testSearchFilterEmptyTrim() { - final List filters = presenter.getColumnFilters(" "); - - assertTrue(filters.isEmpty()); - } - - @Test - public void testSearchFilterId() { - final List filters = presenter.getColumnFilters("1"); - - assertEquals(1, filters.size()); - assertEquals(COLUMN_TASK_ID, filters.get(0).getColumnId()); - } - - @Test - public void testSearchFilterIdTrim() { - final List filters = presenter.getColumnFilters(" 1 "); - - assertEquals(1, filters.size()); - assertEquals(COLUMN_TASK_ID, filters.get(0).getColumnId()); - } - - @Test - public void testSearchFilterString() { - final List filters = presenter.getColumnFilters("taskName"); - - assertEquals(3, filters.size()); - assertEquals(COLUMN_NAME, filters.get(0).getColumnId()); - assertEquals(COLUMN_DESCRIPTION, filters.get(1).getColumnId()); - assertEquals(COLUMN_PROCESS_ID, filters.get(2).getColumnId()); - } - - @Test - public void testGetUserGroupFilters() { - Group group1 = new Group() { - @Override - public String getName() { - return "group1"; - } - }; - Group group2 = new Group() { - @Override - public String getName() { - return "group2"; - } - }; - HashSet groups = new HashSet(); - groups.add(group1); - groups.add(group2); - when(identity.getGroups()).thenReturn(groups); - when(identity.getIdentifier()).thenReturn("userId"); - - final ColumnFilter userTaskFilter = presenter.getUserGroupFilters(false); - - List columnFilters = ((LogicalExprFilter) userTaskFilter).getLogicalTerms(); - - assertEquals(columnFilters.size(), 2); - assertEquals(((LogicalExprFilter) userTaskFilter).getLogicalOperator(), LogicalExprType.OR); - - assertEquals(((LogicalExprFilter) columnFilters.get(0)).getLogicalOperator(), LogicalExprType.AND); - List userGroupFilter = ((LogicalExprFilter) columnFilters.get(0)).getLogicalTerms(); - assertEquals(userGroupFilter.size(), 2); - assertEquals(((LogicalExprFilter) userGroupFilter.get(0)).getLogicalOperator(), LogicalExprType.OR); - - List groupFilter = ((LogicalExprFilter) userGroupFilter.get(0)).getLogicalTerms(); - List withoutActualOwnerFilter = ((LogicalExprFilter) userGroupFilter.get(1)).getLogicalTerms(); - - assertEquals(((LogicalExprFilter) userGroupFilter.get(1)).getLogicalOperator(), LogicalExprType.OR); - assertEquals(withoutActualOwnerFilter.size(), 2); - assertEquals(COLUMN_ACTUAL_OWNER, withoutActualOwnerFilter.get(0).getColumnId()); - assertEquals(COLUMN_ACTUAL_OWNER, withoutActualOwnerFilter.get(1).getColumnId()); - - assertEquals(((LogicalExprFilter) userGroupFilter.get(0)).getLogicalOperator(), LogicalExprType.OR); - assertEquals(groupFilter.size(), 3); - assertEquals(COLUMN_ORGANIZATIONAL_ENTITY, groupFilter.get(0).getColumnId()); - assertEquals(COLUMN_ORGANIZATIONAL_ENTITY, groupFilter.get(1).getColumnId()); - assertEquals(COLUMN_ORGANIZATIONAL_ENTITY, groupFilter.get(2).getColumnId()); - - ColumnFilter userOwnerFilter = columnFilters.get(1); - assertEquals(userOwnerFilter.getColumnId(),COLUMN_ACTUAL_OWNER); - } - - @Test - public void addDynamicUserRolesTest() { - Group group1 = new Group() { - @Override - public String getName() { - return "group1"; - } - }; - - HashSet groups = new HashSet(); - groups.add(group1); - when(identity.getGroups()).thenReturn(groups); - when(identity.getIdentifier()).thenReturn("userId"); - presenter.setAddingDefaultFilters(false); - filterSettings.getDataSetLookup().setDataSetUUID(HUMAN_TASKS_WITH_USER_DATASET); - - when(dataSetMock.getRowCount()).thenReturn(1);//1 task - when(dataSetQueryHelperMock.getColumnLongValue(dataSetMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); - - - presenter.getData(new Range(0, 5)); - - final ColumnFilter userTaskFilter = presenter.getUserGroupFilters(false); // false --> HUMAN_TASKS_WITH_USER_DATASET - assertEquals(filterSettings.getDataSetLookup().getFirstFilterOp().getColumnFilterList().get(0).toString(), - userTaskFilter.toString()); - - } - @Test - public void addDynamicAdminRolesTest() { - Group group1 = new Group() { - @Override - public String getName() { - return "group1"; - } - }; - - HashSet groups = new HashSet(); - groups.add(group1); - when(identity.getGroups()).thenReturn(groups); - when(identity.getIdentifier()).thenReturn("userId"); - presenter.setAddingDefaultFilters(false); - filterSettings.getDataSetLookup().setDataSetUUID(HUMAN_TASKS_WITH_ADMIN_DATASET); - - when(dataSetMock.getRowCount()).thenReturn(1);//1 task - when(dataSetQueryHelperMock.getColumnLongValue(dataSetMock, COLUMN_TASK_ID, 0)).thenReturn(Long.valueOf(1)); - - - presenter.getData(new Range(0, 5)); - - final ColumnFilter userTaskFilter = presenter.getUserGroupFilters(true);// true --> HUMAN_TASKS_WITH_ADMIN_DATASET - - assertEquals(filterSettings.getDataSetLookup().getFirstFilterOp().getColumnFilterList().get(0).toString(), - userTaskFilter.toString()); - - } } \ No newline at end of file diff --git a/jbpm-console-ng-showcase/src/main/java/org/jbpm/console/ng/client/ShowcaseEntryPoint.java b/jbpm-console-ng-showcase/src/main/java/org/jbpm/console/ng/client/ShowcaseEntryPoint.java index 1a6f344aea..cb555f3104 100644 --- a/jbpm-console-ng-showcase/src/main/java/org/jbpm/console/ng/client/ShowcaseEntryPoint.java +++ b/jbpm-console-ng-showcase/src/main/java/org/jbpm/console/ng/client/ShowcaseEntryPoint.java @@ -50,6 +50,7 @@ import org.jboss.errai.security.shared.service.AuthenticationService; import org.jbpm.console.ng.client.i18n.Constants; import org.jbpm.console.ng.ga.forms.service.PlaceManagerActivityService; +import org.jbpm.console.ng.ht.client.perspectives.DroolsTasksListPerspective; import org.jbpm.dashboard.renderer.service.DashboardURLBuilder; import org.kie.workbench.common.screens.search.client.menu.SearchMenuBuilder; import org.kie.workbench.common.services.shared.preferences.ApplicationPreferences; @@ -246,6 +247,8 @@ private List getWorkViews() { result.add( MenuFactory.newSimpleItem( constants.Tasks_List() ).perspective( "DataSet Tasks" ).endMenu().build().getItems().get( 0 ) ); + result.add( MenuFactory.newSimpleItem( constants.Tasks_List() + " Drools" ).perspective( DroolsTasksListPerspective.PERSPECTIVE_ID ).endMenu().build().getItems().get( 0 ) ); + result.add( MenuFactory.newSimpleItem( constants.Tasks_List_Admin() ).perspective( "Tasks Admin" ).endMenu().build().getItems().get( 0 ) ); result.add( MenuFactory.newSimpleItem( "Data Sets" ).perspective( "DataSetAuthoringPerspective" ).endMenu().build().getItems().get( 0 ) );