Skip to content

Commit fa3ecdb

Browse files
committed
Add owner, creation date, last modification date and last modification user to the process configs
Signed-off-by: Franck LECUYER <franck.lecuyer@rte-france.com>
1 parent 2e3181e commit fa3ecdb

25 files changed

Lines changed: 405 additions & 63 deletions

File tree

monitor-commons/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,12 @@
2323
<groupId>com.fasterxml.jackson.core</groupId>
2424
<artifactId>jackson-annotations</artifactId>
2525
</dependency>
26+
27+
<!-- Test dependencies -->
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter-test</artifactId>
31+
<scope>test</scope>
32+
</dependency>
2633
</dependencies>
2734
</project>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Copyright (c) 2026, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.monitor.commons;
8+
9+
import com.fasterxml.jackson.annotation.JsonProperty;
10+
import lombok.Getter;
11+
12+
import java.time.Instant;
13+
import java.util.List;
14+
import java.util.UUID;
15+
16+
/**
17+
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
18+
*/
19+
@Getter
20+
public abstract class AbstractProcessConfig implements ProcessConfig {
21+
@JsonProperty(required = true)
22+
private final List<UUID> modificationUuids;
23+
24+
private final String owner;
25+
26+
private final Instant creationDate;
27+
28+
private final Instant lastModificationDate;
29+
30+
private final String lastModifiedBy;
31+
32+
protected AbstractProcessConfig(
33+
List<UUID> modificationUuids,
34+
String owner,
35+
Instant creationDate,
36+
Instant lastModificationDate,
37+
String lastModifiedBy
38+
) {
39+
this.modificationUuids = modificationUuids != null ? List.copyOf(modificationUuids) : null;
40+
this.owner = owner;
41+
this.creationDate = creationDate;
42+
this.lastModificationDate = lastModificationDate;
43+
this.lastModifiedBy = lastModifiedBy;
44+
}
45+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Copyright (c) 2026, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.monitor.commons;
8+
9+
/**
10+
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
11+
*/
12+
public final class Constants {
13+
14+
private Constants() {
15+
}
16+
17+
public static final String HEADER_USER_ID = "userId";
18+
}

monitor-commons/src/main/java/org/gridsuite/monitor/commons/ProcessConfig.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
*/
77
package org.gridsuite.monitor.commons;
88

9+
import com.fasterxml.jackson.annotation.JsonProperty;
910
import com.fasterxml.jackson.annotation.JsonSubTypes;
1011
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1112

13+
import java.time.Instant;
1214
import java.util.List;
1315
import java.util.UUID;
1416

@@ -25,5 +27,17 @@
2527
public interface ProcessConfig {
2628
ProcessType processType();
2729

28-
List<UUID> modificationUuids();
30+
List<UUID> getModificationUuids();
31+
32+
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
33+
String getOwner();
34+
35+
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
36+
Instant getCreationDate();
37+
38+
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
39+
Instant getLastModificationDate();
40+
41+
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
42+
String getLastModifiedBy();
2943
}

monitor-commons/src/main/java/org/gridsuite/monitor/commons/SecurityAnalysisConfig.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,43 @@
66
*/
77
package org.gridsuite.monitor.commons;
88

9+
import com.fasterxml.jackson.annotation.JsonProperty;
10+
import lombok.EqualsAndHashCode;
11+
import lombok.Getter;
12+
13+
import java.time.Instant;
914
import java.util.List;
1015
import java.util.UUID;
1116

1217
/**
1318
* @author Antoine Bouhours <antoine.bouhours at rte-france.com>
1419
*/
15-
public record SecurityAnalysisConfig(
16-
UUID parametersUuid,
17-
List<String> contingencies,
18-
List<UUID> modificationUuids
19-
) implements ProcessConfig {
20+
@Getter
21+
@EqualsAndHashCode(callSuper = true)
22+
public class SecurityAnalysisConfig extends AbstractProcessConfig {
23+
@JsonProperty(required = true)
24+
private final UUID parametersUuid;
25+
26+
@JsonProperty(required = true)
27+
private final List<String> contingencies;
28+
29+
public SecurityAnalysisConfig(
30+
UUID parametersUuid,
31+
List<String> contingencies,
32+
List<UUID> modificationUuids,
33+
String owner,
34+
Instant creationDate,
35+
Instant lastModificationDate,
36+
String lastModifiedBy
37+
) {
38+
super(modificationUuids, owner, creationDate, lastModificationDate, lastModifiedBy);
39+
this.parametersUuid = parametersUuid;
40+
this.contingencies = contingencies != null ? List.copyOf(contingencies) : null;
41+
}
2042

2143
@Override
2244
public ProcessType processType() {
2345
return ProcessType.SECURITY_ANALYSIS;
2446
}
2547
}
48+
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* Copyright (c) 2026, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.monitor.commons;
8+
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.time.Instant;
12+
import java.util.List;
13+
import java.util.UUID;
14+
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
17+
/**
18+
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
19+
*/
20+
class SecurityAnalysisConfigTest {
21+
22+
@Test
23+
void createSecurityAnalysisConfig() {
24+
UUID parametersUuid = UUID.randomUUID();
25+
UUID modificationUuid = UUID.randomUUID();
26+
List<String> contingencies = List.of("contingency1", "contingency2");
27+
String owner = "user1";
28+
Instant creationDate = Instant.now();
29+
Instant lastModificationDate = Instant.now().plusSeconds(60);
30+
String lastModifiedBy = "user2";
31+
32+
SecurityAnalysisConfig config = new SecurityAnalysisConfig(
33+
parametersUuid,
34+
contingencies,
35+
List.of(modificationUuid),
36+
owner,
37+
creationDate,
38+
lastModificationDate,
39+
lastModifiedBy
40+
);
41+
42+
assertThat(config.getParametersUuid()).isEqualTo(parametersUuid);
43+
assertThat(config.getContingencies()).isEqualTo(contingencies);
44+
assertThat(config.getModificationUuids()).containsExactly(modificationUuid);
45+
assertThat(config.getOwner()).isEqualTo(owner);
46+
assertThat(config.getCreationDate()).isEqualTo(creationDate);
47+
assertThat(config.getLastModificationDate()).isEqualTo(lastModificationDate);
48+
assertThat(config.getLastModifiedBy()).isEqualTo(lastModifiedBy);
49+
assertThat(config.processType()).isEqualTo(ProcessType.SECURITY_ANALYSIS);
50+
}
51+
}

monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.List;
2424
import java.util.UUID;
2525

26+
import static org.gridsuite.monitor.commons.Constants.HEADER_USER_ID;
27+
2628
/**
2729
* @author Antoine Bouhours <antoine.bouhours at rte-france.com>
2830
*/
@@ -33,8 +35,6 @@ public class MonitorController {
3335

3436
private final MonitorService monitorService;
3537

36-
public static final String HEADER_USER_ID = "userId";
37-
3838
public MonitorController(MonitorService monitorService) {
3939
this.monitorService = monitorService;
4040
}

monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/ProcessConfigController.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@
2121
import org.springframework.web.bind.annotation.PostMapping;
2222
import org.springframework.web.bind.annotation.PutMapping;
2323
import org.springframework.web.bind.annotation.RequestBody;
24+
import org.springframework.web.bind.annotation.RequestHeader;
2425
import org.springframework.web.bind.annotation.RequestMapping;
2526
import org.springframework.web.bind.annotation.RestController;
2627

2728
import java.util.Optional;
2829
import java.util.UUID;
2930

31+
import static org.gridsuite.monitor.commons.Constants.HEADER_USER_ID;
32+
3033
/**
3134
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
3235
*/
@@ -46,8 +49,9 @@ public ProcessConfigController(ProcessConfigService processConfigService) {
4649
@Operation(summary = "Create process config")
4750
@ApiResponses(value = {
4851
@ApiResponse(responseCode = "200", description = "process config was created")})
49-
public ResponseEntity<UUID> createProcessConfig(@RequestBody ProcessConfig processConfig) {
50-
return ResponseEntity.ok().body(processConfigService.createProcessConfig(processConfig));
52+
public ResponseEntity<UUID> createProcessConfig(@RequestBody ProcessConfig processConfig,
53+
@RequestHeader(HEADER_USER_ID) String userId) {
54+
return ResponseEntity.ok().body(processConfigService.createProcessConfig(processConfig, userId));
5155
}
5256

5357
@GetMapping(value = "/{uuid}", produces = MediaType.APPLICATION_JSON_VALUE)
@@ -68,8 +72,9 @@ public ResponseEntity<ProcessConfig> getProcessConfig(
6872
@ApiResponse(responseCode = "404", description = "process config was not found")})
6973
public ResponseEntity<Void> updateProcessConfig(
7074
@Parameter(description = "process config UUID") @PathVariable("uuid") UUID processConfigUuid,
71-
@RequestBody ProcessConfig processConfig) {
72-
return processConfigService.updateProcessConfig(processConfigUuid, processConfig) ?
75+
@RequestBody ProcessConfig processConfig,
76+
@RequestHeader(HEADER_USER_ID) String userId) {
77+
return processConfigService.updateProcessConfig(processConfigUuid, processConfig, userId) ?
7378
ResponseEntity.ok().build() :
7479
ResponseEntity.notFound().build();
7580
}

monitor-server/src/main/java/org/gridsuite/monitor/server/entities/AbstractProcessConfigEntity.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525
import lombok.Getter;
2626
import lombok.NoArgsConstructor;
2727
import lombok.Setter;
28+
import lombok.experimental.SuperBuilder;
2829
import org.gridsuite.monitor.commons.ProcessType;
2930

3031
import java.util.List;
3132
import java.util.UUID;
33+
import java.time.Instant;
3234

3335
import static jakarta.persistence.DiscriminatorType.STRING;
3436

@@ -43,6 +45,7 @@
4345
@AllArgsConstructor
4446
@Getter
4547
@Setter
48+
@SuperBuilder
4649
public abstract class AbstractProcessConfigEntity {
4750
@Id
4851
@GeneratedValue(strategy = GenerationType.AUTO)
@@ -57,6 +60,18 @@ public abstract class AbstractProcessConfigEntity {
5760
@OrderColumn(name = "pos_modifications")
5861
private List<UUID> modificationUuids;
5962

63+
@Column(name = "owner", length = 80, nullable = false)
64+
private String owner;
65+
66+
@Column(name = "creation_date", nullable = false)
67+
private Instant creationDate;
68+
69+
@Column(name = "last_modification_date", nullable = false)
70+
private Instant lastModificationDate;
71+
72+
@Column(name = "last_modified_by", length = 80, nullable = false)
73+
private String lastModifiedBy;
74+
6075
public abstract ProcessType getType();
6176
}
6277

monitor-server/src/main/java/org/gridsuite/monitor/server/entities/SecurityAnalysisConfigEntity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import lombok.Getter;
2222
import lombok.NoArgsConstructor;
2323
import lombok.Setter;
24+
import lombok.experimental.SuperBuilder;
2425
import org.gridsuite.monitor.commons.ProcessType;
2526

2627
import java.util.List;
@@ -37,6 +38,7 @@
3738
@AllArgsConstructor
3839
@Getter
3940
@Setter
41+
@SuperBuilder
4042
public class SecurityAnalysisConfigEntity extends AbstractProcessConfigEntity {
4143
@Column(name = "parameters_uuid")
4244
private UUID parametersUuid;

0 commit comments

Comments
 (0)