Skip to content

Commit 6a5da6b

Browse files
authored
Merge pull request #252 from com-pas/232-rsr-630-network_configuration_of_control_blocks_refacto
feat(#232): RSR-630 configure network for GSE and SMV ControlBlocks -…
2 parents 99e17f5 + a13e030 commit 6a5da6b

File tree

3 files changed

+218
-279
lines changed

3 files changed

+218
-279
lines changed

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/ControlBlockNetworkSettings.java

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
* - the Communication/SubNetwork/ConnectedAP/GSE element, which is the network configuration of a GSEControl block
1414
* - the Communication/SubNetwork/ConnectedAP/SMV element, which is the network configuration of a SampledValueControl block
1515
* It is a FunctionalInterface, so it can be implemented with a lambda expression.
16+
*
17+
* @see org.lfenergy.compas.sct.commons.util.ControlBlockNetworkSettingsCsvHelper
1618
*/
1719
@FunctionalInterface
1820
public interface ControlBlockNetworkSettings {
@@ -27,10 +29,34 @@ public interface ControlBlockNetworkSettings {
2729
*/
2830
Settings getNetworkSettings(ControlBlockAdapter controlBlockAdapter);
2931

30-
record Settings(
31-
Integer vlanId,
32-
Byte vlanPriority,
33-
TDurationInMilliSec minTime,
34-
TDurationInMilliSec maxTime) {
32+
/**
33+
* Network settings for ControlBlock communication
34+
*
35+
* @param vlanId id of the vlan
36+
* @param vlanPriority priority for the vlan
37+
* @param minTime minTime for GSE communication element
38+
* @param maxTime maxTime for GSE communication element
39+
*/
40+
record Settings(Integer vlanId, Byte vlanPriority, TDurationInMilliSec minTime, TDurationInMilliSec maxTime) {
41+
}
42+
43+
/**
44+
* NetworkRanges for GSEControl and SampledValueControl
45+
*
46+
* @param gse NetworkRanges for GSEControl
47+
* @param sampledValue NetworkRanges for SampledValueControl
48+
*/
49+
record RangesPerCbType(NetworkRanges gse, NetworkRanges sampledValue) {
50+
}
51+
52+
/**
53+
* Range of APPID and range of MAC-Address
54+
*
55+
* @param appIdStart range start for APPID (inclusive)
56+
* @param appIdEnd range end for APPID (inclusive)
57+
* @param macAddressStart range start for MAC-Addresses (inclusive). Ex: "01-0C-CD-01-00-00"
58+
* @param macAddressEnd range end for MAC-Addresses (inclusive). Ex: "01-0C-CD-01-01-FF"
59+
*/
60+
record NetworkRanges(long appIdStart, long appIdEnd, String macAddressStart, String macAddressEnd) {
3561
}
3662
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ExtRefService.java

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@
1919
import org.lfenergy.compas.sct.commons.scl.ied.LDeviceAdapter;
2020
import org.lfenergy.compas.sct.commons.scl.ied.LN0Adapter;
2121
import org.lfenergy.compas.sct.commons.util.ControlBlockEnum;
22-
import org.lfenergy.compas.sct.commons.util.ControlBlockNetworkSettingsCsvHelper;
2322
import org.lfenergy.compas.sct.commons.util.PrivateEnum;
2423
import org.lfenergy.compas.sct.commons.util.Utils;
2524

26-
import java.io.Reader;
2725
import java.util.*;
2826
import java.util.function.Function;
2927
import java.util.stream.Collectors;
3028
import java.util.stream.Stream;
3129

30+
import static org.lfenergy.compas.sct.commons.dto.ControlBlockNetworkSettings.NetworkRanges;
31+
import static org.lfenergy.compas.sct.commons.dto.ControlBlockNetworkSettings.RangesPerCbType;
32+
3233
@UtilityClass
3334
public class ExtRefService {
3435

@@ -159,27 +160,6 @@ private static SclReport createDataSetAndControlBlocks(SclRootAdapter sclRootAda
159160
return new SclReport(sclRootAdapter, sclReportItems);
160161
}
161162

162-
/**
163-
* Shortcut for {@link ExtRefService#configureNetworkForAllControlBlocks(SCL, ControlBlockNetworkSettings, long, long, String, String, ControlBlockEnum)}
164-
* using a CSV file to provide ControlBlockNetworkSettings.
165-
*
166-
* @param scd input SCD object. The object will be modified with the new DataGSESet and SMV elements
167-
* @param csvSource a Reader for the CSV file, as specified in {@link ControlBlockNetworkSettingsCsvHelper}.
168-
* @param appIdMin range start for APPID (inclusive)
169-
* @param appIdMax range end for APPID (inclusive)
170-
* @param macAddressMin range start for MAC-Addresses (inclusive). Ex: "01-0C-CD-01-00-00"
171-
* @param macAddressMax range end for MAC-Addresses (inclusive). Ex: "01-0C-CD-01-01-FF"
172-
* @return a report with all the errors encountered
173-
* @see ControlBlockNetworkSettingsCsvHelper
174-
* @see ControlBlockNetworkSettings
175-
* @see ExtRefService#configureNetworkForAllControlBlocks(SCL, ControlBlockNetworkSettings, long, long, String, String, ControlBlockEnum)
176-
*/
177-
public static SclReport configureNetworkForAllControlBlocks(SCL scd, Reader csvSource,
178-
long appIdMin, long appIdMax, String macAddressMin, String macAddressMax, ControlBlockEnum controlBlockEnum) {
179-
ControlBlockNetworkSettings controlBlockNetworkSettings = new ControlBlockNetworkSettingsCsvHelper(csvSource);
180-
return configureNetworkForAllControlBlocks(scd, controlBlockNetworkSettings, appIdMin, appIdMax, macAddressMin, macAddressMax, controlBlockEnum);
181-
}
182-
183163
/**
184164
* Configure the network for all the ControlBlocks.
185165
* Create (or update if already existing) these elements
@@ -188,31 +168,37 @@ public static SclReport configureNetworkForAllControlBlocks(SCL scd, Reader csvS
188168
*
189169
* @param scd input SCD object. The object will be modified with the new DataGSESet and SMV elements
190170
* @param controlBlockNetworkSettings a method tha gives the network configuration information for a given ControlBlock
191-
* @param appIdMin range start for APPID (inclusive)
192-
* @param appIdMax range end for APPID (inclusive)
193-
* @param macAddressMin range start for MAC-Addresses (inclusive). Ex: "01-0C-CD-01-00-00"
194-
* @param macAddressMax range end for MAC-Addresses (inclusive). Ex: "01-0C-CD-01-01-FF"
171+
* @param rangesPerCbType provide NetworkRanges for GSEControl and SampledValueControl. NetworkRanges contains :
172+
* start-end app APPID range (long value), start-end MAC-Addresses (Mac-Addresses values: Ex: "01-0C-CD-01-01-FF")
195173
* @return a report with all the errors encountered
196174
* @see Utils#macAddressToLong(String) for the expected MAC address format
197175
* @see ControlBlockNetworkSettings
176+
* @see ControlBlockNetworkSettings.RangesPerCbType
177+
* @see ControlBlockNetworkSettings.NetworkRanges
198178
*/
199179
public static SclReport configureNetworkForAllControlBlocks(SCL scd, ControlBlockNetworkSettings controlBlockNetworkSettings,
200-
long appIdMin, long appIdMax, String macAddressMin, String macAddressMax, ControlBlockEnum controlBlockEnum) {
201-
PrimitiveIterator.OfLong appIdIterator = Utils.sequence(appIdMin, appIdMax);
202-
Iterator<String> macAddressIterator = Utils.macAddressSequence(macAddressMin, macAddressMax);
180+
RangesPerCbType rangesPerCbType) {
181+
List<SclReportItem> sclReportItems = new ArrayList<>();
182+
sclReportItems.addAll(configureNetworkForControlBlocks(scd, controlBlockNetworkSettings, rangesPerCbType.gse(), ControlBlockEnum.GSE));
183+
sclReportItems.addAll(configureNetworkForControlBlocks(scd, controlBlockNetworkSettings, rangesPerCbType.sampledValue(), ControlBlockEnum.SAMPLED_VALUE));
184+
return new SclReport(new SclRootAdapter(scd), sclReportItems);
185+
}
186+
187+
private static List<SclReportItem> configureNetworkForControlBlocks(SCL scd, ControlBlockNetworkSettings controlBlockNetworkSettings,
188+
NetworkRanges networkRanges, ControlBlockEnum controlBlockEnum) {
189+
PrimitiveIterator.OfLong appIdIterator = Utils.sequence(networkRanges.appIdStart(), networkRanges.appIdEnd());
190+
Iterator<String> macAddressIterator = Utils.macAddressSequence(networkRanges.macAddressStart(), networkRanges.macAddressEnd());
203191

204192
SclRootAdapter sclRootAdapter = new SclRootAdapter(scd);
205-
List<SclReportItem> sclReportItems =
206-
sclRootAdapter.streamIEDAdapters()
207-
.flatMap(iedAdapter ->
208-
iedAdapter.streamLDeviceAdapters()
209-
.filter(LDeviceAdapter::hasLN0)
210-
.map(LDeviceAdapter::getLN0Adapter)
211-
.flatMap(ln0Adapter -> ln0Adapter.streamControlBlocks(controlBlockEnum))
212-
.map(controlBlockAdapter -> configureControlBlockNetwork(controlBlockNetworkSettings, appIdIterator, macAddressIterator, controlBlockAdapter)))
213-
.flatMap(Optional::stream)
214-
.toList();
215-
return new SclReport(sclRootAdapter, sclReportItems);
193+
return sclRootAdapter.streamIEDAdapters()
194+
.flatMap(iedAdapter ->
195+
iedAdapter.streamLDeviceAdapters()
196+
.filter(LDeviceAdapter::hasLN0)
197+
.map(LDeviceAdapter::getLN0Adapter)
198+
.flatMap(ln0Adapter -> ln0Adapter.streamControlBlocks(controlBlockEnum))
199+
.map(controlBlockAdapter -> configureControlBlockNetwork(controlBlockNetworkSettings, appIdIterator, macAddressIterator, controlBlockAdapter)))
200+
.flatMap(Optional::stream)
201+
.toList();
216202
}
217203

218204
private static Optional<SclReportItem> configureControlBlockNetwork(ControlBlockNetworkSettings controlBlockNetworkSettings, PrimitiveIterator.OfLong appIdIterator, Iterator<String> macAddressIterator, ControlBlockAdapter controlBlockAdapter) {

0 commit comments

Comments
 (0)