Skip to content

Commit 472bff2

Browse files
SarahBellahaanisometropie
authored andcommitted
editoast: add field for supported signaling systems in rs model
tests: rolling stock
1 parent 33b4dc7 commit 472bff2

File tree

27 files changed

+133
-29
lines changed

27 files changed

+133
-29
lines changed

core/osrd-railjson/src/main/java/fr/sncf/osrd/railjson/schema/rollingstock/RJSRollingStock.java

+3
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ public class RJSRollingStock implements Identified {
9494
@Json(name = "raise_pantograph_time")
9595
public Double raisePantographTime = null;
9696

97+
@Json(name = "supported_signaling_systems")
98+
public String[] supportedSignalingSystems = null;
99+
97100
public enum GammaType {
98101
CONST,
99102
MAX

core/src/main/java/fr/sncf/osrd/railjson/parser/RJSRollingStockParser.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ else if (!rjsRollingStock.railjsonVersion.equals(RJSRollingStock.CURRENT_VERSION
123123
rjsRollingStock.basePowerClass,
124124
rjsRollingStock.powerRestrictions,
125125
rjsRollingStock.electricalPowerStartUpTime,
126-
rjsRollingStock.raisePantographTime
126+
rjsRollingStock.raisePantographTime,
127+
rjsRollingStock.supportedSignalingSystems
127128
);
128129
}
129130

core/src/main/java/fr/sncf/osrd/train/RollingStock.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ public final class RollingStock implements PhysicsRollingStock {
101101
public final Double electricalPowerStartUpTime;
102102
public final Double raisePantographTime;
103103

104+
public final String[] supportedSignalingSystems;
105+
104106
@Override
105107
public double getMass() {
106108
return mass;
@@ -331,11 +333,12 @@ public RollingStock(
331333
RJSLoadingGaugeType loadingGaugeType,
332334
Map<String, ModeEffortCurves> modes,
333335
String defaultMode,
334-
String basePowerclass
336+
String basePowerclass,
337+
String[] supportedSignalingSystems
335338
) {
336339
this(id, length, mass, inertiaCoefficient, a, b, c, maxSpeed, startUpTime, startUpAcceleration,
337340
comfortAcceleration, gamma, gammaType, loadingGaugeType, modes, defaultMode, basePowerclass, Map.of(),
338-
0., 0.);
341+
0., 0., supportedSignalingSystems);
339342
}
340343

341344
/**
@@ -361,7 +364,8 @@ public RollingStock(
361364
String basePowerclass,
362365
Map<String, String> powerRestrictions,
363366
Double electricalPowerStartUpTime,
364-
Double raisePantographTime
367+
Double raisePantographTime,
368+
String[] supportedSignalingSystems
365369
) {
366370
this.id = id;
367371
this.A = a;
@@ -384,6 +388,7 @@ public RollingStock(
384388
this.powerRestrictions = powerRestrictions;
385389
this.electricalPowerStartUpTime = electricalPowerStartUpTime;
386390
this.raisePantographTime = raisePantographTime;
391+
this.supportedSignalingSystems = supportedSignalingSystems;
387392

388393
assert !isElectric() || (this.electricalPowerStartUpTime != null && this.raisePantographTime != null) :
389394
"Electrical power start up time and Raise pantograph time must be defined for an electric train";

core/src/test/java/fr/sncf/osrd/train/TestTrains.java

+16-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import com.google.common.collect.Lists;
88
import fr.sncf.osrd.utils.Helpers;
99
import fr.sncf.osrd.envelope_sim.PhysicsRollingStock;
10+
import fr.sncf.osrd.envelope_sim.SimpleRollingStock.CurveShape;
1011
import fr.sncf.osrd.railjson.schema.rollingstock.RJSLoadingGaugeType;
12+
import fr.sncf.osrd.train.RollingStock.Comfort;
1113
import org.junit.jupiter.api.Test;
1214
import java.util.*;
1315

@@ -107,7 +109,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
107109
RJSLoadingGaugeType.G1,
108110
linearModeEffortCurves,
109111
"thermal",
110-
"1"
112+
"1",
113+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
111114
);
112115

113116
VERY_LONG_FAST_TRAIN = new RollingStock(
@@ -124,7 +127,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
124127
RJSLoadingGaugeType.G1,
125128
linearModeEffortCurves,
126129
"thermal",
127-
"1"
130+
"1",
131+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
128132
);
129133

130134
REALISTIC_FAST_TRAIN = new RollingStock(
@@ -144,7 +148,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
144148
"5",
145149
Map.of("Restrict1", "4", "Restrict2", "3"),
146150
0.,
147-
0.
151+
0.,
152+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
148153
);
149154

150155
REALISTIC_FAST_TRAIN_MAX_DEC_TYPE = new RollingStock(
@@ -161,7 +166,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
161166
RJSLoadingGaugeType.G1,
162167
linearModeEffortCurves,
163168
"thermal",
164-
"1"
169+
"1",
170+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
165171
);
166172

167173
FAST_TRAIN_LARGE_GAUGE = new RollingStock(
@@ -178,7 +184,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
178184
RJSLoadingGaugeType.GC,
179185
linearModeEffortCurves,
180186
"thermal",
181-
"1"
187+
"1",
188+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
182189
);
183190

184191
FAST_ELECTRIC_TRAIN = new RollingStock(
@@ -196,7 +203,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
196203
createModeEffortCurves(MAX_SPEED, CurveShape.LINEAR,
197204
Map.of("25000V", new RollingStock.EffortCurveConditions[0])),
198205
"25000V",
199-
"1"
206+
"1",
207+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
200208
);
201209

202210
CONSTANT_POWER_TRAIN = new RollingStock(
@@ -214,7 +222,8 @@ private static Map<String, RollingStock.ModeEffortCurves> createModeEffortCurves
214222
createModeEffortCurves(MAX_SPEED, CurveShape.HYPERBOLIC,
215223
Map.of("thermal", new RollingStock.EffortCurveConditions[0])),
216224
"thermal",
217-
"1"
225+
"1",
226+
new String[]{"BAL", "BAPR", "TVM300", "TVM430"}
218227
);
219228
}
220229

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE rolling_stock
2+
DROP COLUMN supported_signaling_systems;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE rolling_stock
2+
ADD supported_signaling_systems jsonb NOT NULL DEFAULT ('["BAPR", "BAL", "TVM300", "TVM430"]');

editoast/openapi.yaml

+16
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,10 @@ components:
884884
startup_time:
885885
format: double
886886
type: number
887+
supported_signaling_systems:
888+
items:
889+
$ref: '#/components/schemas/SignalingSystem'
890+
type: array
887891
required:
888892
- id
889893
- name
@@ -904,6 +908,7 @@ components:
904908
- metadata
905909
- power_restrictions
906910
- energy_sources
911+
- supported_signaling_systems
907912
type: object
908913
LightRollingStockWithLiveries:
909914
allOf:
@@ -1961,6 +1966,10 @@ components:
19611966
startup_time:
19621967
format: double
19631968
type: number
1969+
supported_signaling_systems:
1970+
items:
1971+
$ref: '#/components/schemas/SignalingSystem'
1972+
type: array
19641973
required:
19651974
- name
19661975
- effort_curves
@@ -2712,6 +2721,13 @@ components:
27122721
- aspect_label
27132722
- track
27142723
type: object
2724+
SignalingSystem:
2725+
enum:
2726+
- BAL
2727+
- BAPR
2728+
- TVM300
2729+
- TVM430
2730+
type: string
27152731
SimulationPowerRestrictionRange:
27162732
properties:
27172733
code:

editoast/src/models/rolling_stock/light_rolling_stock.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ use crate::models::rolling_stock::rolling_stock_livery::RollingStockLiveryMetada
33
use crate::schema::rolling_stock::light_rolling_stock::{
44
LightEffortCurves, LightRollingStock, LightRollingStockWithLiveries,
55
};
6-
use crate::schema::rolling_stock::{EnergySource, Gamma, RollingResistance, RollingStockMetadata};
6+
use crate::schema::rolling_stock::{
7+
EnergySource, Gamma, RollingResistance, RollingStockMetadata, SignalingSystem,
8+
};
79
use crate::tables::rolling_stock;
810
use crate::views::pagination::{Paginate, PaginatedResponse};
911
use crate::DbPool;
@@ -51,6 +53,8 @@ pub struct LightRollingStockModel {
5153
electrical_power_startup_time: Option<f64>,
5254
raise_pantograph_time: Option<f64>,
5355
pub version: i64,
56+
#[schema(value_type = Vec<SignalingSystem>)]
57+
supported_signaling_systems: DieselJson<Vec<SignalingSystem>>,
5458
}
5559

5660
impl LightRollingStockModel {
@@ -118,6 +122,7 @@ impl From<LightRollingStockModel> for LightRollingStock {
118122
power_restrictions: rolling_stock_model.power_restrictions,
119123
energy_sources: rolling_stock_model.energy_sources,
120124
version: rolling_stock_model.version,
125+
supported_signaling_systems: rolling_stock_model.supported_signaling_systems,
121126
}
122127
}
123128
}

editoast/src/models/rolling_stock/mod.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::models::rolling_stock::rolling_stock_livery::RollingStockLiveryMetada
1313
use crate::models::{Create, Identifiable, TextArray, Update};
1414
use crate::schema::rolling_stock::{
1515
EffortCurves, EnergySource, Gamma, RollingResistance, RollingStock, RollingStockCommon,
16-
RollingStockMetadata, RollingStockWithLiveries,
16+
RollingStockMetadata, RollingStockWithLiveries, SignalingSystem,
1717
};
1818
use crate::schema::track_section::LoadingGaugeType;
1919
use crate::tables::rolling_stock;
@@ -130,6 +130,9 @@ pub struct RollingStockModel {
130130
#[diesel(deserialize_as = i64)]
131131
#[schema(value_type = i64)]
132132
pub version: Option<i64>,
133+
#[diesel(deserialize_as = DieselJson<Vec<SignalingSystem>>)]
134+
#[schema(value_type = Vec<SignalingSystem>)]
135+
pub supported_signaling_systems: Option<DieselJson<Vec<SignalingSystem>>>,
133136
}
134137

135138
fn validate_rolling_stock(
@@ -295,6 +298,7 @@ impl From<RollingStockModel> for RollingStockCommon {
295298
.electrical_power_startup_time
296299
.unwrap(),
297300
raise_pantograph_time: rolling_stock_model.raise_pantograph_time.unwrap(),
301+
supported_signaling_systems: rolling_stock_model.supported_signaling_systems.unwrap().0,
298302
}
299303
}
300304
}

editoast/src/schema/rolling_stock/light_rolling_stock.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use utoipa::ToSchema;
66

77
use crate::models::rolling_stock::rolling_stock_livery::RollingStockLiveryMetadata;
88

9-
use super::{EnergySource, Gamma, RollingResistance, RollingStockMetadata};
9+
use super::{EnergySource, Gamma, RollingResistance, RollingStockMetadata, SignalingSystem};
1010

1111
crate::schemas! {
1212
LightRollingStock,
@@ -67,6 +67,9 @@ pub struct LightRollingStock {
6767
#[serde(skip)]
6868
#[diesel(sql_type = BigInt)]
6969
pub version: i64,
70+
#[diesel(sql_type = Jsonb)]
71+
#[schema(value_type = Vec<SignalingSystem>)]
72+
pub supported_signaling_systems: DieselJson<Vec<SignalingSystem>>,
7073
}
7174

7275
#[derive(Debug, QueryableByName, Serialize, Deserialize, ToSchema)]

editoast/src/schema/rolling_stock/mod.rs

+18-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ use std::collections::HashMap;
77
use strum_macros::{Display, EnumString};
88
use utoipa::ToSchema;
99

10-
use crate::models::rolling_stock::rolling_stock_livery::RollingStockLiveryMetadata;
11-
use rolling_stock_livery::RollingStockLivery;
12-
10+
use crate::{
11+
models::rolling_stock::rolling_stock_livery::RollingStockLiveryMetadata,
12+
schema::rolling_stock::rolling_stock_livery::RollingStockLivery,
13+
};
1314
crate::schemas! {
1415
RollingStockComfortType,
1516
RollingStockCommon,
@@ -28,6 +29,7 @@ crate::schemas! {
2829
EnergyStorage,
2930
RefillLaw,
3031
RollingStockLivery,
32+
SignalingSystem,
3133
light_rolling_stock::schemas(),
3234
}
3335

@@ -62,6 +64,8 @@ pub struct RollingStockCommon {
6264
/// The time it takes to raise this train's pantograph in seconds. Is null if the train is not electric.
6365
#[schema(example = 15.0)]
6466
pub raise_pantograph_time: Option<f64>,
67+
#[serde(default)]
68+
pub supported_signaling_systems: Vec<SignalingSystem>,
6569
}
6670

6771
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, ToSchema)]
@@ -261,6 +265,17 @@ pub enum EnergySource {
261265
},
262266
}
263267

268+
#[derive(Clone, Debug, PartialEq, EnumString, Deserialize, Serialize, ToSchema)]
269+
#[strum(serialize_all = "UPPERCASE")]
270+
#[serde(rename_all = "UPPERCASE")]
271+
#[serde(deny_unknown_fields)]
272+
pub enum SignalingSystem {
273+
Bal,
274+
Bapr,
275+
Tvm300,
276+
Tvm430,
277+
}
278+
264279
#[cfg(test)]
265280
mod tests {
266281
use crate::schema::rolling_stock::EffortCurve;

editoast/src/tables.rs

+1
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ diesel::table! {
423423
electrical_power_startup_time -> Nullable<Float8>,
424424
raise_pantograph_time -> Nullable<Float8>,
425425
version -> Int8,
426+
supported_signaling_systems -> Jsonb,
426427
}
427428
}
428429

editoast/src/tests/example_rolling_stock_1.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -983,5 +983,6 @@
983983
"energy_sources": [],
984984
"power_restrictions": {"C2":"2", "C5":"5"},
985985
"electrical_power_startup_time": 5.0,
986-
"raise_pantograph_time": 15.0
986+
"raise_pantograph_time": 15.0,
987+
"supported_signaling_systems": ["BAL", "BAPR", "TVM300", "TVM430"]
987988
}

editoast/src/tests/example_rolling_stock_2_energy_sources.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -210,5 +210,6 @@
210210
],
211211
"power_restrictions": {},
212212
"electrical_power_startup_time": 6.0,
213-
"raise_pantograph_time": 16.0
213+
"raise_pantograph_time": 16.0,
214+
"supported_signaling_systems": ["BAL", "BAPR", "TVM300", "TVM430"]
214215
}

editoast/src/tests/example_rolling_stock_3.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,6 @@
6868
"energy_sources": [],
6969
"power_restrictions": {},
7070
"electrical_power_startup_time": 4.0,
71-
"raise_pantograph_time": 14.0
71+
"raise_pantograph_time": 14.0,
72+
"supported_signaling_systems": ["BAL", "BAPR", "TVM300", "TVM430"]
7273
}

editoast/src/tests/small_infra/stdcm/test_1/stdcm_core_payload.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@
121121
"power_restrictions": {},
122122
"energy_sources": [],
123123
"electrical_power_startup_time": null,
124-
"raise_pantograph_time": null
124+
"raise_pantograph_time": null,
125+
"supported_signaling_systems": ["BAL", "BAPR", "TVM300", "TVM430"]
125126
},
126127
"comfort": "STANDARD",
127128
"route_occupancies": [],

editoast/src/views/rolling_stocks/mod.rs

+3
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ impl From<RollingStockForm> for RollingStockModel {
145145
energy_sources: Some(DieselJson(rolling_stock.common.energy_sources)),
146146
electrical_power_startup_time: Some(rolling_stock.common.electrical_power_startup_time),
147147
raise_pantograph_time: Some(rolling_stock.common.raise_pantograph_time),
148+
supported_signaling_systems: Some(DieselJson(
149+
rolling_stock.common.supported_signaling_systems,
150+
)),
148151
..Default::default()
149152
}
150153
}

front/src/common/api/osrdEditoastApi.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,7 @@ export type RollingResistance = {
15911591
C: number;
15921592
type: string;
15931593
};
1594+
export type SignalingSystem = 'BAL' | 'BAPR' | 'TVM300' | 'TVM430';
15941595
export type LightRollingStock = {
15951596
base_power_class?: string | null;
15961597
comfort_acceleration: number;
@@ -1614,6 +1615,7 @@ export type LightRollingStock = {
16141615
rolling_resistance: RollingResistance;
16151616
startup_acceleration: number;
16161617
startup_time: number;
1618+
supported_signaling_systems: SignalingSystem[];
16171619
};
16181620
export type RollingStockLiveryMetadata = {
16191621
compound_image_id?: number | null;
@@ -1902,6 +1904,7 @@ export type RollingStockCommon = {
19021904
rolling_resistance: RollingResistance;
19031905
startup_acceleration: number;
19041906
startup_time: number;
1907+
supported_signaling_systems?: SignalingSystem[];
19051908
};
19061909
export type RollingStock = RollingStockCommon & {
19071910
id: number;

0 commit comments

Comments
 (0)