Skip to content

Commit

Permalink
feat(#386): Add Compas IED type PrivateEnum
Browse files Browse the repository at this point in the history
Signed-off-by: gleizesDor <115622893+gleizesDor@users.noreply.github.com>
  • Loading branch information
gleizesDor committed Apr 29, 2024
1 parent 76189be commit 2a8c6f2
Show file tree
Hide file tree
Showing 7 changed files with 304 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-FileCopyrightText: 2024 RTE FRANCE
//
// SPDX-License-Identifier: Apache-2.0

package org.lfenergy.compas.sct.commons;

import org.lfenergy.compas.scl2007b4.model.*;

import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class DaiService {

public Stream<TDAI> getDais(TDOI tdoi) {
return tdoi.getSDIOrDAI()
.stream()
.filter(dai -> dai.getClass().equals(TDAI.class))
.map(TDAI.class::cast);
}

public Stream<TDAI> getFilteredDais(TDOI tdoi, Predicate<TDAI> tdaiPredicate) {
return getDais(tdoi).filter(tdaiPredicate);
}

public Optional<TDAI> findDai(TDOI tdoi, Predicate<TDAI> tdaiPredicate) {
return getFilteredDais(tdoi, tdaiPredicate).findFirst();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// SPDX-FileCopyrightText: 2024 RTE FRANCE
//
// SPDX-License-Identifier: Apache-2.0

package org.lfenergy.compas.sct.commons;

import org.lfenergy.compas.scl2007b4.model.TAnyLN;
import org.lfenergy.compas.scl2007b4.model.TDOI;

import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class DoiService {

public Stream<TDOI> getDois(TAnyLN tAnyLN) {
return tAnyLN.getDOI().stream();
}

public Stream<TDOI> getFilteredDois(TAnyLN tAnyLN, Predicate<TDOI> tdoiPredicate) {
return getDois(tAnyLN).filter(tdoiPredicate);
}

public Optional<TDOI> findDoi(TAnyLN tAnyLN, Predicate<TDOI> tdoiPredicate) {
return getFilteredDois(tAnyLN, tdoiPredicate).findFirst();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
import org.lfenergy.compas.sct.commons.util.ActiveStatus;

import java.util.Collection;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.*;
import java.util.stream.Stream;

Expand All @@ -27,6 +30,26 @@ public Stream<TAnyLN> getAnylns(TLDevice tlDevice) {
return Stream.concat(Stream.of(tlDevice.getLN0()), tlDevice.getLN().stream());
}

public Stream<TAnyLN> getFilteredAnyLns(TLDevice tlDevice, Predicate<TAnyLN> lnPredicate) {
return getAnylns(tlDevice).filter(lnPredicate);
}

public Optional<TAnyLN> findAnyLn(TLDevice tlDevice, Predicate<TAnyLN> lnPredicate) {
return getFilteredAnyLns(tlDevice, lnPredicate).findFirst();
}

public Stream<TLN> getLns(TLDevice tlDevice) {
return tlDevice.getLN().stream();
}

public Stream<TLN> getFilteredLns(TLDevice tlDevice, Predicate<TLN> lnPredicate) {
return getLns(tlDevice).filter(lnPredicate);
}

public Optional<TLN> findLn(TLDevice tlDevice, Predicate<TLN> lnPredicate) {
return getFilteredLns(tlDevice, lnPredicate).findFirst();
}

/**
* The Lnode status depends on the LN0 status.
* If Ln stVAl = null => we take the LN0 status
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public enum PrivateEnum {
COMPAS_LDEVICE("COMPAS-LDevice", TCompasLDevice.class),
COMPAS_SCL_FILE_TYPE("COMPAS-SclFileType", TCompasSclFileType.class),
COMPAS_SYSTEM_VERSION("COMPAS-SystemVersion", TCompasSystemVersion.class),
COMPAS_TOPO("COMPAS-Topo", TCompasTopo.class);
COMPAS_TOPO("COMPAS-Topo", TCompasTopo.class),
COMPAS_IED_TYPE("COMPAS-IEDType", TCompasIEDType.class);

private static final Map<Class<?>, PrivateEnum> classToEnum = Arrays.stream(PrivateEnum.values()).collect(Collectors.toMap(
compasPrivateEnum -> compasPrivateEnum.compasClass,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// SPDX-FileCopyrightText: 2024 RTE FRANCE
//
// SPDX-License-Identifier: Apache-2.0

package org.lfenergy.compas.sct.commons;

import org.junit.jupiter.api.Test;
import org.lfenergy.compas.scl2007b4.model.SCL;
import org.lfenergy.compas.scl2007b4.model.TDAI;
import org.lfenergy.compas.scl2007b4.model.TDOI;
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;

import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;

class DaiServiceTest {

private final DaiService daiService = new DaiService();

@Test
void getDais() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TDOI tdoi = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0().getDOI().get(3);

//When
List<TDAI> tdais = daiService.getDais(tdoi).toList();

//Then
assertThat(tdais)
.hasSize(5)
.extracting(TDAI::getName)
.containsExactly("paramRev", "valRev", "d", "configRev", "swRev");
}

@Test
void getFilteredDais() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TDOI tdoi = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0().getDOI().get(3);

//When
List<TDAI> tdais = daiService.getFilteredDais(tdoi, tdai -> tdai.getName().equals("configRev")).toList();

//Then
assertThat(tdais)
.hasSize(1)
.extracting(TDAI::getName)
.containsExactly("configRev");
}

@Test
void findDai() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TDOI tdoi = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0().getDOI().get(3);

//When
Optional<TDAI> dai = daiService.findDai(tdoi, tdai -> tdai.getName().equals("configRev"));

//Then
assertThat(dai.orElseThrow())
.extracting(TDAI::getName, tdai -> tdai.getVal().size())
.containsExactly("configRev", 1);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// SPDX-FileCopyrightText: 2024 RTE FRANCE
//
// SPDX-License-Identifier: Apache-2.0

package org.lfenergy.compas.sct.commons;

import org.junit.jupiter.api.Test;
import org.lfenergy.compas.scl2007b4.model.LN0;
import org.lfenergy.compas.scl2007b4.model.SCL;
import org.lfenergy.compas.scl2007b4.model.TDOI;
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;

import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;

class DoiServiceTest {

private final DoiService doiService = new DoiService();

@Test
void getDois() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
LN0 ln0 = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0();

//When
List<TDOI> tdois = doiService.getDois(ln0).toList();

//Then
assertThat(tdois)
.hasSize(4)
.extracting(TDOI::getName)
.containsExactly("Beh", "Health", "Mod", "NamPlt");
}

@Test
void getFilteredDois() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
LN0 ln0 = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0();

//When
List<TDOI> tdois = doiService.getFilteredDois(ln0, tdoi -> tdoi.getName().equals("Beh")).toList();

//Then
assertThat(tdois)
.hasSize(1)
.extracting(TDOI::getName)
.containsExactly("Beh");
}

@Test
void findDoi() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
LN0 ln0 = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0();

//When
Optional<TDOI> doi = doiService.findDoi(ln0, tdoi -> tdoi.getName().equals("Beh"));

//Then
assertThat(doi.orElseThrow())
.extracting(TDOI::getName, tdoi -> tdoi.getSDIOrDAI().size())
.containsExactly("Beh", 1);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,108 @@

class LnServiceTest {

private final LnService lnService = new LnService();

@Test
void getAnylns_should_return_lns() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
LnService lnService = new LnService();
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();

//When
List<TAnyLN> tAnyLNS = lnService.getAnylns(tlDevice).toList();
List<TAnyLN> tAnyLNS = lnService.getAnylns(ldsuied).toList();

//Then
assertThat(tAnyLNS)
.hasSize(2)
.extracting(TAnyLN::getLnType)
.containsExactly("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", "RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0");
.extracting(TAnyLN::getLnType, TAnyLN::getClass)
.containsExactly(Tuple.tuple("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", LN0.class),
Tuple.tuple("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", TLN.class));
}

@Test
void findAnyLn_should_return_ln() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();

//When
Optional<TAnyLN> anyLn = lnService.findAnyLn(ldsuied, tAnyLN -> tAnyLN.getLnType().equals("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0"));

//Then
assertThat(anyLn.orElseThrow())
.extracting(TAnyLN::getLnType, TAnyLN::getClass)
.containsExactly("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", LN0.class);
}

@Test
void getLns_should_return_lns() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();

//When
List<TLN> tlns = lnService.getLns(ldsuied).toList();

//Then
assertThat(tlns)
.hasSize(1)
.extracting(TLN::getLnType, TLN::getInst, TLN::getLnClass, TLN::getClass)
.containsExactly(Tuple.tuple("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", "1", List.of("LPAI"), TLN.class));
}

@Test
void getFilteredLns_should_return_lns() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();

//When
List<TLN> tlns = lnService.getFilteredLns(ldsuied, tln -> tln.getLnType().equals("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0")).toList();

//Then
assertThat(tlns)
.hasSize(1)
.extracting(TLN::getLnType, TLN::getInst, TLN::getLnClass, TLN::getClass)
.containsExactly(Tuple.tuple("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", "1", List.of("LPAI"), TLN.class));
}

@Test
void findLn_should_return_lns() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();

//When
Optional<TLN> ln = lnService.findLn(ldsuied, tln -> tln.getLnType().equals("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0"));

//Then
assertThat(ln.orElseThrow())
.extracting(TLN::getLnType, TLN::getInst, TLN::getLnClass, TLN::getClass)
.containsExactly("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", "1", List.of("LPAI"), TLN.class);
}

@Test
void getFilteredAnyLns_should_return_lns() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();

//When
List<TAnyLN> tAnyLNS = lnService.getFilteredAnyLns(ldsuied, tAnyLN -> tAnyLN.getLnType().equals("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0")).toList();

//Then
assertThat(tAnyLNS)
.hasSize(1)
.extracting(TAnyLN::getLnType, TAnyLN::getClass)
.containsExactly(Tuple.tuple("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", LN0.class));
}

@Test
void getDaiModStval_should_return_status() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
LnService lnService = new LnService();

//When
Optional<ActiveStatus> daiModStval = lnService.getDaiModStval(tlDevice.getLN0());
Expand All @@ -59,7 +138,6 @@ void getLnStatus_should_return_status() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
LnService lnService = new LnService();

//When
ActiveStatus lnStatus = lnService.getLnStatus(tlDevice.getLN().getFirst(), tlDevice.getLN0());
Expand All @@ -73,7 +151,6 @@ void getActiveLns_should_return_lns() {
//Given
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
LnService lnService = new LnService();

//When
List<TAnyLN> tAnyLNS = lnService.getActiveLns(tlDevice).toList();
Expand Down

0 comments on commit 2a8c6f2

Please sign in to comment.