From dc8a462031a13d665e42148fcd39fafadf7fa870 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sun, 26 Feb 2023 09:03:39 +0100 Subject: [PATCH] extract shareable plot config --- .../gallery-view/gallery-view.component.ts | 4 +- pdb-js/src/app/plot.service.ts | 24 ++-- .../visualization-page.component.ts | 22 +-- .../pdbui/PlotSettingsTransformer.java | 23 ++-- .../org/lucares/pdbui/domain/PlotConfig.java | 124 +++++++++++++++++ .../org/lucares/pdbui/domain/PlotRequest.java | 129 ++---------------- 6 files changed, 178 insertions(+), 148 deletions(-) create mode 100644 pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotConfig.java diff --git a/pdb-js/src/app/gallery-view/gallery-view.component.ts b/pdb-js/src/app/gallery-view/gallery-view.component.ts index 2014cd9..ccafe08 100644 --- a/pdb-js/src/app/gallery-view/gallery-view.component.ts +++ b/pdb-js/src/app/gallery-view/gallery-view.component.ts @@ -244,7 +244,7 @@ export class GalleryViewComponent implements OnInit { request.generateThumbnail = true; - this.plotService.splitQuery(request.query, splitByField).subscribe({ + this.plotService.splitQuery(request.config.query, splitByField).subscribe({ next: function(valuesForSplitBy){ console.log("valuesForSplitBy: " + JSON.stringify(valuesForSplitBy)); that.splitByValuesQueue = valuesForSplitBy; @@ -269,7 +269,7 @@ export class GalleryViewComponent implements OnInit { const splitByValue = this.splitByValuesQueue.pop(); let request = masterRequest.copy(); - request.query = "("+request.query+") and " + splitByField+"="+ splitByValue; + request.config.query = "("+request.config.query+") and " + splitByField+"="+ splitByValue; const expectedSequenceId = ++this.sequenceId; diff --git a/pdb-js/src/app/plot.service.ts b/pdb-js/src/app/plot.service.ts index e8631fd..909a5b4 100644 --- a/pdb-js/src/app/plot.service.ts +++ b/pdb-js/src/app/plot.service.ts @@ -207,11 +207,24 @@ export class AutocompleteResult{ export class PlotRequest { constructor( - public query : string, public height : number, public width : number, public thumbnailMaxWidth : number = 300, public thumbnailMaxHeight : number = 200, + public keyOutside : boolean = false, + public generateThumbnail : boolean, + public submitterId: string, + public config: PlotConfig + ){} + + + copy(): PlotRequest { + return JSON.parse(JSON.stringify(this)); + } +} + +export class PlotConfig { + constructor( public query : string, public groupBy : Array, public limitBy : string, public limit : number, @@ -219,16 +232,9 @@ export class PlotRequest { public y2:YAxisDefinition|undefined, public dateRange : string, public aggregates : Array, - public keyOutside : boolean = false, - public generateThumbnail : boolean, public intervalUnit: string, public intervalValue: number, - public submitterId: string, - public renderBarChartTickLabels: boolean = false){} - - copy(): PlotRequest { - return JSON.parse(JSON.stringify(this)); - } + public renderBarChartTickLabels: boolean = false,) {} } export class YAxisDefinition { 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 04519c3..d3a7f6a 100644 --- a/pdb-js/src/app/visualization-page/visualization-page.component.ts +++ b/pdb-js/src/app/visualization-page/visualization-page.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { PlotService, PlotType, PlotRequest, PlotResponse, TagField, FilterDefaults, DataType, YAxisDefinition, AxesTypes } from '../plot.service'; +import { PlotService, PlotType, PlotRequest, PlotResponse, TagField, FilterDefaults, DataType, YAxisDefinition, AxesTypes, PlotConfig } from '../plot.service'; import { UntypedFormControl, Validators } from '@angular/forms'; import { MatLegacySnackBar as MatSnackBar } from '@angular/material/legacy-snack-bar'; import { LimitByComponent } from '../limit-by/limit-by.component'; @@ -189,12 +189,8 @@ export class VisualizationPageComponent implements OnInit { const y2 = this.y2AxisDefinitionComponent ? this.y2AxisDefinitionComponent.getAxisDefinition() : undefined; const results = document.getElementById("results"); - const request = new PlotRequest( + const config = new PlotConfig( this.query.query, - results != null ? results.offsetHeight-1: 1024, - results != null ? results.offsetWidth-1 : 1024, - 300, // thumbnailMaxWidth - 200, // thumbnailMaxHeight this.groupBy.map(o => o.name), this.limitbycomponent.limitBy, this.limitbycomponent.limit, @@ -202,12 +198,20 @@ export class VisualizationPageComponent implements OnInit { y2, this.dateRangeAsString(), // dateRange aggregates, // aggregates - false, // keyOutside - this.enableGallery, // generateThumbnail this.intervalUnit, this.intervalValue, + this.renderBarChartTickLabels, + ); + + const request = new PlotRequest( + results != null ? results.offsetHeight-1: 1024, + results != null ? results.offsetWidth-1 : 1024, + 300, // thumbnailMaxWidth + 200, // thumbnailMaxHeight + false, // keyOutside + this.enableGallery, // generateThumbnail this.submitterId, - this.renderBarChartTickLabels); + config); return request; } diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java index 2eb2042..e3761df 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java @@ -13,30 +13,31 @@ import org.lucares.pdb.plot.api.ParallelRequestsAggregate; import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.pdb.plot.api.ScatterAggregateHandler; import org.lucares.pdb.plot.api.YAxisDefinition; +import org.lucares.pdbui.domain.PlotConfig; import org.lucares.pdbui.domain.PlotRequest; class PlotSettingsTransformer { static PlotSettings toSettings(final PlotRequest request) { final PlotSettings result = new PlotSettings(); - - result.setQuery(request.getQuery()); - result.setGroupBy(request.getGroupBy()); + final PlotConfig config = request.getConfig(); + result.setQuery(config.getQuery()); + result.setGroupBy(config.getGroupBy()); result.setHeight(request.getHeight()); result.setWidth(request.getWidth()); - result.setLimit(request.getLimit()); - result.setLimitBy(request.getLimitBy()); - result.setDateRange(request.getDateRange()); + result.setLimit(config.getLimit()); + result.setLimitBy(config.getLimitBy()); + result.setDateRange(config.getDateRange()); result.setKeyOutside(request.isKeyOutside()); result.setThumbnailMaxWidth(request.getThumbnailMaxWidth()); result.setThumbnailMaxHeight(request.getThumbnailMaxHeight()); result.setGenerateThumbnail(request.isGenerateThumbnail()); - result.setY1(request.getY1()); - result.setY2(request.getY2()); - result.setAggregates(toAggregateInternal(request.getY1(), request.getY2(), request.getAggregates())); - result.setInterval(Interval.create(request.getIntervalUnit(), request.getIntervalValue(), result.dateRange())); - result.setRenderBarChartTickLabels(request.isRenderBarChartTickLabels()); + result.setY1(config.getY1()); + result.setY2(config.getY2()); + result.setAggregates(toAggregateInternal(config.getY1(), config.getY2(), config.getAggregates())); + result.setInterval(Interval.create(config.getIntervalUnit(), config.getIntervalValue(), result.dateRange())); + result.setRenderBarChartTickLabels(config.isRenderBarChartTickLabels()); return result; } diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotConfig.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotConfig.java new file mode 100644 index 0000000..70059f2 --- /dev/null +++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotConfig.java @@ -0,0 +1,124 @@ +package org.lucares.pdbui.domain; + +import java.util.ArrayList; +import java.util.List; + +import org.lucares.pdb.plot.api.Aggregate; +import org.lucares.pdb.plot.api.Limit; +import org.lucares.pdb.plot.api.YAxisDefinition; + +/** + * The user defined settings of a plot. Contains everything the user cares + * about, but nothing else. Contains: query, selected plot types, axis + * definition, ... Does not contain: plot size, thumbnail size, job submitter + * id, ... + */ +public class PlotConfig { + + private String query; + private List groupBy; + + private Limit limitBy = Limit.NO_LIMIT; + + private int limit = Integer.MAX_VALUE; + + private YAxisDefinition y1 = new YAxisDefinition(); + private YAxisDefinition y2 = new YAxisDefinition(); + + private String dateRange; + + private List aggregates = new ArrayList<>(); + + private String intervalUnit; + private int intervalValue; + + private boolean renderBarChartTickLabels; + + public String getQuery() { + return query; + } + + public void setQuery(final String query) { + this.query = query; + } + + public List getGroupBy() { + return groupBy; + } + + public void setGroupBy(final List groupBy) { + this.groupBy = groupBy; + } + + public Limit getLimitBy() { + return limitBy; + } + + public void setLimitBy(final Limit limitBy) { + this.limitBy = limitBy; + } + + public int getLimit() { + return limit; + } + + public void setLimit(final int limit) { + this.limit = limit; + } + + public String getDateRange() { + return dateRange; + } + + public void setDateRange(final String dateRange) { + this.dateRange = dateRange; + } + + public void setAggregate(final List aggregates) { + this.aggregates = aggregates; + } + + public List getAggregates() { + return aggregates; + } + + public YAxisDefinition getY1() { + return y1; + } + + public void setY1(final YAxisDefinition y1) { + this.y1 = y1; + } + + public YAxisDefinition getY2() { + return y2; + } + + public void setY2(final YAxisDefinition y2) { + this.y2 = y2; + } + + public String getIntervalUnit() { + return intervalUnit; + } + + public void setIntervalUnit(final String intervalUnit) { + this.intervalUnit = intervalUnit; + } + + public int getIntervalValue() { + return intervalValue; + } + + public void setIntervalValue(final int intervalValue) { + this.intervalValue = intervalValue; + } + + public boolean isRenderBarChartTickLabels() { + return renderBarChartTickLabels; + } + + public void setRenderBarChartTickLabels(final boolean renderBarChartTickLabels) { + this.renderBarChartTickLabels = renderBarChartTickLabels; + } +} diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java index d2bbcc1..224fd29 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java @@ -1,14 +1,6 @@ package org.lucares.pdbui.domain; -import java.util.ArrayList; -import java.util.List; - -import org.lucares.pdb.plot.api.Aggregate; -import org.lucares.pdb.plot.api.Limit; -import org.lucares.pdb.plot.api.YAxisDefinition; - public class PlotRequest { - private String query; private int height = 1000; @@ -18,35 +10,18 @@ public class PlotRequest { private int thumbnailMaxHeight = 0; - private List groupBy; - - private Limit limitBy = Limit.NO_LIMIT; - - private int limit = Integer.MAX_VALUE; - - private YAxisDefinition y1 = new YAxisDefinition(); - private YAxisDefinition y2 = new YAxisDefinition(); - - private String dateRange; - - private List aggregates = new ArrayList<>(); - - private boolean keyOutside; - private boolean generateThumbnail; - private String intervalUnit; - private int intervalValue; - - private boolean renderBarChartTickLabels; - + private boolean keyOutside; private String submitterId; - public String getQuery() { - return query; + private PlotConfig config; + + public PlotConfig getConfig() { + return config; } - public void setQuery(final String query) { - this.query = query; + public void setConfig(final PlotConfig config) { + this.config = config; } public int getWidth() { @@ -81,51 +56,6 @@ public class PlotRequest { this.thumbnailMaxHeight = thumbnailMaxHeight; } - @Override - public String toString() { - return query + ":" + height + "x" + width; - } - - public List getGroupBy() { - return groupBy; - } - - public void setGroupBy(final List groupBy) { - this.groupBy = groupBy; - } - - public Limit getLimitBy() { - return limitBy; - } - - public void setLimitBy(final Limit limitBy) { - this.limitBy = limitBy; - } - - public int getLimit() { - return limit; - } - - public void setLimit(final int limit) { - this.limit = limit; - } - - public String getDateRange() { - return dateRange; - } - - public void setDateRange(final String dateRange) { - this.dateRange = dateRange; - } - - public void setAggregate(final List aggregates) { - this.aggregates = aggregates; - } - - public List getAggregates() { - return aggregates; - } - public void setKeyOutside(final boolean keyOutside) { this.keyOutside = keyOutside; } @@ -142,46 +72,6 @@ public class PlotRequest { this.generateThumbnail = generateThumbnail; } - public YAxisDefinition getY1() { - return y1; - } - - public void setY1(final YAxisDefinition y1) { - this.y1 = y1; - } - - public YAxisDefinition getY2() { - return y2; - } - - public void setY2(final YAxisDefinition y2) { - this.y2 = y2; - } - - public String getIntervalUnit() { - return intervalUnit; - } - - public void setIntervalUnit(final String intervalUnit) { - this.intervalUnit = intervalUnit; - } - - public int getIntervalValue() { - return intervalValue; - } - - public void setIntervalValue(final int intervalValue) { - this.intervalValue = intervalValue; - } - - public boolean isRenderBarChartTickLabels() { - return renderBarChartTickLabels; - } - - public void setRenderBarChartTickLabels(final boolean renderBarChartTickLabels) { - this.renderBarChartTickLabels = renderBarChartTickLabels; - } - public String getSubmitterId() { return submitterId; } @@ -190,4 +80,9 @@ public class PlotRequest { this.submitterId = submitterId; } + @Override + public String toString() { + return (config != null ? config.getQuery() : "") + ":" + height + "x" + width; + } + }