MonitoredSeriesCreationContext.java
/*
* Copyright (c) 2022, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.powsybl.openrao.data.crac.io.cim.craccreator;
import com.powsybl.openrao.data.crac.io.commons.api.ImportStatus;
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author Godelaine de Montmorillon {@literal <godelaine.demontmorillon at rte-france.com>}
*/
// TODO : make it implement ElementaryCreationContext if we can extend ElementaryCreationContext?
public final class MonitoredSeriesCreationContext {
private final String monitoredSeriesId;
private final String monitoredSeriesName;
private final String registeredResourceId;
private final String registeredResourceName;
private ImportStatus importStatus;
private String importStatusDetail;
private final Set<MeasurementCreationContext> measurementCreationContexts;
private final boolean isAltered;
MonitoredSeriesCreationContext(
String monitoredSeriesId,
String monitoredSeriesName,
String registeredResourceId,
String registeredResourceName,
ImportStatus importStatus,
boolean isAltered,
String importStatusDetail) {
this.monitoredSeriesId = monitoredSeriesId;
this.monitoredSeriesName = monitoredSeriesName;
this.registeredResourceId = registeredResourceId;
this.registeredResourceName = registeredResourceName;
this.importStatus = importStatus;
this.importStatusDetail = importStatusDetail;
measurementCreationContexts = new LinkedHashSet<>();
this.isAltered = isAltered;
}
static MonitoredSeriesCreationContext notImported(String monitoredSeriesId, String monitoredSeriesName, String registeredResourceId, String registeredResourceName,
ImportStatus importStatus, String importStatusDetail) {
return new MonitoredSeriesCreationContext(monitoredSeriesId, monitoredSeriesName, registeredResourceId, registeredResourceName, importStatus, false, importStatusDetail);
}
static MonitoredSeriesCreationContext imported(String monitoredSeriesId, String monitoredSeriesName, String registeredResourceId, String registeredResourceName,
boolean isAltered, String importStatusDetail) {
return new MonitoredSeriesCreationContext(monitoredSeriesId, monitoredSeriesName, registeredResourceId, registeredResourceName, ImportStatus.IMPORTED, isAltered, importStatusDetail);
}
public String getNativeId() {
return monitoredSeriesId;
}
public String getNativeName() {
return monitoredSeriesName;
}
public String getNativeResourceId() {
return registeredResourceId;
}
public String getNativeResourceName() {
return registeredResourceName;
}
public boolean isImported() {
return importStatus.equals(ImportStatus.IMPORTED);
}
public ImportStatus getImportStatus() {
return importStatus;
}
public String getImportStatusDetail() {
return importStatusDetail;
}
public Set<MeasurementCreationContext> getMeasurementCreationContexts() {
return measurementCreationContexts;
}
void addMeasurementCreationContext(MeasurementCreationContext measurementCreationContext) {
addMeasurementCreationContexts(Set.of(measurementCreationContext));
}
void addMeasurementCreationContexts(Set<MeasurementCreationContext> measurementCreationContexts) {
this.measurementCreationContexts.addAll(measurementCreationContexts);
if (this.measurementCreationContexts.stream().anyMatch(MeasurementCreationContext::isImported)) {
this.importStatus = ImportStatus.IMPORTED;
if (!isAltered) {
this.importStatusDetail = "";
}
} else {
this.importStatus = ImportStatus.OTHER;
this.importStatusDetail = "None of the measurements could be imported";
}
}
public boolean isAltered() {
return isAltered;
}
public Set<String> getCreatedCnecIds() {
return measurementCreationContexts.stream().map(mcc ->
mcc.getCnecCreationContexts().values().stream().map(CnecCreationContext::getCreatedCnecId).filter(Objects::nonNull).collect(Collectors.toSet())
).flatMap(Set::stream).collect(Collectors.toSet());
}
}