Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/**
* Copyright (c) 2025, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.studyconfig.server.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.gridsuite.studyconfig.server.StudyConfigApi;
import org.gridsuite.studyconfig.server.dto.*;
import org.gridsuite.studyconfig.server.dto.ComputationResultColumnFilterInfos;
import org.gridsuite.studyconfig.server.service.ComputationResultFiltersService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.UUID;

/**
* @author Rehili Ghazwa <ghazwa.rehili at rte-france.com>
*/
@RestController
@RequestMapping(value = "/" + StudyConfigApi.API_VERSION + "/computation-result-filters")
@RequiredArgsConstructor
public class ComputationResultFiltersController {
private final ComputationResultFiltersService computationGlobalFiltersService;

@PostMapping(value = "/default")
@Operation(summary = "Create a default computation result filters",
description = "Creates a default computation result filters")
@ApiResponse(responseCode = "201", description = "Default computation result filters created",
content = @Content(schema = @Schema(implementation = UUID.class)))
public ResponseEntity<UUID> createDefaultComputationResultFilters() {
UUID id = computationGlobalFiltersService.createDefaultComputingResultFilters();
return ResponseEntity.status(HttpStatus.CREATED).body(id);
}

@GetMapping("/{computationResultFiltersId}/{computationType}")
@Operation(summary = "Get a computation result global filters",
description = "Fetches the computation result global filters for a given computation type")
@ApiResponse(responseCode = "200", description = "Computation result global filters found",
content = @Content(schema = @Schema(implementation = GlobalFilterInfos.class)))
@ApiResponse(responseCode = "404", description = "Computation result global filters not found")
public ResponseEntity<List<GlobalFilterInfos>> getComputingResultGlobalFilters(
@Parameter(description = "Computation result filters Id") @PathVariable UUID computationResultFiltersId,
@Parameter(description = "Computation type") @PathVariable String computationType) {
return ResponseEntity.ok(computationGlobalFiltersService.getComputingResultGlobalFilters(computationResultFiltersId, computationType));
}

@GetMapping("/{computationResultFiltersId}/{computationType}/{computationSubType}")
@Operation(summary = "Get a computation result column filters",
description = "Fetches the computation result column filters for a given computation type and subtype")
@ApiResponse(responseCode = "200", description = "Computation result column filters found",
content = @Content(schema = @Schema(implementation = ComputationResultColumnFilterInfos.class)))
@ApiResponse(responseCode = "404", description = "Computation result column filters not found")
public ResponseEntity<List<ComputationResultColumnFilterInfos>> getComputingResultColumnFilters(
@Parameter(description = "Computation result filters Id") @PathVariable UUID computationResultFiltersId,
@Parameter(description = "Computation type") @PathVariable String computationType,
@Parameter(description = "Computation subtype") @PathVariable String computationSubType) {
return ResponseEntity.ok(computationGlobalFiltersService.getComputingResultColumnFilters(computationResultFiltersId, computationType, computationSubType));
}

@PostMapping("/{computationResultFiltersId}/{computationType}/global-filters")
@Operation(summary = "Set global filters",
description = "Replaces all existing global filters with the provided list for a computation result")
@ApiResponse(responseCode = "204", description = "Global filters set successfully")
@ApiResponse(responseCode = "404", description = "Computation result filters not found")
public ResponseEntity<Void> setGlobalFiltersForComputingResult(
@PathVariable UUID computationResultFiltersId,
@PathVariable String computationType,
@Valid @RequestBody List<GlobalFilterInfos> filters) {
computationGlobalFiltersService.setGlobalFiltersForComputationResult(computationResultFiltersId, computationType, filters);
return ResponseEntity.noContent().build();
}

@PutMapping("/{computationResultFiltersId}/{computationType}/{computationSubType}/columns")
@Operation(summary = "Update a column", description = "Updates an existing column")
@ApiResponse(responseCode = "204", description = "Column updated")
public ResponseEntity<Void> updateColumn(
@PathVariable UUID computationResultFiltersId,
@PathVariable String computationType,
@PathVariable String computationSubType,
@Valid @RequestBody ComputationResultColumnFilterInfos dto) {
computationGlobalFiltersService.updateColumn(computationResultFiltersId, computationType, computationSubType, dto);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public ResponseEntity<Void> deleteSpreadsheetConfig(
@Operation(summary = "Get a column", description = "Retrieves a column by its ID")
@ApiResponse(responseCode = "200", description = "Column found")
@ApiResponse(responseCode = "404", description = "Column not found")
public ResponseEntity<ColumnInfos> getColumn(
public ResponseEntity<SpreadsheetColumnInfos> getColumn(
@Parameter(description = "ID of the spreadsheet config") @PathVariable UUID id,
@Parameter(description = "ID of the column to retrieve") @PathVariable UUID columnId) {
return ResponseEntity.ok(spreadsheetConfigService.getColumn(id, columnId));
Expand All @@ -151,7 +151,7 @@ public ResponseEntity<ColumnInfos> getColumn(
@ApiResponse(responseCode = "201", description = "Column created")
public ResponseEntity<UUID> createColumn(
@Parameter(description = "ID of the spreadsheet config") @PathVariable UUID id,
@Valid @RequestBody ColumnInfos dto) {
@Valid @RequestBody SpreadsheetColumnInfos dto) {
UUID columnId = spreadsheetConfigService.createColumn(id, dto);
return ResponseEntity.status(HttpStatus.CREATED).body(columnId);
}
Expand All @@ -162,7 +162,7 @@ public ResponseEntity<UUID> createColumn(
public ResponseEntity<Void> updateColumn(
@Parameter(description = "ID of the spreadsheet config") @PathVariable UUID id,
@Parameter(description = "ID of the column to update") @PathVariable UUID columnId,
@Valid @RequestBody ColumnInfos dto) {
@Valid @RequestBody SpreadsheetColumnInfos dto) {
spreadsheetConfigService.updateColumn(id, columnId, dto);
return ResponseEntity.noContent().build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Copyright (c) 2025, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.studyconfig.server.dto;

import io.swagger.v3.oas.annotations.media.Schema;

/**
* @author Rehili Ghazwa <ghazwa.rehili at rte-france.com>
*/
@Schema(name = "ColumnFilterInfos", description = "Column filter infos")
public record ColumnFilterInfos(
@Schema(description = "Filter data type")
String filterDataType,

@Schema(description = "Filter type")
String filterType,

@Schema(description = "Filter value")
String filterValue,

@Schema(description = "Filter tolerance for numeric comparisons")
Double filterTolerance
) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright (c) 2025, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.studyconfig.server.dto;

import io.swagger.v3.oas.annotations.media.Schema;

/**
* @author Rehili Ghazwa <ghazwa.rehili at rte-france.com>
*/
@Schema(name = "ComputationResultColumnFilterInfos", description = "Computation Result Column filter infos")
public record ComputationResultColumnFilterInfos(

@Schema(description = "Column id")
String columnId,

@Schema(description = "column filter infos")
ColumnFilterInfos columnFilterInfos
) { }
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
/**
* @author Achour BERRAHMA <achour.berrahma at rte-france.com>
*/
@Schema(name = "ColumnDto", description = "Column configuration")
public record ColumnInfos(
@Schema(name = "SpreadsheetColumnInfos", description = "Column configuration")
public record SpreadsheetColumnInfos(

@Schema(description = "Column UUID")
UUID uuid,
Expand All @@ -41,24 +41,32 @@ public record ColumnInfos(
@Schema(description = "Column id")
String id,

@Schema(description = "Filter data type")
String filterDataType,

@Schema(description = "Filter type")
String filterType,

@Schema(description = "Filter value")
String filterValue,

@Schema(description = "Filter tolerance for numeric comparisons")
Double filterTolerance,

@Schema(description = "Column visibility", defaultValue = "true")
Boolean visible
Boolean visible,

@Schema(description = "column filter infos")
ColumnFilterInfos columnFilterInfos
) {
public ColumnInfos {
public SpreadsheetColumnInfos {
if (visible == null) {
visible = true;
}
}

public SpreadsheetColumnInfos(
UUID uuid,
String name,
ColumnType type,
Integer precision,
String formula,
String dependencies,
String id,
boolean visible,
String filterDataType,
String filterType,
String filterValue,
Double filterTolerance) {
this(uuid, name, type, precision, formula, dependencies, id, visible,
new ColumnFilterInfos(filterDataType, filterType, filterValue, filterTolerance));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public record SpreadsheetConfigInfos(
SheetType sheetType,

@Schema(description = "Columns")
List<ColumnInfos> columns,
List<SpreadsheetColumnInfos> columns,

@Schema(description = "Global filters")
List<GlobalFilterInfos> globalFilters,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/**
* Copyright (c) 2025, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.gridsuite.studyconfig.server.entities;

import jakarta.persistence.*;
import lombok.*;

import java.util.UUID;

/**
* @author Rehili Ghazwa <ghazwa.rehili at rte-france.com>
*/
@Entity
@Table(name = "column_filter")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
public class ColumnFilterEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "uuid")
private UUID uuid;

@Column(name = "filter_data_type", columnDefinition = "varchar(255)")
private String filterDataType;

@Column(name = "filter_type", columnDefinition = "varchar(255)")
private String filterType;

@Column(name = "filter_value", columnDefinition = "CLOB")
private String filterValue;

@Column(name = "filter_tolerance")
private Double filterTolerance;

public void resetFilter() {
this.filterDataType = null;
this.filterType = null;
this.filterTolerance = null;
this.filterValue = null;
}

public ColumnFilterEntity copy() {
return ColumnFilterEntity.builder()
.filterDataType(this.getFilterDataType())
.filterType(this.getFilterType())
.filterValue(this.getFilterValue())
.filterTolerance(this.getFilterTolerance())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
* @author Achour BERRAHMA <achour.berrahma at rte-france.com>
*/
@Entity
@Table(name = "spreadsheet_global_filter")
@Table(name = "global_filter", indexes = {
@Index(name = "idx_global_filter_spreadsheet_config_id", columnList = "spreadsheet_config_id"),
@Index(name = "idx_global_filter_computation_type_filters_id", columnList = "computation_type_filters_id")}
)
@Getter
@Setter
@NoArgsConstructor
Expand All @@ -37,7 +40,7 @@ public class GlobalFilterEntity {
@Column(name = "label", nullable = false)
private String label;

@Column(name = "recent")
@Column(name = "recent", nullable = false, columnDefinition = "boolean default false")
private boolean recent;

@Column(name = "uuid")
Expand Down
Loading