UsageRulesSerializer.java
/*
* Copyright (c) 2020, 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.json.serializers;
import com.powsybl.openrao.data.crac.api.usagerule.OnConstraint;
import com.powsybl.openrao.data.crac.api.usagerule.OnContingencyState;
import com.powsybl.openrao.data.crac.api.usagerule.OnFlowConstraintInCountry;
import com.powsybl.openrao.data.crac.api.usagerule.OnInstant;
import com.powsybl.openrao.data.crac.api.usagerule.UsageRule;
import com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants;
import com.powsybl.openrao.data.crac.api.RemedialAction;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.IOException;
import java.util.List;
/**
* @author Peter Mitri {@literal <peter.mitri at rte-france.com>}
*/
public final class UsageRulesSerializer {
private UsageRulesSerializer() {
}
public static void serializeUsageRules(RemedialAction<?> remedialAction, JsonGenerator gen) throws IOException {
serializeUsageRules(remedialAction, OnInstant.class, JsonSerializationConstants.ON_INSTANT_USAGE_RULES, gen);
serializeUsageRules(remedialAction, OnContingencyState.class, JsonSerializationConstants.ON_CONTINGENCY_STATE_USAGE_RULES, gen);
serializeUsageRules(remedialAction, OnConstraint.class, JsonSerializationConstants.ON_CONSTRAINT_USAGE_RULES, gen);
serializeUsageRules(remedialAction, OnFlowConstraintInCountry.class, JsonSerializationConstants.ON_FLOW_CONSTRAINT_IN_COUNTRY_USAGE_RULES, gen);
}
private static void serializeUsageRules(RemedialAction<?> remedialAction, Class<? extends UsageRule> usageRuleType, String arrayName, JsonGenerator gen) throws IOException {
List<UsageRule> usageRules = remedialAction.getUsageRules().stream()
.filter(usageRule -> usageRuleType.isAssignableFrom(usageRule.getClass()))
.sorted(new JsonSerializationConstants.UsageRuleComparator())
.toList();
if (!usageRules.isEmpty()) {
gen.writeArrayFieldStart(arrayName);
for (UsageRule ea : usageRules) {
gen.writeObject(ea);
}
gen.writeEndArray();
}
}
}