Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
Signed-off-by: Samir Romdhani <samir.romdhani@rte-france.com>
  • Loading branch information
samirromdhani committed Feb 28, 2024
1 parent 472f363 commit e8c397f
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef dataA
@Override
public List<SclReportItem> getDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef dataAttributeRef) {
List<SclReportItem> sclReportItems = new ArrayList<>();
log.info(":: start ::");
return tAnyLN.getDOI().stream().filter(doi -> dataAttributeRef.getDoName().getName().equals(doi.getName()))
.findFirst()
.map(doi -> {
Expand All @@ -157,7 +156,6 @@ public List<SclReportItem> getDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef d
.filter(dai -> dai.getName().equals(structNamesList.get(0)))
.findFirst();
if(tdai.isPresent()){
log.info(":: DAI FOUND struct case ::");
checkAndCompleteDataAttribute(tdai.get(), dataAttributeRef.getDaName());
return sclReportItems;
}
Expand Down Expand Up @@ -188,7 +186,6 @@ public List<SclReportItem> getDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef d
.filter(dai -> dai.getName().equals(structNamesList.get(0)))
.findFirst();
if(tdai.isPresent()){
log.info(":: DAI FOUND sample case ::");
checkAndCompleteDataAttribute(tdai.get(), dataAttributeRef.getDaName());
} else {
log.warn("Missing DAI.name=({}) not found in DOI.name=({})", structNamesList.get(0), doi.getName());
Expand All @@ -214,14 +211,12 @@ private void checkAndCompleteDataAttribute(TDAI tdai, DaTypeName daTypeName) {
boolean isGroup = hasSgGroup(tdai);
if (isGroup) {
daTypeName.setValImport((!tdai.isSetValImport() || tdai.isValImport())
// && iedHasConfSG()
//TODO && iedHasConfSG()
);
} else {
daTypeName.setValImport(false);
//TODO
log.warn("Inconsistency in the SCD file - DAI ?? with fc=?? must have a sGroup attribute");
// log.warn("Inconsistency in the SCD file - DAI {} with fc={} must have a sGroup attribute",
// dataAttributeRef.getObjRef(getParentIed().getName(), parentAdapter.getInst()),
// dataAttributeRef.getDaName().getFc());
}
} else if (tdai.isSetValImport()) {
daTypeName.setValImport(tdai.isValImport());
Expand Down Expand Up @@ -265,65 +260,43 @@ private TSDI findSDIByStructName(TSDI tsdi, List<String> structNames) {
.orElse(tsdi);
}

private TSDI findOrCreateSDIByStructName(TSDI tsdi, List<String> structNames) {
structNames.remove(0);
if(structNames.isEmpty() || structNames.size() == 1) return tsdi;
return findOrCreateSDIByStructName(findOrCreateSDIFromSDI(tsdi, structNames.get(0)), structNames);
}

private Optional<TDAI> createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DoTypeName doTypeName, DaTypeName daTypeName) {
LinkedList<String> structNamesList = new LinkedList<>();
structNamesList.addLast(doTypeName.getName());
doTypeName.getStructNames().forEach(structNamesList::addLast);
structNamesList.addLast(daTypeName.getName());
daTypeName.getStructNames().forEach(structNamesList::addLast);

String doiName = structNamesList.remove();
TDOI doi = tAnyLN.getDOI().stream().filter(tdoi -> tdoi.getName().equals(doiName))
LinkedList<String> structInstances = new LinkedList<>(doTypeName.getStructNames());
structInstances.addLast(daTypeName.getName());
daTypeName.getStructNames().forEach(structInstances::addLast);
TDOI doi = tAnyLN.getDOI().stream().filter(doi1 -> doi1.getName().equals(doTypeName.getName()))
.findFirst()
.orElseGet(() -> {
TDOI tdoi = new TDOI();
tdoi.setName(doiName);
tAnyLN.getDOI().add(tdoi);
return tdoi;
TDOI newDOI = new TDOI();
newDOI.setName(doTypeName.getName());
return newDOI;
});
if(structNamesList.size() > 1) {
TSDI lastDsi = findOrCreateSDIByStructName(findOrCreateSDIFromDOI(doi, structNamesList.get(0)), structNamesList);
if (structNamesList.size() == 1) {
return Optional.of(findOrCreateDAIFromSDI(lastDsi, structNamesList.get(0)));
if(structInstances.size() > 1){
TSDI firstSDI = findOrCreateSDIFromDOI(doi, structInstances.getFirst());
TSDI lastSDI = findOrCreateSDIByStructName(firstSDI, structInstances);
if(structInstances.size() == 1){
TDAI newDAI = new TDAI();
newDAI.setName(structInstances.getFirst());
lastSDI.getSDIOrDAI().add(newDAI);
tAnyLN.getDOI().add(doi);
return Optional.of(newDAI);
}
}
else if(structNamesList.size() == 1){
return Optional.of(doi.getSDIOrDAI().stream()
.filter(dai -> dai.getClass().equals(TDAI.class))
.map(TDAI.class::cast)
.filter(tdai -> tdai.getName().equals(structNamesList.get(0)))
.findFirst()
.orElseGet(() -> {
TDAI tdai = new TDAI();
tdai.setName(structNamesList.get(0));
doi.getSDIOrDAI().add(tdai);
return tdai;
}));
} else if(structInstances.size() == 1){
TDAI newDAI = new TDAI();
newDAI.setName(structInstances.getFirst());
doi.getSDIOrDAI().add(newDAI);
tAnyLN.getDOI().add(doi);
return Optional.of(newDAI);
}
return Optional.empty();
}

private TDAI findOrCreateDAIFromSDI(TSDI sdi, String daiName) {
return sdi.getSDIOrDAI().stream()
.filter(unNaming -> unNaming.getClass().equals(TDAI.class))
.map(TDAI.class::cast)
.filter(tdai -> tdai.getName().equals(daiName))
.findFirst()
.orElseGet(() -> {
TDAI tdai = new TDAI();
tdai.setName(daiName);
sdi.getSDIOrDAI().add(tdai);
return tdai;
});
private TSDI findOrCreateSDIByStructName(TSDI tsdi, LinkedList<String> structNames) {
structNames.remove();
if(structNames.isEmpty() || structNames.size() == 1) return tsdi;
return findOrCreateSDIByStructName(findOrCreateSDIFromSDI(tsdi, structNames.getFirst()), structNames);
}


private TSDI findOrCreateSDIFromDOI(TDOI doi, String sdiName) {
return doi.getSDIOrDAI().stream()
.filter(sdi -> sdi.getClass().equals(TSDI.class))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package org.lfenergy.compas.sct.commons;

import org.assertj.core.groups.Tuple;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.lfenergy.compas.scl2007b4.model.*;
import org.lfenergy.compas.sct.commons.dto.DaTypeName;
Expand All @@ -14,11 +15,11 @@
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;
import org.lfenergy.compas.sct.commons.util.ActiveStatus;

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

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.lfenergy.compas.sct.commons.testhelpers.DataTypeUtils.*;

class LnServiceTest {
Expand Down Expand Up @@ -131,17 +132,45 @@ void isDOAndDAInstanceExists_should_return_false_when_DO_and_DA_instances_not_ex
assertThat(exist).isFalse();
}

@Test
void getDOAndDAInstances_should_return_when_ADF() {
//Given
TAnyLN tAnyLN = initDOAndDAInstances(
new LinkedList<>(List.of("Do","sdo1", "d")),
new LinkedList<>(List.of("antRef","bda1", "bda2", "bda3"))
);
DoTypeName doTypeName = new DoTypeName("Do.sdo1.d");
doTypeName.setCdc(TPredefinedCDCEnum.WYE);
DaTypeName daTypeName = new DaTypeName("antRef.bda1.bda2.bda3");
daTypeName.setFc(TFCEnum.ST);
daTypeName.setBType(TPredefinedBasicTypeEnum.ENUM);
daTypeName.setValImport(true);

private TAnyLN initDOAndDAInstances(List<String> doInstances, List<String> daInstances){
TLN0 tln0 = new TLN0();
// TDOI
// tln0.getDOI().add()
// doInstances.g
return tln0;
DataAttributeRef dataAttributeRef = new DataAttributeRef();
dataAttributeRef.setDoName(doTypeName);
dataAttributeRef.setDaName(daTypeName);
//When
LnService lnService = new LnService();
List<SclReportItem> sclReportItems = lnService.getDOAndDAInstances(tAnyLN, dataAttributeRef);
//Then
assertThat(sclReportItems).isEmpty();
assertThat(dataAttributeRef.getDoRef()).isEqualTo("Do.sdo1.d");
assertThat(dataAttributeRef.getDaRef()).isEqualTo("antRef.bda1.bda2.bda3");
assertThat(dataAttributeRef.getDaName().isValImport()).isEqualTo(false);
assertThat(dataAttributeRef.getDaName().isUpdatable()).isEqualTo(false);
assertThat(dataAttributeRef.getDoName())
.usingRecursiveComparison()
.isEqualTo(doTypeName);
assertThat(dataAttributeRef.getDaName())
.usingRecursiveComparison()
.ignoringFields("valImport","daiValues")
.isEqualTo(daTypeName);
}


@Test
void getDOAndDAInstances_should_return_when_ADF() {
@Disabled
void getDOAndDAInstances_should_return_when_data_from_xml_file_to_remove() {
//Given
SCL scd = SclTestMarshaller.getSCLFromFile("/ied-test-schema-conf/ied_unit_test.xml");
TAnyLN tAnyLN = scd.getIED().stream()
Expand All @@ -168,15 +197,13 @@ void getDOAndDAInstances_should_return_when_ADF() {
assertThat(daTypeName.isUpdatable()).isEqualTo(true);
//When
LnService lnService = new LnService();
// assertThatCode(() -> lnService.getDOAndDAInstances(tAnyLN, dataAttributeRef))
// .doesNotThrowAnyException();
List<SclReportItem> sclReportItems = lnService.getDOAndDAInstances(tAnyLN, dataAttributeRef);
//Then
assertThat(sclReportItems).isEmpty();
assertThat(dataAttributeRef.getDoRef()).isEqualTo("Do.sdo1.d");
assertThat(dataAttributeRef.getDaRef()).isEqualTo("antRef.bda1.bda2.bda3");
assertThat(dataAttributeRef.getDaName().isValImport()).isEqualTo(false);
assertThat(dataAttributeRef.getDaName().isUpdatable()).isEqualTo(false);
assertThat(dataAttributeRef.getDaName().isValImport()).isEqualTo(true);
assertThat(dataAttributeRef.getDaName().isUpdatable()).isEqualTo(true);
assertThat(dataAttributeRef.getDoName())
.usingRecursiveComparison()
.isEqualTo(doTypeName);
Expand Down Expand Up @@ -251,4 +278,73 @@ void updateOrCreateDoObjectsAndDataAttributesInstances_should_create_given_DO_an
}







private TSDI createSDIFromDOI(TDOI doi, String sdiName) {
return doi.getSDIOrDAI().stream()
.filter(sdi -> sdi.getClass().equals(TSDI.class))
.map(TSDI.class::cast)
.filter(tsdi -> tsdi.getName().equals(sdiName))
.findFirst()
.orElseGet(() -> {
TSDI tsdi = new TSDI();
tsdi.setName(sdiName);
doi.getSDIOrDAI().add(tsdi);
return tsdi;
});
}

private TSDI createSDIFromSDI(TSDI sdi, String sdiName) {
return sdi.getSDIOrDAI().stream()
.filter(unNaming -> unNaming.getClass().equals(TSDI.class))
.map(TSDI.class::cast)
.filter(tsdi -> tsdi.getName().equals(sdiName))
.findFirst()
.orElseGet(() -> {
TSDI tsdi = new TSDI();
tsdi.setName(sdiName);
sdi.getSDIOrDAI().add(tsdi);
return tsdi;
});
}

private TSDI createSDIByStructName(TSDI tsdi, LinkedList<String> structNames) {
structNames.remove();
if(structNames.isEmpty() || structNames.size() == 1) return tsdi;
return createSDIByStructName(createSDIFromSDI(tsdi, structNames.getFirst()), structNames);
}

private TAnyLN initDOAndDAInstances(LinkedList<String> doInstances, LinkedList<String> daInstances){
assertThat(doInstances.size()).isGreaterThanOrEqualTo(1);
assertThat(daInstances.size()).isGreaterThanOrEqualTo(1);
LinkedList<String> structInstances = new LinkedList<>(doInstances);
daInstances.forEach(structInstances::addLast);
TLN0 tln0 = new TLN0();
TDOI tdoi = new TDOI();
tdoi.setName(doInstances.get(0));
structInstances.remove();
if(structInstances.size() > 1){
TSDI firstSDI = createSDIFromDOI(tdoi, structInstances.get(0));
TSDI lastSDI = createSDIByStructName(firstSDI, structInstances);
if(structInstances.size() == 1){
TDAI dai = new TDAI();
dai.setName(daInstances.get(daInstances.size() - 1));
dai.setValImport(false);
lastSDI.getSDIOrDAI().add(dai);
}
} else
if(structInstances.size() == 1){
TDAI dai = new TDAI();
dai.setName(daInstances.get(daInstances.size() - 1));
dai.setValImport(false);
tdoi.getSDIOrDAI().add(dai);
}
tln0.getDOI().add(tdoi);
return tln0;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<SDI name="antRef"> <!-- this is a DA -->
<SDI name="bda1">
<SDI name="bda2">
<DAI name="bda3" valImport="false"> <!-- [Do.sdo1.d] && [antRef.bda1.bda2.bda3] -->
<DAI name="bda3" valImport="true"> <!-- [Do.sdo1.d] && [antRef.bda1.bda2.bda3] -->
<Val>Completed-diff</Val>
</DAI>
</SDI>
Expand Down

0 comments on commit e8c397f

Please sign in to comment.