Skip to content

Commit

Permalink
Dashboard updates (#30)
Browse files Browse the repository at this point in the history
Fixed displaying data from selected server template
Handle server template selection by reloading the dashboard perspective
Fixed task and process instance details view
  • Loading branch information
cristianonicolai authored and mswiderski committed Jul 5, 2016
1 parent d047547 commit f647c00
Show file tree
Hide file tree
Showing 28 changed files with 188 additions and 135 deletions.
Expand Up @@ -55,6 +55,11 @@
<groupId>org.uberfire</groupId>
<artifactId>uberfire-api</artifactId>
</dependency>

<dependency>
<groupId>org.dashbuilder</groupId>
<artifactId>dashbuilder-dataset-api</artifactId>
</dependency>

</dependencies>

Expand Down
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.jbpm.dashboard.renderer.model;
package org.jbpm.console.ng.bd.integration;

import org.dashbuilder.dataprovider.DataSetProviderType;
import org.dashbuilder.dataset.def.SQLDataSetDef;
Expand Down
Expand Up @@ -24,8 +24,6 @@
<inherits name="org.jbpm.console.ng.ga.JbpmConsoleNGGenericAPI" />

<source path="model" />
<source path="service" />
<source path="exception" />
<source path="dd" />
<source path="integration" />

</module>
</module>
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package org.jbpm.dashboard.dataset.integration;
package org.jbpm.console.ng.bd.integration;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
Expand Down
Expand Up @@ -14,13 +14,12 @@
* limitations under the License.
*/

package org.jbpm.dashboard.dataset.integration;
package org.jbpm.console.ng.bd.integration;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

import org.dashbuilder.dataprovider.DataSetProvider;
import org.dashbuilder.dataprovider.DataSetProviderType;
Expand All @@ -42,22 +41,19 @@
import org.dashbuilder.dataset.sort.ColumnSort;
import org.dashbuilder.dataset.sort.DataSetSort;
import org.dashbuilder.dataset.sort.SortOrder;
import org.jbpm.console.ng.bd.integration.KieServerIntegration;
import org.jbpm.console.ng.ga.model.dataset.ConsoleDataSetLookup;
import org.jbpm.dashboard.renderer.model.KieServerDataSetProviderType;
import org.kie.server.api.model.definition.QueryFilterSpec;
import org.kie.server.api.model.definition.QueryParam;
import org.kie.server.client.QueryServicesClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ApplicationScoped
public class KieServerDataSetProvider implements DataSetProvider {

public static final DataSetProviderType TYPE = new KieServerDataSetProviderType();

@Inject
private KieServerIntegration kieServerIntegration;
public class KieServerDataSetProvider extends AbstractKieServerService implements DataSetProvider {

private static final Logger LOGGER = LoggerFactory.getLogger(KieServerDataSetProvider.class);

public static final DataSetProviderType TYPE = new KieServerDataSetProviderType();

@Override
public DataSetProviderType getType() {
Expand All @@ -84,12 +80,12 @@ public DataSet lookupDataSet(DataSetDef def, DataSetLookup lookup) throws Except
throw new IllegalArgumentException("DataSetLookup is of incorrect type " + lookup.getClass().getName());
}
ConsoleDataSetLookup dataSetLookup = (ConsoleDataSetLookup) lookup;
LOGGER.debug("Data Set lookup using Server Template Id: {}", dataSetLookup.getServerTemplateId());
if (dataSetLookup.getServerTemplateId() == null || dataSetLookup.getServerTemplateId().isEmpty()) {
DataSet result = buildDataSet(def, new ArrayList<>(), new ArrayList<>());
return result;
return buildDataSet(def, new ArrayList<>(), new ArrayList<>());
}

QueryServicesClient queryClient = kieServerIntegration.getServerClient(dataSetLookup.getServerTemplateId()).getServicesClient(QueryServicesClient.class);
final QueryServicesClient queryClient = getClient(dataSetLookup.getServerTemplateId(), QueryServicesClient.class);

List<QueryParam> filterParams = new ArrayList<>();
QueryFilterSpec filterSpec = new QueryFilterSpec();
Expand Down Expand Up @@ -150,12 +146,18 @@ public DataSet lookupDataSet(DataSetDef def, DataSetLookup lookup) throws Except
filterSpec.setAscending(sortOrder.equals(SortOrder.ASCENDING));
}

final List<List> instances = queryClient.query(dataSetLookup.getDataSetUUID(), QueryServicesClient.QUERY_MAP_RAW, filterSpec, dataSetLookup.getRowOffset()/dataSetLookup.getNumberOfRows(), dataSetLookup.getNumberOfRows(), List.class);

DataSet result = buildDataSet(def, instances, extraColumns);
final List<List> instances = queryClient.query(
dataSetLookup.getDataSetUUID(),
QueryServicesClient.QUERY_MAP_RAW,
filterSpec,
dataSetLookup.getRowOffset() / dataSetLookup.getNumberOfRows(),
dataSetLookup.getNumberOfRows(),
List.class
);

LOGGER.debug("Query client returned {} row(s)", instances.size());

return result;
return buildDataSet(def, instances, extraColumns);
}

@Override
Expand Down Expand Up @@ -197,4 +199,4 @@ protected DataSet buildDataSet(DataSetDef def, List<List> instances, List<DataCo
return dataSet;
}

}
}
Expand Up @@ -23,7 +23,7 @@
import org.dashbuilder.dataset.def.DataSetDefFactory;
import org.dashbuilder.dataset.def.DataSetDefRegistry;
import org.jbpm.console.ng.bd.model.ProcessInstanceDataSetConstants;
import org.jbpm.dashboard.dataset.integration.KieServerDataSetProvider;
import org.jbpm.console.ng.bd.integration.KieServerDataSetProvider;
import org.kie.server.api.KieServerConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -38,16 +38,13 @@ public class DataSetDefsBootstrap {
private static final Logger LOGGER = LoggerFactory.getLogger(DataSetDefsBootstrap.class);
private static final String JBPM_DATA_SOURCE = "${"+ KieServerConstants.CFG_PERSISTANCE_DS + "}";

public static final String TASKS_MONITORING_DATASET = "tasksMonitoring";
public static final String PROCESSES_MONITORING_DATASET = "processesMonitoring";

@Inject
DataSetDefRegistry dataSetDefRegistry;

@PostConstruct
protected void registerDataSetDefinitions() {
DataSetDef processMonitoringDef = DataSetDefFactory.newSQLDataSetDef()
.uuid(PROCESSES_MONITORING_DATASET)
.uuid(DATASET_PROCESS_INSTANCES)
.name("Processes monitoring")
.dataSource(JBPM_DATA_SOURCE)
.dbSQL("select " +
Expand Down Expand Up @@ -76,7 +73,7 @@ protected void registerDataSetDefinitions() {
.buildDef();

DataSetDef taskMonitoringDef = DataSetDefFactory.newSQLDataSetDef()
.uuid(TASKS_MONITORING_DATASET)
.uuid(DATASET_HUMAN_TASKS)
.name("Tasks monitoring")
.dataSource(JBPM_DATA_SOURCE)
.dbSQL("select " +
Expand Down
Expand Up @@ -36,7 +36,6 @@
import org.mockito.runners.MockitoJUnitRunner;

import static org.dashbuilder.dataset.filter.FilterFactory.*;
import static org.jbpm.dashboard.renderer.backend.DataSetDefsBootstrap.*;
import static org.jbpm.dashboard.renderer.model.DashboardData.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
Expand Down Expand Up @@ -73,24 +72,24 @@ public void registerDataSetDefsTest() {

List<DataSetDef> dataSetDefList = argument.getAllValues();
assertEquals(dataSetDefList.size(), 2);
assertEquals(dataSetDefList.get(0).getUUID(), PROCESSES_MONITORING_DATASET);
assertEquals(dataSetDefList.get(1).getUUID(), TASKS_MONITORING_DATASET);
assertEquals(dataSetDefList.get(0).getUUID(), DATASET_PROCESS_INSTANCES);
assertEquals(dataSetDefList.get(1).getUUID(), DATASET_HUMAN_TASKS);
}


//TODO Needs redesign as data source is deployed to kie server
@Ignore
public void procInstancesPreprocessorTest() {
DataSetLookup lookup = DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(PROCESSES_MONITORING_DATASET)
.dataset(DATASET_PROCESS_INSTANCES)
.buildLookup();

dataSetManager.lookupDataSet(lookup);
ArgumentCaptor<DataSetLookup> argument = ArgumentCaptor.forClass(DataSetLookup.class);

verify(dataSetManager).lookupDataSet(argument.capture());
assertEquals(argument.getValue(), DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(PROCESSES_MONITORING_DATASET)
.dataset(DATASET_PROCESS_INSTANCES)
.filter(in(COLUMN_PROCESS_EXTERNAL_ID, deploymentIds))
.buildLookup());
}
Expand All @@ -99,15 +98,15 @@ public void procInstancesPreprocessorTest() {
@Ignore
public void tasksPreprocessorTest() {
DataSetLookup lookup = DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(TASKS_MONITORING_DATASET)
.dataset(DATASET_HUMAN_TASKS)
.buildLookup();

dataSetManager.lookupDataSet(lookup);
ArgumentCaptor<DataSetLookup> argument = ArgumentCaptor.forClass(DataSetLookup.class);

verify(dataSetManager).lookupDataSet(argument.capture());
assertEquals(argument.getValue(), DataSetLookupFactory.newDataSetLookupBuilder()
.dataset(TASKS_MONITORING_DATASET)
.dataset(DATASET_HUMAN_TASKS)
.filter(in(COLUMN_PROCESS_EXTERNAL_ID, deploymentIds))
.buildLookup());
}
Expand Down
11 changes: 11 additions & 0 deletions jbpm-console-ng-dashboard/jbpm-console-ng-dashboard-client/pom.xml
Expand Up @@ -38,6 +38,11 @@
<artifactId>jbpm-console-ng-human-tasks-api</artifactId>
</dependency>

<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-console-ng-business-domain-api</artifactId>
</dependency>

<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-console-ng-generic-client</artifactId>
Expand Down Expand Up @@ -197,5 +202,11 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.uberfire</groupId>
<artifactId>uberfire-testing-utils</artifactId>
<scope>test</scope>
</dependency>

</dependencies>
</project>
Expand Up @@ -18,6 +18,7 @@

import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.dashbuilder.dataset.DataSetLookup;
import org.dashbuilder.dataset.client.DataSetClientServices;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.client.AbstractDisplayer;
Expand All @@ -27,6 +28,7 @@
import org.dashbuilder.renderer.client.metric.MetricDisplayer;
import org.dashbuilder.renderer.client.table.TableDisplayer;
import org.jbpm.console.ng.ga.model.dataset.ConsoleDataSetLookup;
import org.jbpm.console.ng.gc.client.menu.ServerTemplateSelectorMenuBuilder;
import org.jbpm.dashboard.renderer.client.panel.formatter.DurationFormatter;
import org.jbpm.dashboard.renderer.client.panel.i18n.DashboardI18n;
import org.jbpm.dashboard.renderer.client.panel.widgets.ProcessBreadCrumb;
Expand All @@ -48,7 +50,7 @@ public abstract class AbstractDashboard {
protected DisplayerLocator displayerLocator;
protected DisplayerCoordinator displayerCoordinator;

protected String selectedServerTemplate = "maciek-kie-server";
protected ServerTemplateSelectorMenuBuilder serverTemplateSelectorMenuBuilder;

public interface View extends IsWidget {

Expand All @@ -69,29 +71,41 @@ public interface View extends IsWidget {
DashboardI18n getI18nService();
}

public AbstractDashboard(final DashboardFactory dashboardFactory, final DataSetClientServices dataSetClientServices, final PlaceManager placeManager, final DashboardI18n i18n, final ProcessBreadCrumb processBreadCrumb, final DisplayerLocator displayerLocator, final DisplayerCoordinator displayerCoordinator) {
public AbstractDashboard(final DashboardFactory dashboardFactory,
final DataSetClientServices dataSetClientServices,
final PlaceManager placeManager,
final DashboardI18n i18n,
final ProcessBreadCrumb processBreadCrumb,
final DisplayerLocator displayerLocator,
final DisplayerCoordinator displayerCoordinator,
final ServerTemplateSelectorMenuBuilder serverTemplateSelectorMenuBuilder) {
this.dashboardFactory = dashboardFactory;
this.dataSetClientServices = dataSetClientServices;
this.placeManager = placeManager;
this.i18n = i18n;
this.processBreadCrumb = processBreadCrumb;
this.displayerLocator = displayerLocator;
this.displayerCoordinator = displayerCoordinator;
this.serverTemplateSelectorMenuBuilder = serverTemplateSelectorMenuBuilder;
}

public MetricDisplayer createMetricDisplayer(DisplayerSettings settings) {
checkNotNull("displayerSettings", settings);
MetricDisplayer metricDisplayer = dashboardFactory.createMetricDisplayer();
metricDisplayer.setDisplayerSettings(settings);
metricDisplayer.setDataSetHandler(new DataSetHandlerImpl(dataSetClientServices, ConsoleDataSetLookup.fromInstance(settings.getDataSetLookup(), selectedServerTemplate)));
metricDisplayer.setDataSetHandler(new DataSetHandlerImpl(dataSetClientServices, getDataSetLookup(settings)));
return metricDisplayer;
}

private DataSetLookup getDataSetLookup(final DisplayerSettings settings) {
return ConsoleDataSetLookup.fromInstance(settings.getDataSetLookup(), serverTemplateSelectorMenuBuilder.getSelectedServerTemplate());
}

public TableDisplayer createTableDisplayer(DisplayerSettings settings, final String columnId, final DurationFormatter durationFormatter) {
checkNotNull("displayerSettings", settings);
final TableDisplayer tableDisplayer = dashboardFactory.createTableDisplayer();
tableDisplayer.setDisplayerSettings(settings);
tableDisplayer.setDataSetHandler(new DataSetHandlerImpl(dataSetClientServices, ConsoleDataSetLookup.fromInstance(settings.getDataSetLookup(), selectedServerTemplate)));
tableDisplayer.setDataSetHandler(new DataSetHandlerImpl(dataSetClientServices, getDataSetLookup(settings)));
tableDisplayer.addFormatter(columnId, durationFormatter);
tableDisplayer.setOnCellSelectedCommand(new Command() {
public void execute() {
Expand Down Expand Up @@ -151,7 +165,7 @@ public String getSelectedProcess() {
public AbstractDisplayer createDisplayer(DisplayerSettings settings) {
checkNotNull("displayerSettings", settings);
AbstractDisplayer displayer = (AbstractDisplayer) displayerLocator.lookupDisplayer(settings);
displayer.setDataSetHandler(new DataSetHandlerImpl(dataSetClientServices, ConsoleDataSetLookup.fromInstance(settings.getDataSetLookup(), selectedServerTemplate)));
displayer.setDataSetHandler(new DataSetHandlerImpl(dataSetClientServices, getDataSetLookup(settings)));
return displayer;
}

Expand All @@ -166,4 +180,5 @@ public void resetCurrentProcess() {
updateHeaderText();
getView().hideBreadCrumb();
}

}
Expand Up @@ -21,7 +21,6 @@
import org.dashbuilder.displayer.DisplayerSettingsFactory;
import org.dashbuilder.renderer.client.DefaultRenderer;
import org.jbpm.console.ng.gc.client.util.DateUtils;
import org.jbpm.dashboard.renderer.client.panel.i18n.DashboardConstants;
import org.jbpm.dashboard.renderer.client.panel.i18n.DashboardI18n;

import static org.dashbuilder.dataset.filter.FilterFactory.*;
Expand Down Expand Up @@ -276,17 +275,15 @@ public static DisplayerSettings processesByEndDate(DashboardI18n i18n) {
.buildSettings();
}


// Task displayers


public static DisplayerSettings tasksTable(DashboardI18n i18n) {
return DisplayerSettingsFactory.newTableSettings()
.uuid(i18n.taskInstances())
.title(i18n.taskInstances())
.dataset(DATASET_HUMAN_TASKS)
.column(COLUMN_TASK_ID).format(i18n.taskTableId(), NO_DECIMALS)
.column(COLUMN_PROCESS_NAME).format(i18n.taskTableProcess())
.column(COLUMN_PROCESS_INSTANCE_ID).format(i18n.taskTableProcessInstanceId(), NO_DECIMALS)
.column(COLUMN_TASK_NAME).format(i18n.taskTableName())
.column(COLUMN_TASK_OWNER_ID).format(i18n.taskTableOwner())
.column(COLUMN_TASK_STATUS).format(i18n.taskTableStatus())
Expand Down
Expand Up @@ -33,11 +33,9 @@ public class DashboardPerspective {

@Perspective
public PerspectiveDefinition buildPerspective() {

PerspectiveDefinition perspective = new PerspectiveDefinitionImpl(SimpleWorkbenchPanelPresenter.class.getName());
perspective.setName(DashboardConstants.INSTANCE.processDashboardName());

perspective.getRoot().addPart("DashboardScreen");
perspective.getRoot().addPart(DashboardScreen.SCREEN_ID);
return perspective;
}
}

0 comments on commit f647c00

Please sign in to comment.