From 198b51089d5b4dddda53c6a6fee241a92da02918 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sun, 10 Nov 2019 09:38:16 +0100 Subject: [PATCH] make defaults for groupBy configurable We do not know which fields exist at compile time. But it is a great help to have some pre-selected fields in groupBy. Solved by adding a configuration option. --- pdb-js/src/app/plot.service.ts | 34 +++++++------------ .../visualization-page.component.ts | 17 +++++++--- .../java/org/lucares/pdbui/PdbController.java | 19 ++++++++++- .../java/org/lucares/pdbui/PropertyKeys.java | 4 ++- .../lucares/pdbui/domain/FilterDefaults.java | 33 ++++++++++++++++++ 5 files changed, 78 insertions(+), 29 deletions(-) create mode 100644 pdb-ui/src/main/java/org/lucares/pdbui/domain/FilterDefaults.java diff --git a/pdb-js/src/app/plot.service.ts b/pdb-js/src/app/plot.service.ts index 1ad1b34..326ca11 100644 --- a/pdb-js/src/app/plot.service.ts +++ b/pdb-js/src/app/plot.service.ts @@ -9,18 +9,10 @@ import { Observable } from 'rxjs/Observable'; export class PlotService { plotTypes: Array; - - tagFields: Array; - + constructor(private http: HttpClient) { this.plotTypes = new Array(); - this.plotTypes.push(new PlotType( - "SCATTER", - "Scatter", - "scatter-chart2", - true, - DataType.Time, - DataType.Duration)); + this.plotTypes.push(new PlotType("SCATTER","Scatter","scatter-chart2",true,DataType.Time,DataType.Duration)); this.plotTypes.push(new PlotType("HEATMAP", "Heatmap", "heatmap", false, DataType.Other, DataType.Other)); this.plotTypes.push(new PlotType("CONTOUR", "Contour", "contour-chart", false, DataType.Time, DataType.Duration)); this.plotTypes.push(new PlotType("CUM_DISTRIBUTION", "Cumulative Distribution", "cumulative-distribution-chart", true, DataType.Percent, DataType.Duration)); @@ -33,8 +25,6 @@ export class PlotService { this.plotTypes.push(new PlotType("PIE", "Pie", "pie-chart", false, DataType.Other, DataType.Other)); this.plotTypes.push(new PlotType("BAR", "Bar", "bar-chart", false, DataType.Other, DataType.Other)); this.plotTypes.push(new PlotType("STEP_FIT", "Step Fit", "step-fit", false, DataType.Other, DataType.Other)); - - this.tagFields = new Array(); } ngOnInit() { @@ -45,16 +35,8 @@ export class PlotService { return this.plotTypes.filter(plotType => plotType.active); } - getTagFields(): Array { - const that = this; - this.http.get('//'+window.location.hostname+':8080/fields').subscribe(data => { - if (data instanceof Array){ - data.forEach(function(name) { - that.tagFields.push(new TagField(name)); - }); - } - }); - return this.tagFields; + getTagFields(): Observable> { + return this.http.get>('//'+window.location.hostname+':8080/fields'); } autocomplete(query: string, caretIndex: number): Observable @@ -72,6 +54,10 @@ export class PlotService { console.log("send plot request: "+ JSON.stringify(plotRequest)); return this.http.post('//'+window.location.hostname+':8080/plots', plotRequest); } + + getFilterDefaults(): Observable{ + return this.http.get('//'+window.location.hostname+':8080/filters/defaults') + } } @@ -181,3 +167,7 @@ export class DataSeriesStats { plottedValues : number; } +export class FilterDefaults { + groupBy: Array; + fields: Array; +} diff --git a/pdb-js/src/app/visualization-page/visualization-page.component.ts b/pdb-js/src/app/visualization-page/visualization-page.component.ts index 8b624c6..3352671 100644 --- a/pdb-js/src/app/visualization-page/visualization-page.component.ts +++ b/pdb-js/src/app/visualization-page/visualization-page.component.ts @@ -1,11 +1,11 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { PlotService, PlotType, PlotRequest, PlotResponse } from '../plot.service'; +import { PlotService, PlotType, PlotRequest, PlotResponse, TagField, FilterDefaults } from '../plot.service'; import { Observable } from 'rxjs/Observable'; import { FormControl, Validators } from '@angular/forms'; import { LimitByComponent } from '../limit-by/limit-by.component'; import { YAxisRangeComponent } from '../y-axis-range/y-axis-range.component'; import { QueryAutocompleteComponent } from '../query-autocomplete/query-autocomplete.component'; -import {PlotViewComponent, SelectionRange, DateAnchor } from '../plot-view/plot-view.component' +import {PlotViewComponent, SelectionRange, DateAnchor} from '../plot-view/plot-view.component' import * as moment from 'moment'; @Component({ @@ -27,9 +27,9 @@ export class VisualizationPageComponent implements OnInit { selectedCombinePlotType = new FormControl(''); combinePlotTypes: Array; - tagFields: Array; + tagFields: Array = new Array(); - groupBy: Array = []; + groupBy = new Array(); @ViewChild(LimitByComponent, {static: false}) private limitbycomponent : LimitByComponent; @@ -62,7 +62,14 @@ export class VisualizationPageComponent implements OnInit { this.combinePlotTypes = this.getCombinablePlotTypes(this.selectedPlotType.value); - this.tagFields = this.plotService.getTagFields(); + that.plotService.getFilterDefaults().subscribe(function(filterDefaults) { + + filterDefaults.fields.forEach(function(name) { + that.tagFields.push(new TagField(name)); + }); + + that.groupBy = that.tagFields.filter(val => filterDefaults.groupBy.includes(val.name)); + }); this.yAxisScale = "LOG10"; this.selectedPlotType.valueChanges.subscribe(function(selectedMainPlotType){ diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java index c633335..51ef49f 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java @@ -8,9 +8,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import java.util.concurrent.TimeUnit; @@ -29,6 +31,7 @@ import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.pdbui.domain.AutocompleteProposal; import org.lucares.pdbui.domain.AutocompleteProposalByValue; import org.lucares.pdbui.domain.AutocompleteResponse; +import org.lucares.pdbui.domain.FilterDefaults; import org.lucares.pdbui.domain.PlotRequest; import org.lucares.pdbui.domain.PlotResponse; import org.lucares.pdbui.domain.PlotResponseStats; @@ -76,8 +79,11 @@ public class PdbController implements HardcodedValues, PropertyKeys { @Value("${" + PRODUCTION_MODE + ":true}") private boolean modeProduction; - @Value("${"+QUERY_EXAMPLES+":}") + @Value("${"+DEFAULTS_QUERY_EXAMPLES+":}") private String queryExamples; + + @Value("${"+DEFAULTS_GROUP_BY+":}") + private String defaultsGroupBy; public PdbController(final PerformanceDb db, final Plotter plotter) { this.db = db; @@ -292,6 +298,17 @@ public class PdbController implements HardcodedValues, PropertyKeys { return fields; } + + @RequestMapping(path = "/filters/defaults", // + method = RequestMethod.GET, // + produces = MediaType.APPLICATION_JSON_VALUE // + ) + @ResponseBody + public FilterDefaults getFilterDefaults() { + Set groupBy = defaultsGroupBy.isBlank() ? Set.of() : Set.of(defaultsGroupBy.split("\\s*,\\s*")); + List fields = fields(); + return new FilterDefaults(fields, groupBy); + } private List toAutocompleteProposals(final List proposals) { diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PropertyKeys.java b/pdb-ui/src/main/java/org/lucares/pdbui/PropertyKeys.java index 9abada4..d7f1ca7 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PropertyKeys.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PropertyKeys.java @@ -18,5 +18,7 @@ public interface PropertyKeys { */ String PRODUCTION_MODE = "mode.production"; - String QUERY_EXAMPLES = "query.examples"; + String DEFAULTS_QUERY_EXAMPLES = "defaults.query.examples"; + + String DEFAULTS_GROUP_BY = "defaults.groupBy"; } diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/FilterDefaults.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/FilterDefaults.java new file mode 100644 index 0000000..02ddb35 --- /dev/null +++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/FilterDefaults.java @@ -0,0 +1,33 @@ +package org.lucares.pdbui.domain; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class FilterDefaults { + private Set groupBy; + + private List fields; + + public FilterDefaults(final List fields, final Set groupBy) { + this.fields = new ArrayList(fields); + this.groupBy = new HashSet(groupBy); + } + + public Set getGroupBy() { + return new HashSet(groupBy); + } + + public void setGroupBy(Set groupBy) { + this.groupBy = new HashSet(groupBy); + } + + public List getFields() { + return new ArrayList(fields); + } + + public void setFields(List fields) { + this.fields = new ArrayList(fields); + } +}