All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.farao_community.farao.virtual_hubs.json.VirtualHubsConfigurationDeserializer Maven / Gradle / Ivy

The newest version!
/*
 * 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 https://mozilla.org/MPL/2.0/.
 */
package com.farao_community.farao.virtual_hubs.json;

import com.farao_community.farao.virtual_hubs.MarketArea;
import com.farao_community.farao.virtual_hubs.VirtualHub;
import com.farao_community.farao.virtual_hubs.VirtualHubsConfiguration;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Sebastien Murgey {@literal }
 */
class VirtualHubsConfigurationDeserializer extends JsonDeserializer {
    @Override
    public VirtualHubsConfiguration deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        Map marketAreas = new HashMap<>();
        VirtualHubsConfiguration configuration = new VirtualHubsConfiguration();

        while (!jsonParser.nextToken().isStructEnd()) {
            switch (jsonParser.getCurrentName()) {
                case "marketAreas":
                    deserializeMarketAreas(jsonParser, configuration, marketAreas);
                    break;
                case "virtualHubs":
                    deserializeVirtualHubs(jsonParser, configuration, marketAreas);
                    break;
                default:
                    throw new VirtualHubsConfigurationDeserializationException(String.format("Attribute '%s' invalid for configuration", jsonParser.getCurrentName()));
            }
        }
        return configuration;
    }

    private void deserializeMarketAreas(JsonParser jsonParser, VirtualHubsConfiguration configuration, Map marketAreas) throws IOException {
        jsonParser.nextToken(); // Enter inside list and iterate on all market areas
        while (!jsonParser.nextToken().isStructEnd()) {
            deserializeMarketArea(jsonParser, configuration, marketAreas);
        }
    }

    private void deserializeVirtualHubs(JsonParser jsonParser, VirtualHubsConfiguration configuration, Map marketAreas) throws IOException {
        jsonParser.nextToken(); // Enter inside list and iterate on all virtual hubs
        while (!jsonParser.nextToken().isStructEnd()) {
            deserializeVirtualHub(jsonParser, configuration, marketAreas);
        }
    }

    private void deserializeMarketArea(JsonParser jsonParser, VirtualHubsConfiguration configuration, Map marketAreas) throws IOException {
        String code = null;
        String eic = null;
        Boolean isMcParticipant = null;
        while (!jsonParser.nextToken().isStructEnd()) {
            switch (jsonParser.getCurrentName()) {
                case "code":
                    code = jsonParser.nextTextValue();
                    break;
                case "eic":
                    eic = jsonParser.nextTextValue();
                    break;
                case "isMcParticipant":
                    isMcParticipant = jsonParser.nextBooleanValue();
                    break;
                default:
                    throw new VirtualHubsConfigurationDeserializationException(String.format("Attribute '%s' invalid for market area", jsonParser.getCurrentName()));
            }
        }
        MarketArea marketArea = new MarketArea(code, eic, isMcParticipant);
        marketAreas.put(code, marketArea);
        configuration.addMarketArea(marketArea);
    }

    private void deserializeVirtualHub(JsonParser jsonParser, VirtualHubsConfiguration configuration, Map marketAreas) throws IOException {
        String code = null;
        String eic = null;
        Boolean isMcParticipant = null;
        String nodeName = null;
        MarketArea marketArea = null;
        while (!jsonParser.nextToken().isStructEnd()) {
            switch (jsonParser.getCurrentName()) {
                case "code":
                    code = jsonParser.nextTextValue();
                    break;
                case "eic":
                    eic = jsonParser.nextTextValue();
                    break;
                case "isMcParticipant":
                    isMcParticipant = jsonParser.nextBooleanValue();
                    break;
                case "nodeName":
                    nodeName = jsonParser.nextTextValue();
                    break;
                case "marketArea":
                    String marketAreaCode = jsonParser.nextTextValue();
                    marketArea = marketAreas.get(marketAreaCode);
                    break;
                default:
                    throw new VirtualHubsConfigurationDeserializationException(String.format("Attribute '%s' invalid for virtual hub", jsonParser.getCurrentName()));
            }
        }
        configuration.addVirtualHub(new VirtualHub(code, eic, isMcParticipant, nodeName, marketArea));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy