CustomPathRoutingTest.java

/*
 * Copyright (c) 2025, 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/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.nad.routing;

import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
import com.powsybl.ieeecdf.converter.IeeeCdfNetworkFactory;
import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Network;
import com.powsybl.nad.AbstractTest;
import com.powsybl.nad.NadParameters;
import com.powsybl.nad.NetworkAreaDiagram;
import com.powsybl.nad.layout.LayoutParameters;
import com.powsybl.nad.model.Point;
import com.powsybl.nad.svg.LabelProvider;
import com.powsybl.nad.svg.StyleProvider;
import com.powsybl.nad.svg.SvgParameters;
import com.powsybl.nad.svg.iidm.DefaultLabelProvider;
import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.nio.file.FileSystem;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;

import static com.powsybl.nad.build.iidm.VoltageLevelFilter.NO_FILTER;

/**
 * @author Florian Dupuy {@literal <florian.dupuy at rte-france.com>}
 */
class CustomPathRoutingTest extends AbstractTest {

    private FileSystem fileSystem;

    @BeforeEach
    void setup() {
        fileSystem = Jimfs.newFileSystem(Configuration.unix());
        setLayoutParameters(new LayoutParameters());
        setSvgParameters(new SvgParameters()
                .setEdgeNameDisplayed(true)
                .setSvgWidthAndHeightAdded(true)
                .setFixedWidth(800));
    }

    @Override
    protected StyleProvider getStyleProvider(Network network) {
        return new NominalVoltageStyleProvider(network);
    }

    @Override
    protected LabelProvider getLabelProvider(Network network) {
        return new DefaultLabelProvider(network, getSvgParameters()) {
        };
    }

    @Override
    protected EdgeRouting getEdgeRouting() {
        Map<String, List<Point>> edgesMap = Map.of(
                "L1-2-1", List.of(new Point(-0.89, -652.83)),
                "L1-5-1", List.of(new Point(296.10, -502.39), new Point(717.04, -455.84), new Point(737.27, -51.09))
        );
        Map<String, List<Point>> textMap = Map.of(
                "VL3", List.of(new Point(450, -400), new Point(479.01, -375.27))
        );
        return new CustomPathRouting(edgesMap, textMap);
    }

    @Test
    void testDrawSvg() {
        Network network = IeeeCdfNetworkFactory.create14Solved();

        Line line121 = network.getLine("L1-2-1");
        line121.getTerminal1().setP(10);
        line121.getTerminal2().setP(11);

        Line line151 = network.getLine("L1-5-1");
        line151.getTerminal1().setP(8);
        line151.getTerminal2().setP(7);

        Path svgFile = fileSystem.getPath("nad-test.svg");
        NadParameters nadParameters = new NadParameters()
                .setSvgParameters(getSvgParameters())
                .setStyleProviderFactory(this::getStyleProvider)
                .setEdgeRouting(getEdgeRouting());
        NetworkAreaDiagram.draw(network, svgFile, nadParameters, NO_FILTER);
        assertFileEquals("/ieee14_custom_paths.svg", svgFile);
    }
}