564996 - xy chartviewer does not consider preview checkbox correctly

Signed-off-by: Matthias Koller <m.koller@peak-solution.de>
diff --git a/build.gradle b/build.gradle
index 782aca8..d68bff6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,7 +24,8 @@
 subprojects {
 
 	apply plugin: 'java'
-	
+	apply plugin: 'maven'
+
 	group = rootProject.group
 	version = rootProject.version
 	
diff --git a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html
index 85ba743..fcb98ad 100644
--- a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html
+++ b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.html
@@ -15,17 +15,17 @@
 <p-chart #lineChart type="line" [data]="data" [options]="options"></p-chart>
 
 <p-accordion>
-    <p-accordionTab header="Optionen">
+    <p-accordionTab header="{{'chartviewer.request-options.options' | translate}}">
         
-        Von <input type="number" numbersOnly pInputText [(ngModel)]="rangeValues[0]" />
-        Bis <input type="number" numbersOnly pInputText [(ngModel)]="rangeValues[1]" />
-        Gesamt {{numberOfRows}}
-        Schrittweite: <input type="text" numbersOnly pInputText [(ngModel)]="step"/>
-        Vorschauwerte<p-checkbox [(ngModel)]="previewEnabled" binary="true"></p-checkbox> <input *ngIf="previewEnabled" type="text" numbersOnly pInputText [(ngModel)]="numberOfChunks" />
+        {{'chartviewer.request-options.from' | translate}} <input type="number" numbersOnly pInputText [(ngModel)]="rangeValues[0]" />
+        {{'chartviewer.request-options.to' | translate}} <input type="number" numbersOnly pInputText [(ngModel)]="rangeValues[1]" />
+        {{'chartviewer.request-options.overall' | translate}} {{numberOfRows}}
+        {{'chartviewer.request-options.step-size' | translate}}: <input type="text" numbersOnly pInputText [(ngModel)]="step"/>
+        {{'chartviewer.request-options.preview-values' | translate}}<p-checkbox [(ngModel)]="previewEnabled" binary="true"></p-checkbox> <input *ngIf="previewEnabled" type="text" numbersOnly pInputText [(ngModel)]="numberOfChunks" />
  
         <div style="margin: 20px 0;">
             <p-slider [(ngModel)]="rangeValues" [range]="true" [min]="1" [max]="numberOfRows" [step]="step"></p-slider>
         </div>
-        <p-button label="Anwenden" (onClick)="applySettings($event)"></p-button>
+        <p-button label="{{'chartviewer.request-options.apply' | translate}}" (onClick)="applySettings($event)"></p-button>
     </p-accordionTab>
 </p-accordion>
diff --git a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts
index 10262be..0b36ab5 100644
--- a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts
+++ b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/chartviewer/chart-viewer.component.ts
@@ -116,8 +116,8 @@
   }
 
   chartChannel() {
-    this.chartMeasuredValues(this.chartService.loadPreviewValues(
-      this.channelGroup, [this.channels[0]], this.numberOfChunks, this.rangeValues[0] - 1, this.rangeValues[1]));
+    this.chartMeasuredValues(this.chartService.loadValues(
+      this.channelGroup, [this.channels[0]], this.rangeValues[0] - 1, this.rangeValues[1], this.previewEnabled ? this.numberOfChunks : 0));
   }
 
   chartMeasuredValues(measuredValues: Observable<MeasuredValues[]>) {
diff --git a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html
index 108ee9a..e542627 100644
--- a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html
+++ b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/request-options/request-options.component.html
@@ -12,12 +12,12 @@
  *
  ********************************************************************************-->
 <p-accordion [style]="{'width':'100%'}">
-  <p-accordionTab header="Optionen" [disabled]="!channelGroups || channelGroups.length === 0">
+  <p-accordionTab header="{{'chartviewer.request-options.options' | translate}}" [disabled]="!channelGroups || channelGroups.length === 0">
     <div class="p-grid nested-grid p-align-center">
       <!-- Row 1 -->
         <!-- left -->
       <div class="p-col-2">
-        <label for="rangeValStart">Von</label>
+        <label for="rangeValStart">{{'chartviewer.request-options.from' | translate}}</label>
         <p-spinner id="rangeValStart"
           size="4"
           [(ngModel)]="rangeValues[0]"
@@ -28,7 +28,7 @@
           ></p-spinner>
       </div>
       <div class="p-col-2">
-        <label for="rangeValEnd">Bis</label>
+        <label for="rangeValEnd">{{'chartviewer.request-options.to' | translate}}</label>
         <p-spinner id="rangeValEnd"
           size="4"
           [(ngModel)]="rangeValues[1]"
@@ -40,12 +40,12 @@
           ></p-spinner>
       </div>
       <div class="p-col-4">
-        <label for="step">Schrittweite</label>
+        <label for="step">{{'chartviewer.request-options.step-size' | translate}}</label>
         <p-spinner id="step" type="text" [(ngModel)]="step" size="4"></p-spinner>
       </div>
         <!-- right -->
       <div class="p-col-4">
-        <label for="preview">Vorschauwerte</label>
+        <label for="preview">{{'chartviewer.request-options.preview-values' | translate}}</label>
         <p-checkbox id="preview" [(ngModel)]="previewEnabled" binary="true"></p-checkbox>
       </div>
 
@@ -69,7 +69,7 @@
       <div class="p-col-12" style="text-align: right;">
         <button class="btn btn-mdm" (click)="onApplySettings($event)">
           <span class="fa fa-check"></span>
-          Übernehmen
+          {{'chartviewer.request-options.apply' | translate}}
         </button>
       </div>
     </div>
diff --git a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts
index 549a418..2a1e0d3 100644
--- a/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts
+++ b/nucleus/webclient/src/main/webapp/src/app/chartviewer/components/xy-chart-viewer/xy-chart-viewer.component.ts
@@ -125,8 +125,8 @@
   private doChart() {
     if (this.arrayUtil.isNotEmpty(this.selectedChannelRows) && this.requestOptions != undefined) {
       const xChannels = this.selectedChannelRows.filter(row => row.xChannel != undefined)
-        .map(row => this.chartviewerDataService.loadMeasuredValues(
-          row.channelGroup, [row.xChannel], this.requestOptions.startIndex, this.requestOptions.requestSize));
+        .map(row => this.chartviewerDataService.loadValues(row.channelGroup, [row.xChannel],
+          this.requestOptions.startIndex, this.requestOptions.requestSize, this.requestOptions.getChunks()));
       forkJoin(xChannels)
         .pipe(
           map(array => array.map((mea, index) => ({yChannel: this.selectedChannelRows[index].yChannel, measuredValues: mea[0]}))),
@@ -167,8 +167,8 @@
       // const channelGroups = this.selectedChannelGroups.filter(cg => this.arrayUtil.isNotEmpty(yChannels[cg.id]));
       const channelGroups = Array.from(new Set(this.selectedChannelRows.map(row => row.channelGroup)));
 
-      const obs = channelGroups.map(cg => this.chartviewerDataService.loadMeasuredValues(
-        cg, yChannels[cg.id], this.requestOptions.startIndex, this.requestOptions.requestSize));
+      const obs = channelGroups.map(cg => this.chartviewerDataService.loadValues(
+        cg, yChannels[cg.id], this.requestOptions.startIndex, this.requestOptions.requestSize, this.requestOptions.getChunks()));
       // forkJoin return observables in order of input array. Therefore channelgroup id has to be like tmpChannelGroups[index].id
       return forkJoin(obs)
         .pipe(
diff --git a/nucleus/webclient/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts b/nucleus/webclient/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts
index c818e02..547c066 100644
--- a/nucleus/webclient/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts
+++ b/nucleus/webclient/src/main/webapp/src/app/chartviewer/model/types/request-options.class.ts
@@ -23,4 +23,12 @@
     this.previewEnabled = previewEnabled;

     this.numberOfChunks = numberOfChunks;

   }

+

+  getChunks() {

+    if (this.previewEnabled) {

+      return this.numberOfChunks;

+    } else {

+      return 0;

+    }

+  }

 }

diff --git a/nucleus/webclient/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts b/nucleus/webclient/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts
index 7773a30..5332c9d 100644
--- a/nucleus/webclient/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts
+++ b/nucleus/webclient/src/main/webapp/src/app/chartviewer/services/chart-viewer-data.service.ts
@@ -58,6 +58,29 @@
     this._contextUrl = _prop.getUrl('mdm/environments');
   }
 
+  /**
+   * Loads preview value (if chunks > 0) or measured values (if chunks == 0).
+   * @param channelGroup channel group node
+   * @param channels channel nodes
+   * @param startIndex start index to load the data
+   * @param requestSize number of requested values
+   * @param chunks preview chunks. If 0, preview is disabled and original values are loaded
+   */
+  loadValues(channelGroup: Node, channels: Node[], startIndex = 0, requestSize = 0, chunks = 0) {
+    if (chunks > 0) {
+      return this.loadPreviewValues(channelGroup, channels, chunks, startIndex, requestSize);
+    } else {
+      return this.loadMeasuredValues(channelGroup, channels, startIndex, requestSize);
+    }
+  }
+
+  /**
+   * Loads measured values
+   * @param channelGroup channel group node
+   * @param channels channel nodes
+   * @param startIndex start index to load the data
+   * @param requestSize number of requested values
+   */
   loadMeasuredValues(channelGroup: Node, channels: Node[], startIndex = 0, requestSize = 0) {
     let readRequest = {
       'channelGroupId': channelGroup.id,
@@ -77,6 +100,14 @@
       );
   }
 
+  /**
+   * Loads preview values.
+   * @param channelGroup channel group node
+   * @param channels channel nodes
+   * @param chunks preview chunks
+   * @param startIndex start index to load the data
+   * @param requestSize number of requested values
+   */
   loadPreviewValues(channelGroup: Node, channels: Node[], chunks: number, startIndex = 0, requestSize = 0) {
     let readRequest = {
       'channelGroupId': channelGroup.id,
diff --git a/nucleus/webclient/src/main/webapp/src/assets/i18n/de.json b/nucleus/webclient/src/main/webapp/src/assets/i18n/de.json
index 52b4e18..8d5dc04 100644
--- a/nucleus/webclient/src/main/webapp/src/assets/i18n/de.json
+++ b/nucleus/webclient/src/main/webapp/src/assets/i18n/de.json
@@ -425,7 +425,15 @@
 		}
 	},
 	"chartviewer": {
-		"request-options": {},
+		"request-options": {
+			"options": "Optionen",
+			"from": "von",
+			"to": "bis",
+			"overall": "Gesamt",
+			"step-size": "Schrittweite",
+			"preview-values": "Vorschauwerte",
+			"apply": "Übernehmen"
+		},
 		"xy-chart-data-selection-panel": {
 			"select-channel-placeholder": "Kanal wählen",
 			"no-x-channel-dialog-header": "Information",
diff --git a/nucleus/webclient/src/main/webapp/src/assets/i18n/en.json b/nucleus/webclient/src/main/webapp/src/assets/i18n/en.json
index 1b1f927..4aa8b1d 100644
--- a/nucleus/webclient/src/main/webapp/src/assets/i18n/en.json
+++ b/nucleus/webclient/src/main/webapp/src/assets/i18n/en.json
@@ -425,7 +425,15 @@
 		}
 	},
 	"chartviewer": {
-		"request-options": {},
+		"request-options": {
+			"options": "Options",
+			"from": "from",
+			"to": "to",
+			"overall": "overall",
+			"step-size": "step size",
+			"preview-values": "preview values",
+			"apply": "Apply"
+		},
 		"xy-chart-data-selection-panel": {
 			"select-channel-placeholder": "Select Channel",
 			"no-x-channel-dialog-header": "Information",