Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,10 @@ private String getPowerFactorySubstationId(Set<Integer> ids) {

Set<DataObject> elmTerms = elmTermsAssociatedTo(ids);
Set<DataObject> elmSubstats = elmSubstatsAssociatedTo(elmTerms);
Set<DataObject> elmTrfstats = elmTrfstatsAssociatedTo(elmTerms);

Set<DataObject> elmSites = elmSitesAssociatedTo(elmSubstats);
elmSites.addAll(elmSitesAssociatedTo(elmTrfstats));

if (elmSites.size() != 1) {
return null;
Expand All @@ -107,22 +110,38 @@ private String getPowerFactorySubstationId(Set<Integer> ids) {
return elmSubstats.equals(dataObjects) ? elmSite.getLocName() : null;
}

// Find an ElmSubstat with same ElmTerms (Nodes) as defined by the ids argument
// Find an ElmSubstat or an ElmTrfstat with same ElmTerms (Nodes) as defined by the ids argument
private String getPowerFactoryVoltageLevelId(Set<Integer> ids) {

Set<DataObject> elmTerms = elmTermsAssociatedTo(ids);
Set<DataObject> elmSubstats = elmSubstatsAssociatedTo(elmTerms);

if (elmSubstats.size() != 1) {
return null;
if (elmSubstats.size() == 1) {
DataObject elmSubstat = elmSubstats.iterator().next();

Set<DataObject> dataObjects = elmSubstat.getChildren().stream()
.filter(dataObject -> dataObject.getDataClassName().equals(DataAttributeNames.ELMTERM))
.collect(Collectors.toSet());

if (elmTerms.equals(dataObjects)) {
return elmSubstat.getLocName();
}
}
DataObject elmSubstat = elmSubstats.iterator().next();

Set<DataObject> dataObjects = elmSubstat.getChildren().stream()
.filter(dataObject -> dataObject.getDataClassName().equals(DataAttributeNames.ELMTERM))
.collect(Collectors.toSet());
Set<DataObject> elmTrfstats = elmTrfstatsAssociatedTo(elmTerms);
if (elmTrfstats.size() == 1) {
DataObject elmTrfstat = elmTrfstats.iterator().next();

Set<DataObject> dataObjects = elmTrfstat.getChildren().stream()
.filter(dataObject -> dataObject.getDataClassName().equals(DataAttributeNames.ELMTERM))
.collect(Collectors.toSet());

return elmTerms.equals(dataObjects) ? elmSubstat.getLocName() : null;
if (elmTerms.equals(dataObjects)) {
return elmTrfstat.getLocName();
}
}

return null;
}

private Set<DataObject> elmTermsAssociatedTo(Set<Integer> ids) {
Expand All @@ -132,12 +151,19 @@ private Set<DataObject> elmTermsAssociatedTo(Set<Integer> ids) {
.collect(Collectors.toSet());
}

private Set<DataObject> elmTrfstatsAssociatedTo(Set<DataObject> elmTerms) {
return elmTerms.stream().map(DataObject::getParent)
.filter(dataObject -> dataObject.getDataClassName().equals(DataAttributeNames.ELMTRFSTAT))
.collect(Collectors.toSet());
}

private Set<DataObject> elmSubstatsAssociatedTo(Set<DataObject> elmTerms) {
return elmTerms.stream().map(DataObject::getParent)
.filter(dataObject -> dataObject.getDataClassName().equals(DataAttributeNames.ELMSUBSTAT))
.collect(Collectors.toSet());
}

// valid for elmSubstats and elmTrfstats
private Set<DataObject> elmSitesAssociatedTo(Set<DataObject> elmSubstats) {
return elmSubstats.stream().map(DataObject::getParent)
.filter(dataObject -> dataObject.getDataClassName().equals(DataAttributeNames.ELMSITE))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ private DataAttributeNames() {

static final String TYP_ID = "typ_id";
static final String ELMTERM = "ElmTerm";
static final String ELMTRFSTAT = "ElmTrfstat";
static final String ELMSUBSTAT = "ElmSubstat";
static final String ELMSITE = "ElmSite";
static final String OBJ_ID = "obj_id";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,10 @@ $$TypTr2;ID(a:40);loc_name(a:40);for_name(a:50);fold_id(p);nt2ph(i);strn(r);frno
$$ElmSubstat;ID(a:40);loc_name(a:40);for_name(a:50);fold_id(p);sShort(a:6);sType(a:80);GPSlat(r);GPSlon(r)
31;VoltageLevel1-400;;34;;;49,95646302;11,45051847
32;VoltageLevel2-400;;35;;;49,95646302;11,45051847
33;VoltageLevel2-20;;35;;;49,95646302;11,45051847


$$ElmTrfstat;ID(a:40);loc_name(a:40);for_name(a:50);fold_id(p)
33;VoltageLevel2-20;;35

$$ElmSite;ID(a:40);loc_name(a:40);for_name(a:50);fold_id(p);sType(a:80);GPSlat(r);GPSlon(r)
34;Substation1;;8;;49,95646302;11,45051847
35;Substation2;;8;;50,89789337;11,01545826
Expand Down
Loading