diff --git a/.github/workflows/dev-ci.yml b/.github/workflows/dev-ci.yml
index f54338e238..87e670dd17 100644
--- a/.github/workflows/dev-ci.yml
+++ b/.github/workflows/dev-ci.yml
@@ -33,7 +33,7 @@ jobs:
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1.1.5 # !!! this is last version compatible with manylinux 2014
with:
- java-version: '17'
+ java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -134,7 +134,7 @@ jobs:
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1
with:
- java-version: '17'
+ java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/full-ci.yml b/.github/workflows/full-ci.yml
index d9fdf9e82d..3b11be7b2c 100644
--- a/.github/workflows/full-ci.yml
+++ b/.github/workflows/full-ci.yml
@@ -53,7 +53,7 @@ jobs:
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1.1.5 # !!! this is last version compatible with manylinux 2014
with:
- java-version: '17'
+ java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -172,7 +172,7 @@ jobs:
- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1
with:
- java-version: '17'
+ java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/README.md b/README.md
index 58baeac319..c63af0cdf1 100644
--- a/README.md
+++ b/README.md
@@ -90,7 +90,7 @@ Requirements:
- Cmake >= 3.14
- C++11 compiler
- Python >= 3.8 for Linux, Windows and MacOS (amd64 and arm64)
-- [Oracle GraalVM Java 17](https://www.graalvm.org/downloads/)
+- [Oracle GraalVM Java 21](https://www.graalvm.org/downloads/)
To build from sources and install PyPowSyBl package:
diff --git a/cpp/pypowsybl-java/CMakeLists.txt b/cpp/pypowsybl-java/CMakeLists.txt
index 7678717a78..39ecd7b1f6 100644
--- a/cpp/pypowsybl-java/CMakeLists.txt
+++ b/cpp/pypowsybl-java/CMakeLists.txt
@@ -72,7 +72,7 @@ ExternalProject_Add(native-image
DEPENDS mvn
SOURCE_DIR ${PYPOWSYBL_JAVA_BIN_DIR}
DOWNLOAD_COMMAND ""
- PATCH_COMMAND $ENV{JAVA_HOME}/bin/native-image ${NATIVE_IMAGE_BUILD_OPTIONS} --class-path ${PYPOWSYBL_JAVA_SRC_DIR}/target/pypowsybl-java.jar${EXTRA_JARS} -march=compatibility --no-fallback --shared --gc=${NATIVE_IMAGE_GC} -H:Name=pypowsybl-java -H:CLibraryPath=${CMAKE_CURRENT_SOURCE_DIR}
+ PATCH_COMMAND $ENV{JAVA_HOME}/bin/native-image ${NATIVE_IMAGE_BUILD_OPTIONS} --class-path ${PYPOWSYBL_JAVA_SRC_DIR}/target/pypowsybl-java.jar${EXTRA_JARS} -march=compatibility --no-fallback --shared --gc=${NATIVE_IMAGE_GC} -o pypowsybl-java -H:CLibraryPath=${CMAKE_CURRENT_SOURCE_DIR} --add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.c=ALL-UNNAMED
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${PYPOWSYBL_JAVA_BIN_DIR}/${PYPOWSYBL_JAVA_OLD_LIB} ${PYPOWSYBL_JAVA_BIN_DIR}/${PYPOWSYBL_JAVA_LIB} ${NATIVE_IMAGE_INSTALL_EXTRA_COMMAND}
diff --git a/java/pom.xml b/java/pom.xml
index 845521d841..e49ab5c7ea 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -61,9 +61,9 @@
1.7.0-SNAPSHOT
- 17
+ 21
4.4
- 23.0.0
+ 23.1.2
3.1.0
5.10.0
3.0.8
@@ -188,7 +188,7 @@
org.graalvm.sdk
- graal-sdk
+ nativeimage
${graalvm.version}
provided
diff --git a/java/src/main/java/com/powsybl/python/commons/CTypeUtil.java b/java/src/main/java/com/powsybl/python/commons/CTypeUtil.java
index d55fb3707a..6035a65e71 100644
--- a/java/src/main/java/com/powsybl/python/commons/CTypeUtil.java
+++ b/java/src/main/java/com/powsybl/python/commons/CTypeUtil.java
@@ -7,12 +7,10 @@
*/
package com.powsybl.python.commons;
-import com.oracle.svm.core.SubstrateUtil;
import com.powsybl.dataframe.SeriesMetadata;
import com.powsybl.python.commons.PyPowsyblApiHeader.DataframeMetadataPointer;
import com.powsybl.python.commons.PyPowsyblApiHeader.SeriesMetadataPointer;
import com.powsybl.python.commons.PyPowsyblApiHeader.StringMap;
-
import org.graalvm.nativeimage.UnmanagedMemory;
import org.graalvm.nativeimage.c.struct.SizeOf;
import org.graalvm.nativeimage.c.type.*;
@@ -62,7 +60,7 @@ public static CCharPointer toBytePtr(byte[] bytes) {
*/
public static String toString(CCharPointer charPtr) {
// pybind11 convert std::string and char* to python utf-8 string
- return CTypeConversion.toJavaString(charPtr, SubstrateUtil.strlen(charPtr), StandardCharsets.UTF_8);
+ return CTypeConversion.utf8ToJavaString(charPtr);
}
/**
diff --git a/java/src/main/java/com/powsybl/python/commons/CommonCFunctions.java b/java/src/main/java/com/powsybl/python/commons/CommonCFunctions.java
index 65b5bd05b8..f35795879a 100644
--- a/java/src/main/java/com/powsybl/python/commons/CommonCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/commons/CommonCFunctions.java
@@ -8,6 +8,7 @@
package com.powsybl.python.commons;
import com.powsybl.iidm.network.Network;
+import com.powsybl.python.commons.Util.PointerProvider;
import com.powsybl.python.dataframe.CDataframeHandler;
import com.powsybl.tools.Version;
import org.graalvm.nativeimage.IsolateThread;
@@ -26,6 +27,7 @@
/**
* @author Geoffroy Jamgotchian {@literal }
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class CommonCFunctions {
@@ -34,12 +36,22 @@ private CommonCFunctions() {
@CEntryPoint(name = "setJavaLibraryPath")
public static void setJavaLibraryPath(IsolateThread thread, CCharPointer javaLibraryPath, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> System.setProperty("java.library.path", CTypeUtil.toString(javaLibraryPath)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ System.setProperty("java.library.path", CTypeUtil.toString(javaLibraryPath));
+ }
+ });
}
@CEntryPoint(name = "setConfigRead")
public static void setConfigRead(IsolateThread thread, boolean read, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> PyPowsyblConfiguration.setReadConfig(read));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ PyPowsyblConfiguration.setReadConfig(read);
+ }
+ });
}
@CEntryPoint(name = "isConfigRead")
@@ -49,30 +61,45 @@ public static boolean isConfigRead(IsolateThread thread, ExceptionHandlerPointer
@CEntryPoint(name = "getVersionTable")
public static CCharPointer getVersionTable(IsolateThread thread, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> CTypeUtil.toCharPtr(Version.getTableString()));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return CTypeUtil.toCharPtr(Version.getTableString());
+ });
}
@CEntryPoint(name = "freeStringArray")
public static void freeStringArray(IsolateThread thread, ArrayPointer arrayPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> freeArrayContent(arrayPtr));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeArrayContent(arrayPtr);
+ }
+ });
}
@CEntryPoint(name = "freeArray")
public static void freeArray(IsolateThread thread, ArrayPointer arrayPointer,
ExceptionHandlerPointer exceptionHandlerPtr) {
- UnmanagedMemory.free(arrayPointer.getPtr());
- UnmanagedMemory.free(arrayPointer);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ UnmanagedMemory.free(arrayPointer.getPtr());
+ UnmanagedMemory.free(arrayPointer);
+ }
+ });
}
@CEntryPoint(name = "freeSeriesArray")
public static void freeSeriesArray(IsolateThread thread, ArrayPointer seriesPtrArrayPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- for (int i = 0; i < seriesPtrArrayPtr.getLength(); i++) {
- freeSeries(seriesPtrArrayPtr.getPtr().addressOf(i));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < seriesPtrArrayPtr.getLength(); i++) {
+ freeSeries(seriesPtrArrayPtr.getPtr().addressOf(i));
+ }
+ freeArrayPointer(seriesPtrArrayPtr);
}
- freeArrayPointer(seriesPtrArrayPtr);
});
}
@@ -97,20 +124,33 @@ private static void freeArrayContent(ArrayPointer array) {
@CEntryPoint(name = "destroyObjectHandle")
public static void destroyObjectHandle(IsolateThread thread, ObjectHandle objectHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> ObjectHandles.getGlobal().destroy(objectHandle));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ ObjectHandles.getGlobal().destroy(objectHandle);
+ }
+ });
}
@CEntryPoint(name = "getWorkingVariantId")
public static CCharPointer getWorkingVariantId(IsolateThread thread, ObjectHandle networkHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- return CTypeUtil.toCharPtr(network.getVariantManager().getWorkingVariantId());
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ return CTypeUtil.toCharPtr(network.getVariantManager().getWorkingVariantId());
+ }
});
}
@CEntryPoint(name = "freeString")
public static void freeString(IsolateThread thread, CCharPointer string, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> UnmanagedMemory.free(string));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ UnmanagedMemory.free(string);
+ }
+ });
}
@CEntryPoint(name = "closePypowsybl")
@@ -120,12 +160,15 @@ public static void closePypowsybl(IsolateThread thread, ExceptionHandlerPointer
@CEntryPoint(name = "freeStringMap")
public static void freeStringMap(IsolateThread thread, StringMap map, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- for (int i = 0; i < map.getLength(); i++) {
- UnmanagedMemory.free(map.getKeys().read(i));
- UnmanagedMemory.free(map.getValues().read(i));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < map.getLength(); i++) {
+ UnmanagedMemory.free(map.getKeys().read(i));
+ UnmanagedMemory.free(map.getValues().read(i));
+ }
+ UnmanagedMemory.free(map);
}
- UnmanagedMemory.free(map);
});
}
}
diff --git a/java/src/main/java/com/powsybl/python/dataframe/CDataframeHandler.java b/java/src/main/java/com/powsybl/python/dataframe/CDataframeHandler.java
index 2a767cec9f..956bfae8ea 100644
--- a/java/src/main/java/com/powsybl/python/dataframe/CDataframeHandler.java
+++ b/java/src/main/java/com/powsybl/python/dataframe/CDataframeHandler.java
@@ -26,6 +26,7 @@
*
* @author Sylvain Leclerc
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
public class CDataframeHandler implements DataframeHandler {
public static final int STRING_SERIES_TYPE = 0;
@@ -55,42 +56,72 @@ public void allocate(int seriesCount) {
public StringSeriesWriter newStringIndex(String name, int size) {
CCharPointerPointer dataPtr = UnmanagedMemory.calloc(size * SizeOf.get(CCharPointerPointer.class));
addIndex(name, size, dataPtr, STRING_SERIES_TYPE);
- return (i, v) -> dataPtr.addressOf(i).write(CTypeUtil.toCharPtr(v));
+ return new StringSeriesWriter() {
+ @Override
+ public void set(int i, String v) {
+ dataPtr.addressOf(i).write(CTypeUtil.toCharPtr(v));
+ }
+ };
}
@Override
public IntSeriesWriter newIntIndex(String name, int size) {
CIntPointer dataPtr = UnmanagedMemory.calloc(size * SizeOf.get(CIntPointer.class));
addIndex(name, size, dataPtr, INT_SERIES_TYPE);
- return (i, v) -> dataPtr.addressOf(i).write(v);
+ return new IntSeriesWriter() {
+ @Override
+ public void set(int i, int v) {
+ dataPtr.addressOf(i).write(v);
+ }
+ };
}
@Override
public StringSeriesWriter newStringSeries(String name, int size) {
CCharPointerPointer dataPtr = UnmanagedMemory.calloc(size * SizeOf.get(CCharPointerPointer.class));
addSeries(name, size, dataPtr, STRING_SERIES_TYPE);
- return (i, v) -> dataPtr.addressOf(i).write(CTypeUtil.toCharPtr(v));
+ return new StringSeriesWriter() {
+ @Override
+ public void set(int i, String v) {
+ dataPtr.addressOf(i).write(CTypeUtil.toCharPtr(v));
+ }
+ };
}
@Override
public IntSeriesWriter newIntSeries(String name, int size) {
CIntPointer dataPtr = UnmanagedMemory.calloc(size * SizeOf.get(CIntPointer.class));
addSeries(name, size, dataPtr, INT_SERIES_TYPE);
- return (i, v) -> dataPtr.addressOf(i).write(v);
+ return new IntSeriesWriter() {
+ @Override
+ public void set(int i, int v) {
+ dataPtr.addressOf(i).write(v);
+ }
+ };
}
@Override
public BooleanSeriesWriter newBooleanSeries(String name, int size) {
CCharPointer dataPtr = UnmanagedMemory.calloc(size * SizeOf.get(CCharPointer.class));
addSeries(name, size, dataPtr, BOOLEAN_SERIES_TYPE);
- return (i, v) -> dataPtr.addressOf(i).write(v ? (byte) 1 : 0);
+ return new BooleanSeriesWriter() {
+ @Override
+ public void set(int i, boolean v) {
+ dataPtr.addressOf(i).write(v ? (byte) 1 : 0);
+ }
+ };
}
@Override
public DoubleSeriesWriter newDoubleSeries(String name, int size) {
CDoublePointer dataPtr = UnmanagedMemory.calloc(size * SizeOf.get(CDoublePointer.class));
addSeries(name, size, dataPtr, DOUBLE_SERIES_TYPE);
- return (i, v) -> dataPtr.addressOf(i).write(v);
+ return new DoubleSeriesWriter() {
+ @Override
+ public void set(int i, double v) {
+ dataPtr.addressOf(i).write(v);
+ }
+ };
}
private void addSeries(String name, int count, PointerBase dataPtr, int type) {
diff --git a/java/src/main/java/com/powsybl/python/dynamic/DynamicSimulationCFunctions.java b/java/src/main/java/com/powsybl/python/dynamic/DynamicSimulationCFunctions.java
index 433ae8c689..1805b94449 100644
--- a/java/src/main/java/com/powsybl/python/dynamic/DynamicSimulationCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/dynamic/DynamicSimulationCFunctions.java
@@ -9,8 +9,10 @@
import static com.powsybl.python.commons.Util.doCatch;
+import java.io.IOException;
import java.util.ArrayList;
+import com.powsybl.python.commons.Util.PointerProvider;
import org.graalvm.nativeimage.IsolateThread;
import org.graalvm.nativeimage.ObjectHandle;
import org.graalvm.nativeimage.ObjectHandles;
@@ -46,6 +48,7 @@
/**
* @author Nicolas Pierre
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class DynamicSimulationCFunctions {
@@ -59,25 +62,45 @@ private static Logger logger() {
@CEntryPoint(name = "createDynamicSimulationContext")
public static ObjectHandle createDynamicSimulationContext(IsolateThread thread,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> ObjectHandles.getGlobal().create(new DynamicSimulationContext()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() throws IOException {
+ return ObjectHandles.getGlobal().create(new DynamicSimulationContext());
+ }
+ });
}
@CEntryPoint(name = "createDynamicModelMapping")
public static ObjectHandle createDynamicModelMapping(IsolateThread thread,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> ObjectHandles.getGlobal().create(new PythonDynamicModelsSupplier()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ return ObjectHandles.getGlobal().create(new PythonDynamicModelsSupplier());
+ }
+ });
}
@CEntryPoint(name = "createTimeseriesMapping")
public static ObjectHandle createTimeseriesMapping(IsolateThread thread,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> ObjectHandles.getGlobal().create(new CurveMappingSupplier()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() throws IOException {
+ return ObjectHandles.getGlobal().create(new CurveMappingSupplier());
+ }
+ });
}
@CEntryPoint(name = "createEventMapping")
public static ObjectHandle createEventMapping(IsolateThread thread,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> ObjectHandles.getGlobal().create(new EventSupplier()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() throws IOException {
+ return ObjectHandles.getGlobal().create(new EventSupplier());
+ }
+ });
}
@CEntryPoint(name = "runDynamicModel")
@@ -89,21 +112,24 @@ public static ObjectHandle runDynamicModel(IsolateThread thread,
ObjectHandle curvesSupplierHandle,
int startTime, int stopTime,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DynamicSimulationContext dynamicContext = ObjectHandles.getGlobal().get(dynamicContextHandle);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- PythonDynamicModelsSupplier dynamicMapping = ObjectHandles.getGlobal().get(dynamicMappingHandle);
- EventModelsSupplier eventModelsSupplier = ObjectHandles.getGlobal().get(eventModelsSupplierHandle);
- CurvesSupplier curvesSupplier = ObjectHandles.getGlobal().get(curvesSupplierHandle);
- DynamicSimulationParameters dynamicSimulationParameters = new DynamicSimulationParameters(startTime,
- stopTime);
- DynamicSimulationResult result = dynamicContext.run(network,
- dynamicMapping,
- eventModelsSupplier,
- curvesSupplier,
- dynamicSimulationParameters);
- logger().info("Dynamic simulation ran successfully in java");
- return ObjectHandles.getGlobal().create(result);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() throws IOException {
+ DynamicSimulationContext dynamicContext = ObjectHandles.getGlobal().get(dynamicContextHandle);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ PythonDynamicModelsSupplier dynamicMapping = ObjectHandles.getGlobal().get(dynamicMappingHandle);
+ EventModelsSupplier eventModelsSupplier = ObjectHandles.getGlobal().get(eventModelsSupplierHandle);
+ CurvesSupplier curvesSupplier = ObjectHandles.getGlobal().get(curvesSupplierHandle);
+ DynamicSimulationParameters dynamicSimulationParameters = new DynamicSimulationParameters(startTime,
+ stopTime);
+ DynamicSimulationResult result = dynamicContext.run(network,
+ dynamicMapping,
+ eventModelsSupplier,
+ curvesSupplier,
+ dynamicSimulationParameters);
+ logger().info("Dynamic simulation ran successfully in java");
+ return ObjectHandles.getGlobal().create(result);
+ }
});
}
@@ -112,10 +138,13 @@ public static void addDynamicMapping(IsolateThread thread, ObjectHandle dynamicM
DynamicMappingType mappingType,
DataframePointer mappingDataframePtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- PythonDynamicModelsSupplier dynamicMapping = ObjectHandles.getGlobal().get(dynamicMappingHandle);
- UpdatingDataframe mappingDataframe = NetworkCFunctions.createDataframe(mappingDataframePtr);
- DynamicMappingAdderFactory.getAdder(mappingType).addElements(dynamicMapping, mappingDataframe);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ PythonDynamicModelsSupplier dynamicMapping = ObjectHandles.getGlobal().get(dynamicMappingHandle);
+ UpdatingDataframe mappingDataframe = NetworkCFunctions.createDataframe(mappingDataframePtr);
+ DynamicMappingAdderFactory.getAdder(mappingType).addElements(dynamicMapping, mappingDataframe);
+ }
});
}
@@ -123,7 +152,12 @@ public static void addDynamicMapping(IsolateThread thread, ObjectHandle dynamicM
public static DataframeMetadataPointer getDynamicMappingsMetaData(IsolateThread thread,
DynamicMappingType mappingType,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> CTypeUtil.createSeriesMetadata(DynamicMappingAdderFactory.getAdder(mappingType).getMetadata()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframeMetadataPointer get() throws IOException {
+ return CTypeUtil.createSeriesMetadata(DynamicMappingAdderFactory.getAdder(mappingType).getMetadata());
+ }
+ });
}
@CEntryPoint(name = "addCurve")
@@ -132,11 +166,14 @@ public static void addCurve(IsolateThread thread,
CCharPointer dynamicIdPtr,
CCharPointer variablePtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- String dynamicId = CTypeUtil.toString(dynamicIdPtr);
- String variable = CTypeUtil.toString(variablePtr);
- CurveMappingSupplier timeSeriesSupplier = ObjectHandles.getGlobal().get(timeseriesSupplier);
- timeSeriesSupplier.addCurve(dynamicId, variable);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ String dynamicId = CTypeUtil.toString(dynamicIdPtr);
+ String variable = CTypeUtil.toString(variablePtr);
+ CurveMappingSupplier timeSeriesSupplier = ObjectHandles.getGlobal().get(timeseriesSupplier);
+ timeSeriesSupplier.addCurve(dynamicId, variable);
+ }
});
}
@@ -147,10 +184,13 @@ public static void addEventDisconnection(IsolateThread thread,
double eventTime,
int disconnectOnly,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- String staticId = CTypeUtil.toString(staticIdPtr);
- EventSupplier eventSupplier = ObjectHandles.getGlobal().get(eventSupplierHandle);
- eventSupplier.addEventDisconnection(staticId, eventTime, Util.convert(PyPowsyblApiHeader.ThreeSideType.fromCValue(disconnectOnly)).toTwoSides());
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ String staticId = CTypeUtil.toString(staticIdPtr);
+ EventSupplier eventSupplier = ObjectHandles.getGlobal().get(eventSupplierHandle);
+ eventSupplier.addEventDisconnection(staticId, eventTime, Util.convert(PyPowsyblApiHeader.ThreeSideType.fromCValue(disconnectOnly)).toTwoSides());
+ }
});
}
@@ -158,9 +198,12 @@ public static void addEventDisconnection(IsolateThread thread,
public static CCharPointer getDynamicSimulationResultsStatus(IsolateThread thread,
ObjectHandle dynamicSimulationResultsHandle,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DynamicSimulationResult simulationResult = ObjectHandles.getGlobal().get(dynamicSimulationResultsHandle);
- return CTypeUtil.toCharPtr(simulationResult.isOk() ? "Ok" : "Not OK");
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() throws IOException {
+ DynamicSimulationResult simulationResult = ObjectHandles.getGlobal().get(dynamicSimulationResultsHandle);
+ return CTypeUtil.toCharPtr(simulationResult.isOk() ? "Ok" : "Not OK");
+ }
});
}
@@ -169,11 +212,14 @@ public static ArrayPointer getDynamicCurve(IsolateThread thread,
ObjectHandle resultHandle,
CCharPointer curveNamePtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DynamicSimulationResult result = ObjectHandles.getGlobal().get(resultHandle);
- String curveName = CTypeUtil.toString(curveNamePtr);
- TimeSeries curve = result.getCurve(curveName);
- return Dataframes.createCDataframe(CurvesSeries.curvesDataFrameMapper(curveName), curve);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() throws IOException {
+ DynamicSimulationResult result = ObjectHandles.getGlobal().get(resultHandle);
+ String curveName = CTypeUtil.toString(curveNamePtr);
+ TimeSeries curve = result.getCurve(curveName);
+ return Dataframes.createCDataframe(CurvesSeries.curvesDataFrameMapper(curveName), curve);
+ }
});
}
@@ -181,9 +227,12 @@ public static ArrayPointer getDynamicCurve(IsolateThread thread,
public static ArrayPointer getAllDynamicCurvesIds(IsolateThread thread,
ObjectHandle resultHandle,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DynamicSimulationResult result = ObjectHandles.getGlobal().get(resultHandle);
- return Util.createCharPtrArray(new ArrayList<>(result.getCurves().keySet()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() throws IOException {
+ DynamicSimulationResult result = ObjectHandles.getGlobal().get(resultHandle);
+ return Util.createCharPtrArray(new ArrayList<>(result.getCurves().keySet()));
+ }
});
}
diff --git a/java/src/main/java/com/powsybl/python/flow_decomposition/FlowDecompositionCFunctions.java b/java/src/main/java/com/powsybl/python/flow_decomposition/FlowDecompositionCFunctions.java
index 1a8cc89dfb..205c22f2ab 100644
--- a/java/src/main/java/com/powsybl/python/flow_decomposition/FlowDecompositionCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/flow_decomposition/FlowDecompositionCFunctions.java
@@ -14,11 +14,10 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.loadflow.LoadFlowProvider;
-import com.powsybl.python.commons.CTypeUtil;
-import com.powsybl.python.commons.CommonCFunctions;
-import com.powsybl.python.commons.Directives;
-import com.powsybl.python.commons.PyPowsyblApiHeader;
-import com.powsybl.python.commons.PyPowsyblConfiguration;
+import com.powsybl.python.commons.*;
+import com.powsybl.python.commons.PyPowsyblApiHeader.ArrayPointer;
+import com.powsybl.python.commons.PyPowsyblApiHeader.SeriesPointer;
+import com.powsybl.python.commons.Util.PointerProvider;
import com.powsybl.python.loadflow.LoadFlowCUtils;
import com.powsybl.python.network.Dataframes;
import org.graalvm.nativeimage.IsolateThread;
@@ -33,6 +32,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -42,6 +42,7 @@
/**
* @author Hugo Schindler {@literal }
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class FlowDecompositionCFunctions {
@@ -52,7 +53,9 @@ private FlowDecompositionCFunctions() {
@CEntryPoint(name = "createFlowDecomposition")
public static ObjectHandle createFlowDecomposition(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> ObjectHandles.getGlobal().create(new FlowDecompositionContext()));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return ObjectHandles.getGlobal().create(new FlowDecompositionContext());
+ });
}
@CEntryPoint(name = "addContingencyForFlowDecomposition")
@@ -60,11 +63,14 @@ public static void addContingency(IsolateThread thread, ObjectHandle flowDecompo
CCharPointer contingencyIdPtr,
CCharPointerPointer elementIdPtrPtr, int elementCount,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
- Set elementsIds = new HashSet<>(toStringList(elementIdPtrPtr, elementCount));
- String contingencyId = CTypeUtil.toString(contingencyIdPtr);
- flowDecompositionContext.getXnecProviderByIdsBuilder().addContingency(contingencyId, elementsIds);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
+ Set elementsIds = new HashSet<>(toStringList(elementIdPtrPtr, elementCount));
+ String contingencyId = CTypeUtil.toString(contingencyIdPtr);
+ flowDecompositionContext.getXnecProviderByIdsBuilder().addContingency(contingencyId, elementsIds);
+ }
});
}
@@ -72,10 +78,13 @@ public static void addContingency(IsolateThread thread, ObjectHandle flowDecompo
public static void addPrecontingencyMonitoredElements(IsolateThread thread, ObjectHandle flowDecompositionContextHandle,
CCharPointerPointer elementIdPtrPtr, int elementCount,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
- Set elementsIds = new HashSet<>(toStringList(elementIdPtrPtr, elementCount));
- flowDecompositionContext.getXnecProviderByIdsBuilder().addNetworkElementsOnBasecase(elementsIds);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
+ Set elementsIds = new HashSet<>(toStringList(elementIdPtrPtr, elementCount));
+ flowDecompositionContext.getXnecProviderByIdsBuilder().addNetworkElementsOnBasecase(elementsIds);
+ }
});
}
@@ -84,11 +93,14 @@ public static void addPostcontingencyMonitoredElements(IsolateThread thread, Obj
CCharPointerPointer elementIdPtrPtr, int elementCount,
CCharPointerPointer contingenciesIdPtrPtr, int contingenciesCount,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
- Set elementsIds = new HashSet<>(toStringList(elementIdPtrPtr, elementCount));
- Set contingenciesIds = new HashSet<>(toStringList(contingenciesIdPtrPtr, contingenciesCount));
- flowDecompositionContext.getXnecProviderByIdsBuilder().addNetworkElementsAfterContingencies(elementsIds, contingenciesIds);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
+ Set elementsIds = new HashSet<>(toStringList(elementIdPtrPtr, elementCount));
+ Set contingenciesIds = new HashSet<>(toStringList(contingenciesIdPtrPtr, contingenciesCount));
+ flowDecompositionContext.getXnecProviderByIdsBuilder().addNetworkElementsAfterContingencies(elementsIds, contingenciesIds);
+ }
});
}
@@ -96,49 +108,62 @@ public static void addPostcontingencyMonitoredElements(IsolateThread thread, Obj
public static void addAdditionalXnecProvider(IsolateThread thread, ObjectHandle flowDecompositionContextHandle,
int additionalXnecProviderId,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
- flowDecompositionContext.addAdditionalXnecProviderList(FlowDecompositionContext.DefaultXnecProvider.values()[additionalXnecProviderId]);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
+ flowDecompositionContext.addAdditionalXnecProviderList(FlowDecompositionContext.DefaultXnecProvider.values()[additionalXnecProviderId]);
+ }
+ });
}
@CEntryPoint(name = "runFlowDecomposition")
- public static PyPowsyblApiHeader.ArrayPointer runFlowDecomposition(IsolateThread thread,
- ObjectHandle flowDecompositionContextHandle,
- ObjectHandle networkHandle,
- PyPowsyblApiHeader.FlowDecompositionParametersPointer flowDecompositionParametersPtr,
- PyPowsyblApiHeader.LoadFlowParametersPointer loadFlowParametersPtr,
- PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
-
- String lfProviderName = PyPowsyblConfiguration.getDefaultLoadFlowProvider();
- LoadFlowProvider loadFlowProvider = LoadFlowCUtils.getLoadFlowProvider(lfProviderName);
- String sensiProviderName = PyPowsyblConfiguration.getDefaultSensitivityAnalysisProvider();
- LoadFlowParameters loadFlowParameters = LoadFlowCUtils.createLoadFlowParameters(DC, loadFlowParametersPtr, loadFlowProvider);
- FlowDecompositionParameters flowDecompositionParameters = FlowDecompositionCUtils.createFlowDecompositionParameters(flowDecompositionParametersPtr);
-
- logger().debug("Loadflow provider used is : {}", loadFlowProvider.getName());
- logger().debug("Sensitivity analysis provider used is : {}", sensiProviderName);
- logger().debug("Load flow parameters : {}", loadFlowParameters);
- logger().debug("Flow decomposition parameters : {}", flowDecompositionParameters);
-
- FlowDecompositionComputer flowDecompositionComputer = new FlowDecompositionComputer(flowDecompositionParameters, loadFlowParameters, lfProviderName, sensiProviderName);
- XnecProvider xnecProvider = flowDecompositionContext.getXnecProvider();
- FlowDecompositionResults flowDecompositionResults = flowDecompositionComputer.run(xnecProvider, network);
-
- return Dataframes.createCDataframe(Dataframes.flowDecompositionMapper(flowDecompositionResults.getZoneSet()), flowDecompositionResults);
+ public static ArrayPointer runFlowDecomposition(IsolateThread thread,
+ ObjectHandle flowDecompositionContextHandle,
+ ObjectHandle networkHandle,
+ PyPowsyblApiHeader.FlowDecompositionParametersPointer flowDecompositionParametersPtr,
+ PyPowsyblApiHeader.LoadFlowParametersPointer loadFlowParametersPtr,
+ PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() throws IOException {
+ FlowDecompositionContext flowDecompositionContext = ObjectHandles.getGlobal().get(flowDecompositionContextHandle);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+
+ String lfProviderName = PyPowsyblConfiguration.getDefaultLoadFlowProvider();
+ LoadFlowProvider loadFlowProvider = LoadFlowCUtils.getLoadFlowProvider(lfProviderName);
+ String sensiProviderName = PyPowsyblConfiguration.getDefaultSensitivityAnalysisProvider();
+ LoadFlowParameters loadFlowParameters = LoadFlowCUtils.createLoadFlowParameters(DC, loadFlowParametersPtr, loadFlowProvider);
+ FlowDecompositionParameters flowDecompositionParameters = FlowDecompositionCUtils.createFlowDecompositionParameters(flowDecompositionParametersPtr);
+
+ logger().debug("Loadflow provider used is : {}", loadFlowProvider.getName());
+ logger().debug("Sensitivity analysis provider used is : {}", sensiProviderName);
+ logger().debug("Load flow parameters : {}", loadFlowParameters);
+ logger().debug("Flow decomposition parameters : {}", flowDecompositionParameters);
+
+ FlowDecompositionComputer flowDecompositionComputer = new FlowDecompositionComputer(flowDecompositionParameters, loadFlowParameters, lfProviderName, sensiProviderName);
+ XnecProvider xnecProvider = flowDecompositionContext.getXnecProvider();
+ FlowDecompositionResults flowDecompositionResults = flowDecompositionComputer.run(xnecProvider, network);
+
+ return Dataframes.createCDataframe(Dataframes.flowDecompositionMapper(flowDecompositionResults.getZoneSet()), flowDecompositionResults);
+ }
});
}
@CEntryPoint(name = "createFlowDecompositionParameters")
public static PyPowsyblApiHeader.FlowDecompositionParametersPointer createFlowDecompositionParameters(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> convertToFlowDecompositionParametersPointer(FlowDecompositionCUtils.createFlowDecompositionParameters()));
+ return doCatch(exceptionHandlerPtr, FlowDecompositionCFunctions::get);
}
@CEntryPoint(name = "freeFlowDecompositionParameters")
public static void freeFlowDecompositionParameters(IsolateThread thread, PyPowsyblApiHeader.FlowDecompositionParametersPointer flowDecompositionParametersPtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> UnmanagedMemory.free(flowDecompositionParametersPtr));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ UnmanagedMemory.free(flowDecompositionParametersPtr);
+ }
+ });
}
private static PyPowsyblApiHeader.FlowDecompositionParametersPointer convertToFlowDecompositionParametersPointer(FlowDecompositionParameters parameters) {
@@ -155,4 +180,8 @@ private static PyPowsyblApiHeader.FlowDecompositionParametersPointer convertToFl
private static Logger logger() {
return LoggerFactory.getLogger(CommonCFunctions.class);
}
+
+ private static PyPowsyblApiHeader.FlowDecompositionParametersPointer get() {
+ return convertToFlowDecompositionParametersPointer(FlowDecompositionCUtils.createFlowDecompositionParameters());
+ }
}
diff --git a/java/src/main/java/com/powsybl/python/glsk/GlskCFunctions.java b/java/src/main/java/com/powsybl/python/glsk/GlskCFunctions.java
index a6acfc68e5..7ac2ba70db 100644
--- a/java/src/main/java/com/powsybl/python/glsk/GlskCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/glsk/GlskCFunctions.java
@@ -23,6 +23,7 @@
import java.time.Instant;
import java.util.List;
+import java.util.function.LongSupplier;
import static com.powsybl.python.commons.Util.*;
@@ -39,56 +40,74 @@ private GlskCFunctions() {
@CEntryPoint(name = "createGLSKdocument")
public static ObjectHandle createGLSKdocument(IsolateThread thread, CCharPointer fileNamePtr, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- GlskDocumentContext importer = new GlskDocumentContext();
- String filename = CTypeUtil.toString(fileNamePtr);
- importer.load(filename);
- return ObjectHandles.getGlobal().create(importer);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ GlskDocumentContext importer = new GlskDocumentContext();
+ String filename = CTypeUtil.toString(fileNamePtr);
+ importer.load(filename);
+ return ObjectHandles.getGlobal().create(importer);
+ }
});
}
@CEntryPoint(name = "getGLSKinjectionkeys")
public static ArrayPointer getGLSKinjectionkeys(IsolateThread thread, ObjectHandle networkHandle, ObjectHandle importerHandle, CCharPointer countryPtr, long instant, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String country = CTypeUtil.toString(countryPtr);
- return createCharPtrArray(importer.getInjectionIdForCountry(network, country, Instant.ofEpochSecond(instant)));
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String country = CTypeUtil.toString(countryPtr);
+ return createCharPtrArray(importer.getInjectionIdForCountry(network, country, Instant.ofEpochSecond(instant)));
+ }
});
}
@CEntryPoint(name = "getGLSKcountries")
public static ArrayPointer getGLSKcountries(IsolateThread thread, ObjectHandle importerHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
- return createCharPtrArray(importer.getCountries());
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
+ return createCharPtrArray(importer.getCountries());
+ }
});
}
@CEntryPoint(name = "getInjectionFactor")
public static ArrayPointer getInjectionFactor(IsolateThread thread, ObjectHandle networkHandle, ObjectHandle importerHandle, CCharPointer countryPtr, long instant, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
- String country = CTypeUtil.toString(countryPtr);
- List values = importer.getInjectionFactorForCountryTimeinterval(network, country, Instant.ofEpochSecond(instant));
- return createDoubleArray(values);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
+ String country = CTypeUtil.toString(countryPtr);
+ List values = importer.getInjectionFactorForCountryTimeinterval(network, country, Instant.ofEpochSecond(instant));
+ return createDoubleArray(values);
+ }
});
}
@CEntryPoint(name = "getInjectionFactorStartTimestamp")
public static long getInjectionFactorStartTimestamp(IsolateThread thread, ObjectHandle importerHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
- return importer.getInjectionFactorStart().getEpochSecond();
+ return doCatch(exceptionHandlerPtr, new LongSupplier() {
+ @Override
+ public long getAsLong() {
+ GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
+ return importer.getInjectionFactorStart().getEpochSecond();
+ }
});
}
@CEntryPoint(name = "getInjectionFactorEndTimestamp")
public static long getInjectionFactorEndTimestamp(IsolateThread thread, ObjectHandle importerHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
- return importer.getInjectionFactorEnd().getEpochSecond();
+ return doCatch(exceptionHandlerPtr, new LongSupplier() {
+ @Override
+ public long getAsLong() {
+ GlskDocumentContext importer = ObjectHandles.getGlobal().get(importerHandle);
+ return importer.getInjectionFactorEnd().getEpochSecond();
+ }
});
}
}
diff --git a/java/src/main/java/com/powsybl/python/loadflow/LoadFlowCFunctions.java b/java/src/main/java/com/powsybl/python/loadflow/LoadFlowCFunctions.java
index 6e72b626ab..5aec174a6a 100644
--- a/java/src/main/java/com/powsybl/python/loadflow/LoadFlowCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/loadflow/LoadFlowCFunctions.java
@@ -16,7 +16,11 @@
import com.powsybl.loadflow.LoadFlowProvider;
import com.powsybl.loadflow.LoadFlowResult;
import com.powsybl.python.commons.*;
+import com.powsybl.python.commons.PyPowsyblApiHeader.ArrayPointer;
+import com.powsybl.python.commons.PyPowsyblApiHeader.LoadFlowComponentResultPointer;
import com.powsybl.python.commons.PyPowsyblApiHeader.LoadFlowParametersPointer;
+import com.powsybl.python.commons.PyPowsyblApiHeader.SeriesPointer;
+import com.powsybl.python.commons.Util.PointerProvider;
import com.powsybl.python.network.Dataframes;
import com.powsybl.python.report.ReportCUtils;
import org.graalvm.nativeimage.IsolateThread;
@@ -45,6 +49,7 @@
*
* @author Sylvain Leclerc
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class LoadFlowCFunctions {
@@ -53,67 +58,96 @@ private LoadFlowCFunctions() {
@CEntryPoint(name = "setDefaultLoadFlowProvider")
public static void setDefaultLoadFlowProvider(IsolateThread thread, CCharPointer provider, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> PyPowsyblConfiguration.setDefaultLoadFlowProvider(CTypeUtil.toString(provider)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ PyPowsyblConfiguration.setDefaultLoadFlowProvider(CTypeUtil.toString(provider));
+ }
+ });
}
@CEntryPoint(name = "getDefaultLoadFlowProvider")
public static CCharPointer getDefaultLoadFlowProvider(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> CTypeUtil.toCharPtr(PyPowsyblConfiguration.getDefaultLoadFlowProvider()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ return CTypeUtil.toCharPtr(PyPowsyblConfiguration.getDefaultLoadFlowProvider());
+ }
+ });
}
@CEntryPoint(name = "freeLoadFlowComponentResultPointer")
- public static void freeLoadFlowComponentResultPointer(IsolateThread thread, PyPowsyblApiHeader.ArrayPointer componentResultArrayPtr,
+ public static void freeLoadFlowComponentResultPointer(IsolateThread thread, ArrayPointer componentResultArrayPtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- for (int i = 0; i < componentResultArrayPtr.getLength(); i++) {
- PyPowsyblApiHeader.LoadFlowComponentResultPointer loadFlowComponentResultPointer = componentResultArrayPtr.getPtr().addressOf(i);
- UnmanagedMemory.free(loadFlowComponentResultPointer.getStatusText());
- UnmanagedMemory.free(loadFlowComponentResultPointer.getReferenceBusId());
- for (int j = 0; j < loadFlowComponentResultPointer.slackBusResults().getLength(); j++) {
- PyPowsyblApiHeader.SlackBusResultPointer slackBusResultPointer = loadFlowComponentResultPointer.slackBusResults().getPtr().addressOf(j);
- UnmanagedMemory.free(slackBusResultPointer.getId());
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < componentResultArrayPtr.getLength(); i++) {
+ LoadFlowComponentResultPointer loadFlowComponentResultPointer = componentResultArrayPtr.getPtr().addressOf(i);
+ UnmanagedMemory.free(loadFlowComponentResultPointer.getStatusText());
+ UnmanagedMemory.free(loadFlowComponentResultPointer.getReferenceBusId());
+ for (int j = 0; j < loadFlowComponentResultPointer.slackBusResults().getLength(); j++) {
+ PyPowsyblApiHeader.SlackBusResultPointer slackBusResultPointer = loadFlowComponentResultPointer.slackBusResults().getPtr().addressOf(j);
+ UnmanagedMemory.free(slackBusResultPointer.getId());
+ }
}
+ freeArrayPointer(componentResultArrayPtr);
}
- freeArrayPointer(componentResultArrayPtr);
});
}
@CEntryPoint(name = "getLoadFlowProviderNames")
- public static PyPowsyblApiHeader.ArrayPointer getLoadFlowProviderNames(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> createCharPtrArray(LoadFlowProvider.findAll()
- .stream().map(LoadFlowProvider::getName).collect(Collectors.toList())));
+ public static ArrayPointer getLoadFlowProviderNames(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ return createCharPtrArray(LoadFlowProvider.findAll()
+ .stream().map(LoadFlowProvider::getName).collect(Collectors.toList()));
+ }
+ });
}
@CEntryPoint(name = "runLoadFlow")
- public static PyPowsyblApiHeader.ArrayPointer runLoadFlow(IsolateThread thread, ObjectHandle networkHandle, boolean dc,
- LoadFlowParametersPointer loadFlowParametersPtr,
- CCharPointer provider, ObjectHandle reportNodeHandle,
- PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return Util.doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String providerStr = CTypeUtil.toString(provider);
- LoadFlowProvider loadFlowProvider = LoadFlowCUtils.getLoadFlowProvider(providerStr);
- logger().info("loadflow provider used is : {}", loadFlowProvider.getName());
-
- LoadFlowParameters parameters = LoadFlowCUtils.createLoadFlowParameters(dc, loadFlowParametersPtr, loadFlowProvider);
- LoadFlow.Runner runner = new LoadFlow.Runner(loadFlowProvider);
- ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
- LoadFlowResult result = runner.run(network, network.getVariantManager().getWorkingVariantId(),
+ public static ArrayPointer runLoadFlow(IsolateThread thread, ObjectHandle networkHandle, boolean dc,
+ LoadFlowParametersPointer loadFlowParametersPtr,
+ CCharPointer provider, ObjectHandle reportNodeHandle,
+ PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return Util.doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String providerStr = CTypeUtil.toString(provider);
+ LoadFlowProvider loadFlowProvider = LoadFlowCUtils.getLoadFlowProvider(providerStr);
+ logger().info("loadflow provider used is : {}", loadFlowProvider.getName());
+
+ LoadFlowParameters parameters = LoadFlowCUtils.createLoadFlowParameters(dc, loadFlowParametersPtr, loadFlowProvider);
+ LoadFlow.Runner runner = new LoadFlow.Runner(loadFlowProvider);
+ ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
+ LoadFlowResult result = runner.run(network, network.getVariantManager().getWorkingVariantId(),
CommonObjects.getComputationManager(), parameters, reportNode);
- return createLoadFlowComponentResultArrayPointer(result);
+ return createLoadFlowComponentResultArrayPointer(result);
+ }
});
}
@CEntryPoint(name = "createLoadFlowParameters")
public static LoadFlowParametersPointer createLoadFlowParameters(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> convertToLoadFlowParametersPointer(LoadFlowCUtils.createLoadFlowParameters()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public LoadFlowParametersPointer get() {
+ return convertToLoadFlowParametersPointer(LoadFlowCUtils.createLoadFlowParameters());
+ }
+ });
}
@CEntryPoint(name = "freeLoadFlowParameters")
public static void freeLoadFlowParameters(IsolateThread thread, LoadFlowParametersPointer loadFlowParametersPtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- freeLoadFlowParametersPointer(loadFlowParametersPtr);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeLoadFlowParametersPointer(loadFlowParametersPtr);
+ }
});
}
@@ -122,12 +156,12 @@ public static void freeLoadFlowParametersPointer(LoadFlowParametersPointer loadF
UnmanagedMemory.free(loadFlowParametersPtr);
}
- private static PyPowsyblApiHeader.ArrayPointer createLoadFlowComponentResultArrayPointer(LoadFlowResult result) {
+ private static ArrayPointer createLoadFlowComponentResultArrayPointer(LoadFlowResult result) {
List componentResults = result.getComponentResults();
- PyPowsyblApiHeader.LoadFlowComponentResultPointer componentResultPtr = UnmanagedMemory.calloc(componentResults.size() * SizeOf.get(PyPowsyblApiHeader.LoadFlowComponentResultPointer.class));
+ LoadFlowComponentResultPointer componentResultPtr = UnmanagedMemory.calloc(componentResults.size() * SizeOf.get(LoadFlowComponentResultPointer.class));
for (int index = 0; index < componentResults.size(); index++) {
LoadFlowResult.ComponentResult componentResult = componentResults.get(index);
- PyPowsyblApiHeader.LoadFlowComponentResultPointer ptr = componentResultPtr.addressOf(index);
+ LoadFlowComponentResultPointer ptr = componentResultPtr.addressOf(index);
ptr.setConnectedComponentNum(componentResult.getConnectedComponentNum());
ptr.setSynchronousComponentNum(componentResult.getSynchronousComponentNum());
ptr.setStatus(componentResult.getStatus().ordinal());
@@ -140,7 +174,7 @@ private static PyPowsyblApiHeader.ArrayPointer slackBusResults) {
+ private static void createSlackBusResultPtr(LoadFlowComponentResultPointer ptr, List slackBusResults) {
PyPowsyblApiHeader.SlackBusResultPointer slackBusResultPointer = UnmanagedMemory.calloc(slackBusResults.size() * SizeOf.get(PyPowsyblApiHeader.SlackBusResultPointer.class));
for (int i = 0; i < slackBusResults.size(); i++) {
LoadFlowResult.SlackBusResult slackBusResult = slackBusResults.get(i);
@@ -186,20 +220,26 @@ public static LoadFlowParametersPointer convertToLoadFlowParametersPointer(LoadF
}
@CEntryPoint(name = "getLoadFlowProviderParametersNames")
- public static PyPowsyblApiHeader.ArrayPointer getProviderParametersNames(IsolateThread thread, CCharPointer provider, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String providerStr = CTypeUtil.toString(provider);
- return Util.createCharPtrArray(LoadFlowCUtils.getLoadFlowProvider(providerStr).getSpecificParameters().stream().map(Parameter::getName).collect(Collectors.toList()));
+ public static ArrayPointer getProviderParametersNames(IsolateThread thread, CCharPointer provider, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ String providerStr = CTypeUtil.toString(provider);
+ return Util.createCharPtrArray(LoadFlowCUtils.getLoadFlowProvider(providerStr).getSpecificParameters().stream().map(Parameter::getName).collect(Collectors.toList()));
+ }
});
}
@CEntryPoint(name = "createLoadFlowProviderParametersSeriesArray")
- static PyPowsyblApiHeader.ArrayPointer createLoadFlowProviderParametersSeriesArray(IsolateThread thread, CCharPointer providerNamePtr,
- PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String providerName = CTypeUtil.toString(providerNamePtr);
- LoadFlowProvider provider = LoadFlowCUtils.getLoadFlowProvider(providerName);
- return Dataframes.createCDataframe(LoadFlowCUtils.SPECIFIC_PARAMETERS_MAPPER, provider);
+ static ArrayPointer createLoadFlowProviderParametersSeriesArray(IsolateThread thread, CCharPointer providerNamePtr,
+ PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ String providerName = CTypeUtil.toString(providerNamePtr);
+ LoadFlowProvider provider = LoadFlowCUtils.getLoadFlowProvider(providerName);
+ return Dataframes.createCDataframe(LoadFlowCUtils.SPECIFIC_PARAMETERS_MAPPER, provider);
+ }
});
}
diff --git a/java/src/main/java/com/powsybl/python/loadflow/validation/LoadFlowValidationCFunctions.java b/java/src/main/java/com/powsybl/python/loadflow/validation/LoadFlowValidationCFunctions.java
index 945ef005f6..b56d62db96 100644
--- a/java/src/main/java/com/powsybl/python/loadflow/validation/LoadFlowValidationCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/loadflow/validation/LoadFlowValidationCFunctions.java
@@ -14,9 +14,8 @@
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.loadflow.validation.ValidationConfig;
import com.powsybl.loadflow.validation.ValidationType;
-import com.powsybl.python.commons.Directives;
-import com.powsybl.python.commons.PyPowsyblApiHeader;
-import com.powsybl.python.commons.PyPowsyblConfiguration;
+import com.powsybl.python.commons.*;
+import com.powsybl.python.commons.Util.PointerProvider;
import com.powsybl.python.network.Dataframes;
import org.graalvm.nativeimage.IsolateThread;
import org.graalvm.nativeimage.ObjectHandle;
@@ -25,7 +24,6 @@
import org.graalvm.nativeimage.c.function.CEntryPoint;
import org.graalvm.nativeimage.UnmanagedMemory;
import org.graalvm.nativeimage.c.struct.SizeOf;
-import com.powsybl.python.commons.CTypeUtil;
import com.powsybl.python.loadflow.LoadFlowCUtils;
import com.powsybl.python.loadflow.LoadFlowCFunctions;
@@ -37,6 +35,7 @@
*
* @author Yichen TANG
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class LoadFlowValidationCFunctions {
@@ -48,9 +47,12 @@ public static ArrayPointer createLoadFlowValidationSeriesArray(Is
PyPowsyblApiHeader.ValidationType validationType,
PyPowsyblApiHeader.LoadFlowValidationParametersPointer loadFlowValidationParametersPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- return createLoadFlowValidationSeriesArray(network, validationType, loadFlowValidationParametersPtr);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ return createLoadFlowValidationSeriesArray(network, validationType, loadFlowValidationParametersPtr);
+ }
});
}
@@ -110,7 +112,12 @@ private static ArrayPointer createCDataFrame(InMemoryValidationWr
@CEntryPoint(name = "createValidationConfig")
public static LoadFlowValidationParametersPointer createValidationConfig(IsolateThread thread, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> convertToLoadFlowValidationParametersPointer(createValidationConfig()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public LoadFlowValidationParametersPointer get() {
+ return convertToLoadFlowValidationParametersPointer(createValidationConfig());
+ }
+ });
}
public static void copyToCLoadFlowValidationParameters(ValidationConfig parameters, LoadFlowValidationParametersPointer cParameters) {
@@ -140,7 +147,12 @@ public static LoadFlowValidationParametersPointer convertToLoadFlowValidationPar
@CEntryPoint(name = "freeValidationConfig")
public static void freeValidationConfig(IsolateThread thread, LoadFlowValidationParametersPointer loadFlowValidationParametersPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> freeLoadFlowValidationParametersPointer(loadFlowValidationParametersPtr));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeLoadFlowValidationParametersPointer(loadFlowValidationParametersPtr);
+ }
+ });
}
public static void freeLoadFlowValidationParametersPointer(LoadFlowValidationParametersPointer loadFlowValidationParametersPtr) {
diff --git a/java/src/main/java/com/powsybl/python/logging/LoggingCFunctions.java b/java/src/main/java/com/powsybl/python/logging/LoggingCFunctions.java
index 16f4762a53..f4936f8f39 100644
--- a/java/src/main/java/com/powsybl/python/logging/LoggingCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/logging/LoggingCFunctions.java
@@ -10,6 +10,7 @@
import ch.qos.logback.classic.Logger;
import com.powsybl.python.commons.Directives;
import com.powsybl.python.commons.PyPowsyblApiHeader;
+import com.powsybl.python.commons.Util.PointerProvider;
import org.graalvm.nativeimage.IsolateThread;
import org.graalvm.nativeimage.c.CContext;
import org.graalvm.nativeimage.c.function.CEntryPoint;
@@ -25,6 +26,7 @@
*
* @author Sylvain Leclerc
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class LoggingCFunctions {
@@ -40,14 +42,22 @@ public interface LoggerCallback extends CFunctionPointer {
@CEntryPoint(name = "setupLoggerCallback")
public static void setupLoggerCallback(IsolateThread thread, LoggerCallback fpointer, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> loggerCallback = fpointer);
+ doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CFunctionPointer get() {
+ return loggerCallback = fpointer;
+ }
+ });
}
@CEntryPoint(name = "setLogLevel")
public static void setLogLevel(IsolateThread thread, int logLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Logger powsyblLogger = (Logger) LoggerFactory.getLogger("com.powsybl");
- powsyblLogger.setLevel(PyLoggingUtil.pythonLevelToLogbackLevel(logLevel));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Logger powsyblLogger = (Logger) LoggerFactory.getLogger("com.powsybl");
+ powsyblLogger.setLevel(PyLoggingUtil.pythonLevelToLogbackLevel(logLevel));
+ }
});
}
}
diff --git a/java/src/main/java/com/powsybl/python/network/NetworkCFunctions.java b/java/src/main/java/com/powsybl/python/network/NetworkCFunctions.java
index c744a29faf..a87b24e5c3 100644
--- a/java/src/main/java/com/powsybl/python/network/NetworkCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/network/NetworkCFunctions.java
@@ -17,9 +17,9 @@
import com.powsybl.dataframe.DataframeFilter.AttributeFilterType;
import com.powsybl.dataframe.SeriesDataType;
import com.powsybl.dataframe.SeriesMetadata;
+import com.powsybl.dataframe.network.NetworkDataframeContext;
import com.powsybl.dataframe.network.NetworkDataframeMapper;
import com.powsybl.dataframe.network.NetworkDataframes;
-import com.powsybl.dataframe.network.NetworkDataframeContext;
import com.powsybl.dataframe.network.adders.AliasDataframeAdder;
import com.powsybl.dataframe.network.adders.NetworkElementAdders;
import com.powsybl.dataframe.network.extensions.NetworkExtensions;
@@ -66,6 +66,7 @@
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.util.*;
+import java.util.function.BooleanSupplier;
import java.util.zip.ZipOutputStream;
import static com.powsybl.nad.svg.SvgParameters.EdgeInfoEnum.*;
@@ -79,48 +80,67 @@
*
* @author Etienne Lesot
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class NetworkCFunctions {
- private static final ExportersLoader EXPORTERS_LOADER_SUPPLIER = new ExportersServiceLoader();
- private static final ImportersLoader IMPORTERS_LOADER_SUPPLIER = new ImportersServiceLoader();
-
private NetworkCFunctions() {
}
@CEntryPoint(name = "getNetworkImportFormats")
public static ArrayPointer getNetworkImportFormats(IsolateThread thread, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> createCharPtrArray(Importer.getFormats().stream().sorted().toList()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ return createCharPtrArray(Importer.getFormats().stream().sorted().toList());
+ }
+ });
}
@CEntryPoint(name = "getNetworkExportFormats")
public static ArrayPointer getNetworkExportFormats(IsolateThread thread, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> createCharPtrArray(Exporter.getFormats().stream().sorted().toList()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ return createCharPtrArray(Exporter.getFormats().stream().sorted().toList());
+ }
+ });
}
@CEntryPoint(name = "createNetwork")
public static ObjectHandle createNetwork(IsolateThread thread, CCharPointer name, CCharPointer id, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String networkName = CTypeUtil.toString(name);
- String networkId = CTypeUtil.toString(id);
- Network network = Networks.create(networkName, networkId);
- return ObjectHandles.getGlobal().create(network);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ String networkName = CTypeUtil.toString(name);
+ String networkId = CTypeUtil.toString(id);
+ Network network = Networks.create(networkName, networkId);
+ return ObjectHandles.getGlobal().create(network);
+ }
});
}
@CEntryPoint(name = "getNetworkMetadata")
public static NetworkMetadataPointer getNetworkMetadata(IsolateThread thread, ObjectHandle networkHandle,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- return createNetworkMetadata(network);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public NetworkMetadataPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ return createNetworkMetadata(network);
+ }
});
}
@CEntryPoint(name = "freeNetworkMetadata")
public static void freeNetworkMetadata(IsolateThread thread, NetworkMetadataPointer ptr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> freeNetworkMetadata(ptr));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeNetworkMetadata(ptr);
+ }
+ });
}
private static NetworkMetadataPointer createNetworkMetadata(Network network) {
@@ -144,15 +164,18 @@ private static void freeNetworkMetadata(NetworkMetadataPointer networkMetadataPo
public static ObjectHandle loadNetwork(IsolateThread thread, CCharPointer file, CCharPointerPointer parameterNamesPtrPtr, int parameterNamesCount,
CCharPointerPointer parameterValuesPtrPtr, int parameterValuesCount, ObjectHandle reportNodeHandle,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String fileStr = CTypeUtil.toString(file);
- Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- if (reportNode == null) {
- reportNode = ReportNode.NO_OP;
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ String fileStr = CTypeUtil.toString(file);
+ Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ if (reportNode == null) {
+ reportNode = ReportNode.NO_OP;
+ }
+ Network network = Network.read(Paths.get(fileStr), LocalComputationManager.getDefault(), ImportConfig.load(), parameters, new ImportersServiceLoader(), reportNode);
+ return ObjectHandles.getGlobal().create(network);
}
- Network network = Network.read(Paths.get(fileStr), LocalComputationManager.getDefault(), ImportConfig.load(), parameters, IMPORTERS_LOADER_SUPPLIER, reportNode);
- return ObjectHandles.getGlobal().create(network);
});
}
@@ -161,19 +184,22 @@ public static ObjectHandle loadNetworkFromString(IsolateThread thread, CCharPoin
CCharPointerPointer parameterNamesPtrPtr, int parameterNamesCount,
CCharPointerPointer parameterValuesPtrPtr, int parameterValuesCount,
ObjectHandle reportNodeHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String fileNameStr = CTypeUtil.toString(fileName);
- String fileContentStr = CTypeUtil.toString(fileContent);
- Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
- ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
- try (InputStream is = new ByteArrayInputStream(fileContentStr.getBytes(StandardCharsets.UTF_8))) {
- if (reportNode == null) {
- reportNode = ReportNode.NO_OP;
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ String fileNameStr = CTypeUtil.toString(fileName);
+ String fileContentStr = CTypeUtil.toString(fileContent);
+ Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
+ ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
+ try (InputStream is = new ByteArrayInputStream(fileContentStr.getBytes(StandardCharsets.UTF_8))) {
+ if (reportNode == null) {
+ reportNode = ReportNode.NO_OP;
+ }
+ Network network = Network.read(fileNameStr, is, LocalComputationManager.getDefault(), ImportConfig.load(), parameters, new ImportersServiceLoader(), reportNode);
+ return ObjectHandles.getGlobal().create(network);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
}
- Network network = Network.read(fileNameStr, is, LocalComputationManager.getDefault(), ImportConfig.load(), parameters, IMPORTERS_LOADER_SUPPLIER, reportNode);
- return ObjectHandles.getGlobal().create(network);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
}
});
}
@@ -182,39 +208,42 @@ public static ObjectHandle loadNetworkFromString(IsolateThread thread, CCharPoin
public static ObjectHandle loadNetworkFromBinaryBuffers(IsolateThread thread, CCharPointerPointer data, CIntPointer dataSizes, int bufferCount, CCharPointerPointer parameterNamesPtrPtr,
int parameterNamesCount, CCharPointerPointer parameterValuesPtrPtr, int parameterValuesCount, ObjectHandle reportNodeHandle,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- List bufferSizes = CTypeUtil.toIntegerList(dataSizes, bufferCount);
- List dataSourceList = new ArrayList<>();
- for (int i = 0; i < bufferCount; ++i) {
- ByteBuffer buffer = CTypeConversion.asByteBuffer(data.read(i), bufferSizes.get(i));
- Optional format = detectCompressionFormat(buffer);
- if (format.isPresent() && CompressionFormat.ZIP.equals(format.get())) {
- InMemoryZipFileDataSource ds = new InMemoryZipFileDataSource(binaryBufferToBytes(buffer));
- String commonBasename = null;
- try {
- for (String filename : ds.listNames(".*")) {
- String basename = DataSourceUtil.getBaseName(filename);
- commonBasename = commonBasename == null ? basename : StringUtils.getCommonPrefix(commonBasename, basename);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ List bufferSizes = CTypeUtil.toIntegerList(dataSizes, bufferCount);
+ List dataSourceList = new ArrayList<>();
+ for (int i = 0; i < bufferCount; ++i) {
+ ByteBuffer buffer = CTypeConversion.asByteBuffer(data.read(i), bufferSizes.get(i));
+ Optional format = detectCompressionFormat(buffer);
+ if (format.isPresent() && CompressionFormat.ZIP.equals(format.get())) {
+ InMemoryZipFileDataSource ds = new InMemoryZipFileDataSource(binaryBufferToBytes(buffer));
+ String commonBasename = null;
+ try {
+ for (String filename : ds.listNames(".*")) {
+ String basename = DataSourceUtil.getBaseName(filename);
+ commonBasename = commonBasename == null ? basename : StringUtils.getCommonPrefix(commonBasename, basename);
+ }
+ } catch (IOException e) {
+ throw new PowsyblException("Unsupported network data format in zip buffer.");
}
- } catch (IOException e) {
- throw new PowsyblException("Unsupported network data format in zip buffer.");
- }
- if (commonBasename != null) {
- ds.setBaseName(commonBasename);
+ if (commonBasename != null) {
+ ds.setBaseName(commonBasename);
+ }
+ dataSourceList.add(ds);
+ } else {
+ throw new PowsyblException("Network loading from memory buffer only supported with zipped networks.");
}
- dataSourceList.add(ds);
- } else {
- throw new PowsyblException("Network loading from memory buffer only supported with zipped networks.");
}
+ if (reportNode == null) {
+ reportNode = ReportNode.NO_OP;
+ }
+ MultipleReadOnlyDataSource dataSource = new MultipleReadOnlyDataSource(dataSourceList);
+ Network network = Network.read(dataSource, parameters, reportNode);
+ return ObjectHandles.getGlobal().create(network);
}
- if (reportNode == null) {
- reportNode = ReportNode.NO_OP;
- }
- MultipleReadOnlyDataSource dataSource = new MultipleReadOnlyDataSource(dataSourceList);
- Network network = Network.read(dataSource, parameters, reportNode);
- return ObjectHandles.getGlobal().create(network);
});
}
@@ -223,16 +252,19 @@ public static void saveNetwork(IsolateThread thread, ObjectHandle networkHandle,
CCharPointerPointer parameterNamesPtrPtr, int parameterNamesCount,
CCharPointerPointer parameterValuesPtrPtr, int parameterValuesCount,
ObjectHandle reportNodeHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String fileStr = CTypeUtil.toString(file);
- String formatStr = CTypeUtil.toString(format);
- Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- if (reportNode == null) {
- reportNode = ReportNode.NO_OP;
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String fileStr = CTypeUtil.toString(file);
+ String formatStr = CTypeUtil.toString(format);
+ Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ if (reportNode == null) {
+ reportNode = ReportNode.NO_OP;
+ }
+ network.write(new ExportersServiceLoader(), formatStr, parameters, Paths.get(fileStr), reportNode);
}
- network.write(EXPORTERS_LOADER_SUPPLIER, formatStr, parameters, Paths.get(fileStr), reportNode);
});
}
@@ -241,29 +273,32 @@ public static CCharPointer saveNetworkToString(IsolateThread thread, ObjectHandl
CCharPointerPointer parameterNamesPtrPtr, int parameterNamesCount,
CCharPointerPointer parameterValuesPtrPtr, int parameterValuesCount,
ObjectHandle reportNodeHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String formatStr = CTypeUtil.toString(format);
- Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
- MemDataSource dataSource = new MemDataSource();
- var exporter = Exporter.find(formatStr);
- if (exporter == null) {
- throw new PowsyblException("No exporter found for '" + formatStr + "' to export as a string");
- }
- ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
- exporter.export(network, parameters, dataSource, reportNode);
- try {
- var names = dataSource.listNames(".*?");
- if (names.size() != 1) {
- throw new PowsyblException("Currently we only support string export for single file format(ex, 'XIIDM').");
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String formatStr = CTypeUtil.toString(format);
+ Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
+ MemDataSource dataSource = new MemDataSource();
+ var exporter = Exporter.find(formatStr);
+ if (exporter == null) {
+ throw new PowsyblException("No exporter found for '" + formatStr + "' to export as a string");
}
- try (InputStream is = new ByteArrayInputStream(dataSource.getData(Iterables.getOnlyElement(names)));
- ByteArrayOutputStream os = new ByteArrayOutputStream()) {
- IOUtils.copy(is, os);
- return CTypeUtil.toCharPtr(os.toString());
+ ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
+ exporter.export(network, parameters, dataSource, reportNode);
+ try {
+ var names = dataSource.listNames(".*?");
+ if (names.size() != 1) {
+ throw new PowsyblException("Currently we only support string export for single file format(ex, 'XIIDM').");
+ }
+ try (InputStream is = new ByteArrayInputStream(dataSource.getData(Iterables.getOnlyElement(names)));
+ ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ IOUtils.copy(is, os);
+ return CTypeUtil.toCharPtr(os.toString());
+ }
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
}
- } catch (IOException e) {
- throw new UncheckedIOException(e);
}
});
}
@@ -273,33 +308,41 @@ public static ArrayPointer saveNetworkToBinaryBuffer(IsolateThread
CCharPointerPointer parameterNamesPtrPtr, int parameterNamesCount,
CCharPointerPointer parameterValuesPtrPtr, int parameterValuesCount,
ObjectHandle reportNodeHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String formatStr = CTypeUtil.toString(format);
- Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
- var exporter = Exporter.find(formatStr);
- if (exporter == null) {
- throw new PowsyblException("No exporter found for '" + formatStr + "' to export as a string");
- }
- ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
- // to support all kind of export: simple file or multiple to an archive,
- // best is to write to a zip file
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- try (ZipOutputStream zos = new ZipOutputStream(bos)) {
- DataSource dataSource = new ZipMemDataSource("file", zos);
- exporter.export(network, parameters, dataSource, reportNode);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String formatStr = CTypeUtil.toString(format);
+ Properties parameters = createParameters(parameterNamesPtrPtr, parameterNamesCount, parameterValuesPtrPtr, parameterValuesCount);
+ var exporter = Exporter.find(formatStr);
+ if (exporter == null) {
+ throw new PowsyblException("No exporter found for '" + formatStr + "' to export as a string");
+ }
+ ReportNode reportNode = ReportCUtils.getReportNode(reportNodeHandle);
+ // to support all kind of export: simple file or multiple to an archive,
+ // best is to write to a zip file
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ try (ZipOutputStream zos = new ZipOutputStream(bos)) {
+ DataSource dataSource = new ZipMemDataSource("file", zos);
+ exporter.export(network, parameters, dataSource, reportNode);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ byte[] bytes = bos.toByteArray();
+ return Util.createByteArray(bytes);
}
- byte[] bytes = bos.toByteArray();
- return Util.createByteArray(bytes);
});
}
@CEntryPoint(name = "freeNetworkBinaryBuffer")
public static void freeNetworkBinaryBuffer(IsolateThread thread, PyPowsyblApiHeader.ArrayPointer byteArrayPtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> freeArrayPointer(byteArrayPtr));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeArrayPointer(byteArrayPtr);
+ }
+ });
}
@CEntryPoint(name = "reduceNetwork")
@@ -310,31 +353,34 @@ public static void reduceNetwork(IsolateThread thread, ObjectHandle networkHandl
CIntPointer depthsPtr, int depthsCount,
boolean withDanglingLines,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- ReductionOptions options = new ReductionOptions();
- options.withDanglingLlines(withDanglingLines);
- List predicates = new ArrayList<>();
- if (vMax != Double.MAX_VALUE || vMin != 0) {
- predicates.add(new NominalVoltageNetworkPredicate(vMin, vMax));
- }
- if (idsCount != 0) {
- List ids = toStringList(idsPtrPtr, idsCount);
- predicates.add(new IdentifierNetworkPredicate(ids));
- }
- if (depthsCount != 0) {
- final List depths = CTypeUtil.toIntegerList(depthsPtr, depthsCount);
- final List voltageLeveles = toStringList(vlsPtrPtr, vlsCount);
- for (int i = 0; i < depths.size(); i++) {
- predicates.add(new SubNetworkPredicate(network.getVoltageLevel(voltageLeveles.get(i)), depths.get(i)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ ReductionOptions options = new ReductionOptions();
+ options.withDanglingLlines(withDanglingLines);
+ List predicates = new ArrayList<>();
+ if (vMax != Double.MAX_VALUE || vMin != 0) {
+ predicates.add(new NominalVoltageNetworkPredicate(vMin, vMax));
+ }
+ if (idsCount != 0) {
+ List ids = toStringList(idsPtrPtr, idsCount);
+ predicates.add(new IdentifierNetworkPredicate(ids));
+ }
+ if (depthsCount != 0) {
+ final List depths = CTypeUtil.toIntegerList(depthsPtr, depthsCount);
+ final List voltageLeveles = toStringList(vlsPtrPtr, vlsCount);
+ for (int i = 0; i < depths.size(); i++) {
+ predicates.add(new SubNetworkPredicate(network.getVoltageLevel(voltageLeveles.get(i)), depths.get(i)));
+ }
}
+ final OrNetworkPredicate orNetworkPredicate = new OrNetworkPredicate(predicates);
+ NetworkReducer.builder()
+ .withNetworkPredicate(orNetworkPredicate)
+ .withReductionOptions(options)
+ .build()
+ .reduce(network);
}
- final OrNetworkPredicate orNetworkPredicate = new OrNetworkPredicate(predicates);
- NetworkReducer.builder()
- .withNetworkPredicate(orNetworkPredicate)
- .withReductionOptions(options)
- .build()
- .reduce(network);
});
}
@@ -354,44 +400,59 @@ public static ArrayPointer getNetworkElementsIds(IsolateThr
CDoublePointer nominalVoltagePtr, int nominalVoltageCount,
CCharPointerPointer countryPtr, int countryCount, boolean mainCc, boolean mainSc,
boolean notConnectedToSameBusAtBothSides, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- Set nominalVoltages = new HashSet<>(CTypeUtil.toDoubleList(nominalVoltagePtr, nominalVoltageCount));
- Set countries = new HashSet<>(toStringList(countryPtr, countryCount));
- List elementsIds = NetworkUtil.getElementsIds(network, elementType, nominalVoltages, countries, mainCc, mainSc, notConnectedToSameBusAtBothSides);
- return createCharPtrArray(elementsIds);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ Set nominalVoltages = new HashSet<>(CTypeUtil.toDoubleList(nominalVoltagePtr, nominalVoltageCount));
+ Set countries = new HashSet<>(toStringList(countryPtr, countryCount));
+ List elementsIds = NetworkUtil.getElementsIds(network, elementType, nominalVoltages, countries, mainCc, mainSc, notConnectedToSameBusAtBothSides);
+ return createCharPtrArray(elementsIds);
+ }
});
}
@CEntryPoint(name = "cloneVariant")
public static void cloneVariant(IsolateThread thread, ObjectHandle networkHandle, CCharPointer src, CCharPointer variant, boolean mayOverwrite, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- network.getVariantManager().cloneVariant(CTypeUtil.toString(src), CTypeUtil.toString(variant), mayOverwrite);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ network.getVariantManager().cloneVariant(CTypeUtil.toString(src), CTypeUtil.toString(variant), mayOverwrite);
+ }
});
}
@CEntryPoint(name = "setWorkingVariant")
public static void setWorkingVariant(IsolateThread thread, ObjectHandle networkHandle, CCharPointer variant, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- network.getVariantManager().setWorkingVariant(CTypeUtil.toString(variant));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ network.getVariantManager().setWorkingVariant(CTypeUtil.toString(variant));
+ }
});
}
@CEntryPoint(name = "removeVariant")
public static void removeVariant(IsolateThread thread, ObjectHandle networkHandle, CCharPointer variant, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- network.getVariantManager().removeVariant(CTypeUtil.toString(variant));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ network.getVariantManager().removeVariant(CTypeUtil.toString(variant));
+ }
});
}
@CEntryPoint(name = "getVariantsIds")
public static ArrayPointer getVariantsIds(IsolateThread thread, ObjectHandle networkHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- return createCharPtrArray(List.copyOf(network.getVariantManager().getVariantIds()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ return createCharPtrArray(List.copyOf(network.getVariantManager().getVariantIds()));
+ }
});
}
@@ -417,11 +478,14 @@ public static ArrayPointer createNetworkElementsSeriesArray(Isola
boolean perUnit,
double nominalApparentPower,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return Util.doCatch(exceptionHandlerPtr, () -> {
- NetworkDataframeMapper mapper = NetworkDataframes.getDataframeMapper(convert(elementType));
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- DataframeFilter dataframeFilter = createDataframeFilter(filterAttributesType, attributesPtrPtr, attributesCount, selectedElementsDataframe);
- return Dataframes.createCDataframe(mapper, network, dataframeFilter, new NetworkDataframeContext(perUnit, nominalApparentPower));
+ return Util.doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ NetworkDataframeMapper mapper = NetworkDataframes.getDataframeMapper(convert(elementType));
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ DataframeFilter dataframeFilter = createDataframeFilter(filterAttributesType, attributesPtrPtr, attributesCount, selectedElementsDataframe);
+ return Dataframes.createCDataframe(mapper, network, dataframeFilter, new NetworkDataframeContext(perUnit, nominalApparentPower));
+ }
});
}
@@ -433,25 +497,32 @@ public static ArrayPointer createNetworkElemen
String name = CTypeUtil.toString(extensionName);
String tempName = CTypeUtil.toString(cTableName);
String tableName = tempName.isEmpty() ? null : tempName;
- return doCatch(exceptionHandlerPtr, () -> {
- NetworkDataframeMapper mapper = NetworkDataframes.getExtensionDataframeMapper(name, tableName);
- if (mapper != null) {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- return Dataframes.createCDataframe(mapper, network, new DataframeFilter(), NetworkDataframeContext.DEFAULT);
- } else {
- throw new PowsyblException("extension " + name + " not found");
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ NetworkDataframeMapper mapper = NetworkDataframes.getExtensionDataframeMapper(name, tableName);
+ if (mapper != null) {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ return Dataframes.createCDataframe(mapper, network, new DataframeFilter(), NetworkDataframeContext.DEFAULT);
+ } else {
+ throw new PowsyblException("extension " + name + " not found");
+ }
}
});
}
@CEntryPoint(name = "getExtensionsNames")
public static ArrayPointer getExtensionsNames(IsolateThread thread, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> createCharPtrArray(List.copyOf(NetworkExtensions.getExtensionsNames())));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return createCharPtrArray(List.copyOf(NetworkExtensions.getExtensionsNames()));
+ });
}
@CEntryPoint(name = "getExtensionsInformation")
public static ArrayPointer getExtensionsInformation(IsolateThread thread, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> NetworkExtensions.getExtensionInformation(NetworkDataframeContext.DEFAULT));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return NetworkExtensions.getExtensionInformation(NetworkDataframeContext.DEFAULT);
+ });
}
@CEntryPoint(name = "createElement")
@@ -459,14 +530,17 @@ public static void createElement(IsolateThread thread, ObjectHandle networkHandl
ElementType elementType,
DataframeArrayPointer cDataframes,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- DataframeElementType type = convert(elementType);
- List dataframes = new ArrayList<>();
- for (int i = 0; i < cDataframes.getDataframesCount(); i++) {
- dataframes.add(createDataframe(cDataframes.getDataframes().addressOf(i)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ DataframeElementType type = convert(elementType);
+ List dataframes = new ArrayList<>();
+ for (int i = 0; i < cDataframes.getDataframesCount(); i++) {
+ dataframes.add(createDataframe(cDataframes.getDataframes().addressOf(i)));
+ }
+ NetworkElementAdders.addElements(type, network, dataframes);
}
- NetworkElementAdders.addElements(type, network, dataframes);
});
}
@@ -475,11 +549,14 @@ public static void updateNetworkElementsWithSeries(IsolateThread thread, ObjectH
DataframePointer dataframe, boolean perUnit,
double nominalApparentPower,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- UpdatingDataframe updatingDataframe = createDataframe(dataframe);
- NetworkDataframes.getDataframeMapper(convert(elementType))
- .updateSeries(network, updatingDataframe, new NetworkDataframeContext(perUnit, nominalApparentPower));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ UpdatingDataframe updatingDataframe = createDataframe(dataframe);
+ NetworkDataframes.getDataframeMapper(convert(elementType))
+ .updateSeries(network, updatingDataframe, new NetworkDataframeContext(perUnit, nominalApparentPower));
+ }
});
}
@@ -487,46 +564,52 @@ public static void updateNetworkElementsWithSeries(IsolateThread thread, ObjectH
public static void removeAliases(IsolateThread thread, ObjectHandle networkHandle,
DataframePointer cDataframe,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- UpdatingDataframe dataframe = createDataframe(cDataframe);
- AliasDataframeAdder.deleteElements(network, dataframe);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ UpdatingDataframe dataframe = createDataframe(cDataframe);
+ AliasDataframeAdder.deleteElements(network, dataframe);
+ }
});
}
@CEntryPoint(name = "removeNetworkElements")
public static void removeNetworkElements(IsolateThread thread, ObjectHandle networkHandle, CCharPointerPointer cElementIds,
int elementCount, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- List elementIds = CTypeUtil.toStringList(cElementIds, elementCount);
- elementIds.forEach(elementId -> {
- Identifiable> identifiable = network.getIdentifiable(elementId);
- if (identifiable == null) {
- throw new PowsyblException(String.format("identifiable with id : %s was not found", elementId));
- }
- if (identifiable instanceof Connectable) {
- ((Connectable>) identifiable).remove();
- } else if (identifiable instanceof HvdcLine hvdcLine) {
- hvdcLine.remove();
- } else if (identifiable instanceof VoltageLevel voltageLevel) {
- voltageLevel.remove();
- } else if (identifiable instanceof Substation substation) {
- substation.remove();
- } else if (identifiable instanceof Switch sw) {
- VoltageLevel voltageLevel = sw.getVoltageLevel();
- switch (voltageLevel.getTopologyKind()) {
- case NODE_BREAKER -> voltageLevel.getNodeBreakerView().removeSwitch(identifiable.getId());
- case BUS_BREAKER -> voltageLevel.getBusBreakerView().removeSwitch(identifiable.getId());
- default ->
- throw new PowsyblException("this voltage level does not have a proper topology kind");
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ List elementIds = CTypeUtil.toStringList(cElementIds, elementCount);
+ elementIds.forEach(elementId -> {
+ Identifiable> identifiable = network.getIdentifiable(elementId);
+ if (identifiable == null) {
+ throw new PowsyblException(String.format("identifiable with id : %s was not found", elementId));
}
- } else if (identifiable instanceof TieLine tieLine) {
- tieLine.remove();
- } else {
- throw new PowsyblException(String.format("identifiable with id : %s can't be removed", identifiable.getId()));
- }
- });
+ if (identifiable instanceof Connectable) {
+ ((Connectable>) identifiable).remove();
+ } else if (identifiable instanceof HvdcLine hvdcLine) {
+ hvdcLine.remove();
+ } else if (identifiable instanceof VoltageLevel voltageLevel) {
+ voltageLevel.remove();
+ } else if (identifiable instanceof Substation substation) {
+ substation.remove();
+ } else if (identifiable instanceof Switch sw) {
+ VoltageLevel voltageLevel = sw.getVoltageLevel();
+ switch (voltageLevel.getTopologyKind()) {
+ case NODE_BREAKER -> voltageLevel.getNodeBreakerView().removeSwitch(identifiable.getId());
+ case BUS_BREAKER -> voltageLevel.getBusBreakerView().removeSwitch(identifiable.getId());
+ default ->
+ throw new PowsyblException("this voltage level does not have a proper topology kind");
+ }
+ } else if (identifiable instanceof TieLine tieLine) {
+ tieLine.remove();
+ } else {
+ throw new PowsyblException(String.format("identifiable with id : %s can't be removed", identifiable.getId()));
+ }
+ });
+ }
});
}
@@ -555,89 +638,116 @@ public static UpdatingDataframe createDataframe(DataframePointer dataframe) {
@CEntryPoint(name = "getNodeBreakerViewSwitches")
public static ArrayPointer getNodeBreakerViewSwitches(IsolateThread thread, ObjectHandle networkHandle, CCharPointer voltageLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel.NodeBreakerView nodeBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getNodeBreakerView();
- return Dataframes.createCDataframe(Dataframes.nodeBreakerViewSwitches(), nodeBreakerView);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ VoltageLevel.NodeBreakerView nodeBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getNodeBreakerView();
+ return Dataframes.createCDataframe(Dataframes.nodeBreakerViewSwitches(), nodeBreakerView);
+ }
});
}
@CEntryPoint(name = "getNodeBreakerViewNodes")
public static ArrayPointer getNodeBreakerViewNodes(IsolateThread thread, ObjectHandle networkHandle, CCharPointer voltageLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel.NodeBreakerView nodeBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getNodeBreakerView();
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ VoltageLevel.NodeBreakerView nodeBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getNodeBreakerView();
- return Dataframes.createCDataframe(Dataframes.nodeBreakerViewNodes(), nodeBreakerView);
+ return Dataframes.createCDataframe(Dataframes.nodeBreakerViewNodes(), nodeBreakerView);
+ }
});
}
@CEntryPoint(name = "getNodeBreakerViewInternalConnections")
public static ArrayPointer getNodeBreakerViewInternalConnections(IsolateThread thread, ObjectHandle networkHandle, CCharPointer voltageLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel.NodeBreakerView nodeBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getNodeBreakerView();
- return Dataframes.createCDataframe(Dataframes.nodeBreakerViewInternalConnection(), nodeBreakerView);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ VoltageLevel.NodeBreakerView nodeBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getNodeBreakerView();
+ return Dataframes.createCDataframe(Dataframes.nodeBreakerViewInternalConnection(), nodeBreakerView);
+ }
});
}
@CEntryPoint(name = "getBusBreakerViewSwitches")
public static PyPowsyblApiHeader.ArrayPointer getBusBreakerViewSwitches(IsolateThread thread, ObjectHandle networkHandle, CCharPointer voltageLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel.BusBreakerView busBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getBusBreakerView();
- return Dataframes.createCDataframe(Dataframes.busBreakerViewSwitches(), busBreakerView);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ VoltageLevel.BusBreakerView busBreakerView = network.getVoltageLevel(CTypeUtil.toString(voltageLevel)).getBusBreakerView();
+ return Dataframes.createCDataframe(Dataframes.busBreakerViewSwitches(), busBreakerView);
+ }
});
}
@CEntryPoint(name = "getBusBreakerViewBuses")
public static PyPowsyblApiHeader.ArrayPointer getBusBreakerViewBuses(IsolateThread thread, ObjectHandle networkHandle, CCharPointer voltageLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel voltageLevel1 = network.getVoltageLevel(CTypeUtil.toString(voltageLevel));
- return Dataframes.createCDataframe(Dataframes.busBreakerViewBuses(), voltageLevel1);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ VoltageLevel voltageLevel1 = network.getVoltageLevel(CTypeUtil.toString(voltageLevel));
+ return Dataframes.createCDataframe(Dataframes.busBreakerViewBuses(), voltageLevel1);
+ }
});
}
@CEntryPoint(name = "getBusBreakerViewElements")
public static PyPowsyblApiHeader.ArrayPointer getBusBreakerViewElements(IsolateThread thread, ObjectHandle networkHandle, CCharPointer voltageLevel, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel voltageLevel1 = network.getVoltageLevel(CTypeUtil.toString(voltageLevel));
- return Dataframes.createCDataframe(Dataframes.busBreakerViewElements(), voltageLevel1);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ VoltageLevel voltageLevel1 = network.getVoltageLevel(CTypeUtil.toString(voltageLevel));
+ return Dataframes.createCDataframe(Dataframes.busBreakerViewElements(), voltageLevel1);
+ }
});
}
@CEntryPoint(name = "merge")
public static ObjectHandle merge(IsolateThread thread, VoidPointerPointer networkHandles, int networkCount,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network[] networks = new Network[networkCount];
- for (int i = 0; i < networkCount; ++i) {
- ObjectHandle networkHandle = networkHandles.read(i);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- networks[i] = network;
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ Network[] networks = new Network[networkCount];
+ for (int i = 0; i < networkCount; ++i) {
+ ObjectHandle networkHandle = networkHandles.read(i);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ networks[i] = network;
+ }
+ return ObjectHandles.getGlobal().create(Network.merge(networks));
}
- return ObjectHandles.getGlobal().create(Network.merge(networks));
});
}
@CEntryPoint(name = "getSeriesMetadata")
public static DataframeMetadataPointer getSeriesMetadata(IsolateThread thread, ElementType elementType,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DataframeElementType type = convert(elementType);
- List seriesMetadata = NetworkDataframes.getDataframeMapper(type).getSeriesMetadata();
- return CTypeUtil.createSeriesMetadata(seriesMetadata);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframeMetadataPointer get() {
+ DataframeElementType type = convert(elementType);
+ List seriesMetadata = NetworkDataframes.getDataframeMapper(type).getSeriesMetadata();
+ return CTypeUtil.createSeriesMetadata(seriesMetadata);
+ }
});
}
@CEntryPoint(name = "freeDataframeMetadata")
public static void freeDataframeMetadata(IsolateThread thread, DataframeMetadataPointer metadata, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- freeDataframeMetadataContent(metadata);
- UnmanagedMemory.free(metadata);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeDataframeMetadataContent(metadata);
+ UnmanagedMemory.free(metadata);
+ }
});
}
@@ -645,56 +755,65 @@ public static void freeDataframeMetadata(IsolateThread thread, DataframeMetadata
public static DataframesMetadataPointer getCreationMetadata(IsolateThread thread,
ElementType elementType,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DataframeElementType type = convert(elementType);
- List> metadata = NetworkElementAdders.getAdder(type).getMetadata();
- DataframeMetadataPointer dataframeMetadataArray = UnmanagedMemory.calloc(metadata.size() * SizeOf.get(DataframeMetadataPointer.class));
- int i = 0;
- for (List dataframeMetadata : metadata) {
- CTypeUtil.createSeriesMetadata(dataframeMetadata, dataframeMetadataArray.addressOf(i));
- i++;
- }
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframesMetadataPointer get() {
+ DataframeElementType type = convert(elementType);
+ List> metadata = NetworkElementAdders.getAdder(type).getMetadata();
+ DataframeMetadataPointer dataframeMetadataArray = UnmanagedMemory.calloc(metadata.size() * SizeOf.get(DataframeMetadataPointer.class));
+ int i = 0;
+ for (List dataframeMetadata : metadata) {
+ CTypeUtil.createSeriesMetadata(dataframeMetadata, dataframeMetadataArray.addressOf(i));
+ i++;
+ }
- DataframesMetadataPointer res = UnmanagedMemory.calloc(SizeOf.get(DataframesMetadataPointer.class));
- res.setDataframesMetadata(dataframeMetadataArray);
- res.setDataframesCount(metadata.size());
- return res;
+ DataframesMetadataPointer res = UnmanagedMemory.calloc(SizeOf.get(DataframesMetadataPointer.class));
+ res.setDataframesMetadata(dataframeMetadataArray);
+ res.setDataframesCount(metadata.size());
+ return res;
+ }
});
}
@CEntryPoint(name = "freeDataframesMetadata")
public static void freeDataframesMetadata(IsolateThread thread, DataframesMetadataPointer cMetadata, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- for (int i = 0; i < cMetadata.getDataframesCount(); i++) {
- DataframeMetadataPointer cDataframeMetadata = cMetadata.getDataframesMetadata().addressOf(i);
- freeDataframeMetadataContent(cDataframeMetadata);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < cMetadata.getDataframesCount(); i++) {
+ DataframeMetadataPointer cDataframeMetadata = cMetadata.getDataframesMetadata().addressOf(i);
+ freeDataframeMetadataContent(cDataframeMetadata);
+ }
+ UnmanagedMemory.free(cMetadata.getDataframesMetadata());
+ UnmanagedMemory.free(cMetadata);
}
- UnmanagedMemory.free(cMetadata.getDataframesMetadata());
- UnmanagedMemory.free(cMetadata);
});
}
@CEntryPoint(name = "addNetworkElementProperties")
public static void addNetworkElementProperties(IsolateThread thread, ObjectHandle networkHandle, DataframePointer properties, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- UpdatingDataframe propertiesDataframe = createDataframe(properties);
- Objects.requireNonNull(propertiesDataframe);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- StringSeries idSerie = propertiesDataframe.getStrings("id");
- if (idSerie == null) {
- throw new PowsyblException("id is missing");
- }
- for (SeriesMetadata column : propertiesDataframe.getSeriesMetadata()) {
- if (!column.isIndex() && column.getType() == SeriesDataType.STRING) {
- String seriesName = column.getName();
- StringSeries columnSerie = propertiesDataframe.getStrings(seriesName);
- for (int i = 0; i < propertiesDataframe.getRowCount(); i++) {
- String id = idSerie.get(i);
- Identifiable> identifiable = network.getIdentifiable(id);
- if (identifiable != null) {
- identifiable.setProperty(seriesName, columnSerie.get(i));
- } else {
- throw new PowsyblException(String.format("identifiable with id : %s does not exist", id));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ UpdatingDataframe propertiesDataframe = createDataframe(properties);
+ Objects.requireNonNull(propertiesDataframe);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ StringSeries idSerie = propertiesDataframe.getStrings("id");
+ if (idSerie == null) {
+ throw new PowsyblException("id is missing");
+ }
+ for (SeriesMetadata column : propertiesDataframe.getSeriesMetadata()) {
+ if (!column.isIndex() && column.getType() == SeriesDataType.STRING) {
+ String seriesName = column.getName();
+ StringSeries columnSerie = propertiesDataframe.getStrings(seriesName);
+ for (int i = 0; i < propertiesDataframe.getRowCount(); i++) {
+ String id = idSerie.get(i);
+ Identifiable> identifiable = network.getIdentifiable(id);
+ if (identifiable != null) {
+ identifiable.setProperty(seriesName, columnSerie.get(i));
+ } else {
+ throw new PowsyblException(String.format("identifiable with id : %s does not exist", id));
+ }
}
}
}
@@ -704,11 +823,14 @@ public static void addNetworkElementProperties(IsolateThread thread, ObjectHandl
@CEntryPoint(name = "removeNetworkElementProperties")
public static void removeNetworkElementProperties(IsolateThread thread, ObjectHandle networkHandle, CCharPointerPointer idsPointer, int idsCount, CCharPointerPointer propertiesPointer, int propertiesCount, ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- List ids = CTypeUtil.toStringList(idsPointer, idsCount);
- List properties = CTypeUtil.toStringList(propertiesPointer, propertiesCount);
- ids.forEach(id -> properties.forEach(property -> network.getIdentifiable(id).removeProperty(property)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ List ids = CTypeUtil.toStringList(idsPointer, idsCount);
+ List properties = CTypeUtil.toStringList(propertiesPointer, propertiesCount);
+ ids.forEach(id -> properties.forEach(property -> network.getIdentifiable(id).removeProperty(property)));
+ }
});
}
@@ -739,20 +861,23 @@ private static void createSeriesMetadata(List metadata, Datafram
public static void updateNetworkElementsExtensionsWithSeries(IsolateThread thread, ObjectHandle networkHandle, CCharPointer namePtr,
CCharPointer tableNamePtr, DataframePointer dataframe,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- String name = CTypeUtil.toString(namePtr);
- String tmpName = CTypeUtil.toString(tableNamePtr);
- String tableName = tmpName.isEmpty() ? null : tmpName;
- NetworkDataframeMapper mapper = NetworkDataframes.getExtensionDataframeMapper(name, tableName);
- if (mapper != null) {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- UpdatingDataframe updatingDataframe = createDataframe(dataframe);
- mapper.updateSeries(network, updatingDataframe, NetworkDataframeContext.DEFAULT);
- } else {
- if (tableName != null) {
- throw new PowsyblException("table " + tableName + " of extension " + name + " not found");
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ String name = CTypeUtil.toString(namePtr);
+ String tmpName = CTypeUtil.toString(tableNamePtr);
+ String tableName = tmpName.isEmpty() ? null : tmpName;
+ NetworkDataframeMapper mapper = NetworkDataframes.getExtensionDataframeMapper(name, tableName);
+ if (mapper != null) {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ UpdatingDataframe updatingDataframe = createDataframe(dataframe);
+ mapper.updateSeries(network, updatingDataframe, NetworkDataframeContext.DEFAULT);
+ } else {
+ if (tableName != null) {
+ throw new PowsyblException("table " + tableName + " of extension " + name + " not found");
+ }
+ throw new PowsyblException("extension " + name + " not found");
}
- throw new PowsyblException("extension " + name + " not found");
}
});
}
@@ -762,27 +887,33 @@ public static void removeExtensions(IsolateThread thread, ObjectHandle networkHa
CCharPointer namePtr,
CCharPointerPointer idsPtr, int idsCount,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String name = CTypeUtil.toString(namePtr);
- List ids = CTypeUtil.toStringList(idsPtr, idsCount);
- NetworkExtensions.removeExtensions(network, name, ids);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String name = CTypeUtil.toString(namePtr);
+ List ids = CTypeUtil.toStringList(idsPtr, idsCount);
+ NetworkExtensions.removeExtensions(network, name, ids);
+ }
});
}
@CEntryPoint(name = "getExtensionSeriesMetadata")
public static DataframeMetadataPointer getExtensionSeriesMetadata(IsolateThread thread, CCharPointer namePtr, CCharPointer tableNamePtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String name = CTypeUtil.toString(namePtr);
- String tmpName = CTypeUtil.toString(tableNamePtr);
- String tableName = tmpName.equals("") ? null : tmpName;
- NetworkDataframeMapper mapper = NetworkDataframes.getExtensionDataframeMapper(name, tableName);
- if (mapper != null) {
- List seriesMetadata = mapper.getSeriesMetadata();
- return CTypeUtil.createSeriesMetadata(seriesMetadata);
- } else {
- throw new PowsyblException("extension " + name + " not found");
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframeMetadataPointer get() {
+ String name = CTypeUtil.toString(namePtr);
+ String tmpName = CTypeUtil.toString(tableNamePtr);
+ String tableName = tmpName.equals("") ? null : tmpName;
+ NetworkDataframeMapper mapper = NetworkDataframes.getExtensionDataframeMapper(name, tableName);
+ if (mapper != null) {
+ List seriesMetadata = mapper.getSeriesMetadata();
+ return CTypeUtil.createSeriesMetadata(seriesMetadata);
+ } else {
+ throw new PowsyblException("extension " + name + " not found");
+ }
}
});
}
@@ -792,14 +923,17 @@ public static void createExtensions(IsolateThread thread, ObjectHandle networkHa
CCharPointer namePtr,
DataframeArrayPointer cDataframes,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String name = CTypeUtil.toString(namePtr);
- List dataframes = new ArrayList<>();
- for (int i = 0; i < cDataframes.getDataframesCount(); i++) {
- dataframes.add(createDataframe(cDataframes.getDataframes().addressOf(i)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String name = CTypeUtil.toString(namePtr);
+ List dataframes = new ArrayList<>();
+ for (int i = 0; i < cDataframes.getDataframesCount(); i++) {
+ dataframes.add(createDataframe(cDataframes.getDataframes().addressOf(i)));
+ }
+ NetworkElementAdders.addExtensions(name, network, dataframes);
}
- NetworkElementAdders.addExtensions(name, network, dataframes);
});
}
@@ -807,66 +941,81 @@ public static void createExtensions(IsolateThread thread, ObjectHandle networkHa
public static DataframesMetadataPointer getExtensionsCreationMetadata(IsolateThread thread,
CCharPointer namePtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String name = CTypeUtil.toString(namePtr);
- List> metadata = NetworkElementAdders.getExtensionAdder(name).getMetadata();
- DataframeMetadataPointer dataframeMetadataArray = UnmanagedMemory.calloc(metadata.size() * SizeOf.get(DataframeMetadataPointer.class));
- int i = 0;
- for (List dataframeMetadata : metadata) {
- CTypeUtil.createSeriesMetadata(dataframeMetadata, dataframeMetadataArray.addressOf(i));
- i++;
- }
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframesMetadataPointer get() {
+ String name = CTypeUtil.toString(namePtr);
+ List> metadata = NetworkElementAdders.getExtensionAdder(name).getMetadata();
+ DataframeMetadataPointer dataframeMetadataArray = UnmanagedMemory.calloc(metadata.size() * SizeOf.get(DataframeMetadataPointer.class));
+ int i = 0;
+ for (List dataframeMetadata : metadata) {
+ CTypeUtil.createSeriesMetadata(dataframeMetadata, dataframeMetadataArray.addressOf(i));
+ i++;
+ }
- DataframesMetadataPointer res = UnmanagedMemory.calloc(SizeOf.get(DataframesMetadataPointer.class));
- res.setDataframesMetadata(dataframeMetadataArray);
- res.setDataframesCount(metadata.size());
- return res;
+ DataframesMetadataPointer res = UnmanagedMemory.calloc(SizeOf.get(DataframesMetadataPointer.class));
+ res.setDataframesMetadata(dataframeMetadataArray);
+ res.setDataframesCount(metadata.size());
+ return res;
+ }
});
}
@CEntryPoint(name = "createImporterParametersSeriesArray")
static ArrayPointer createImporterParametersSeriesArray(IsolateThread thread, CCharPointer formatPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String format = CTypeUtil.toString(formatPtr);
- Importer importer = Importer.find(format);
- if (importer == null) {
- throw new PowsyblException("Format '" + format + "' not supported");
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ String format = CTypeUtil.toString(formatPtr);
+ Importer importer = Importer.find(format);
+ if (importer == null) {
+ throw new PowsyblException("Format '" + format + "' not supported");
+ }
+ return Dataframes.createCDataframe(Dataframes.importerParametersMapper(), importer);
}
- return Dataframes.createCDataframe(Dataframes.importerParametersMapper(), importer);
});
}
@CEntryPoint(name = "createExporterParametersSeriesArray")
static ArrayPointer createExporterParametersSeriesArray(IsolateThread thread, CCharPointer formatPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String format = CTypeUtil.toString(formatPtr);
- var exporter = Exporter.find(format);
- if (exporter == null) {
- throw new PowsyblException("Format '" + format + "' not supported");
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ String format = CTypeUtil.toString(formatPtr);
+ var exporter = Exporter.find(format);
+ if (exporter == null) {
+ throw new PowsyblException("Format '" + format + "' not supported");
+ }
+ return Dataframes.createCDataframe(Dataframes.exporterParametersMapper(), exporter);
}
- return Dataframes.createCDataframe(Dataframes.exporterParametersMapper(), exporter);
});
}
@CEntryPoint(name = "updateSwitchPosition")
public static boolean updateSwitchPosition(IsolateThread thread, ObjectHandle networkHandle, CCharPointer id, boolean open,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String idStr = CTypeUtil.toString(id);
- return NetworkUtil.updateSwitchPosition(network, idStr, open);
+ return doCatch(exceptionHandlerPtr, new BooleanSupplier() {
+ @Override
+ public boolean getAsBoolean() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String idStr = CTypeUtil.toString(id);
+ return NetworkUtil.updateSwitchPosition(network, idStr, open);
+ }
});
}
@CEntryPoint(name = "updateConnectableStatus")
public static boolean updateConnectableStatus(IsolateThread thread, ObjectHandle networkHandle, CCharPointer id, boolean connected,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String idStr = CTypeUtil.toString(id);
- return NetworkUtil.updateConnectableStatus(network, idStr, connected);
+ return doCatch(exceptionHandlerPtr, new BooleanSupplier() {
+ @Override
+ public boolean getAsBoolean() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String idStr = CTypeUtil.toString(id);
+ return NetworkUtil.updateConnectableStatus(network, idStr, connected);
+ }
});
}
@@ -892,7 +1041,9 @@ public static SldParametersPointer convertToSldParametersPointer(SldParameters p
@CEntryPoint(name = "createSldParameters")
public static SldParametersPointer createSldParameters(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> convertToSldParametersPointer(SingleLineDiagramUtil.createSldParameters()));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return convertToSldParametersPointer(SingleLineDiagramUtil.createSldParameters());
+ });
}
public static NadParametersPointer convertToNadParametersPointer(NadParameters parameters) {
@@ -922,7 +1073,9 @@ public static void copyToCNadParameters(NadParameters parameters, NadParametersP
@CEntryPoint(name = "createNadParameters")
public static NadParametersPointer createNadParameters(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> convertToNadParametersPointer(NetworkAreaDiagramUtil.createNadParameters()));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return convertToNadParametersPointer(NetworkAreaDiagramUtil.createNadParameters());
+ });
}
public static void freeSldParametersPointer(SldParametersPointer sldParametersPtr) {
@@ -932,16 +1085,22 @@ public static void freeSldParametersPointer(SldParametersPointer sldParametersPt
@CEntryPoint(name = "freeSldParameters")
public static void freeSldParameters(IsolateThread thread, SldParametersPointer sldParametersPtr,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- freeSldParametersPointer(sldParametersPtr);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ freeSldParametersPointer(sldParametersPtr);
+ }
});
}
@CEntryPoint(name = "freeNadParameters")
public static void freeNadParameters(IsolateThread thread, NadParametersPointer nadParametersPointer,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- UnmanagedMemory.free(nadParametersPointer);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ UnmanagedMemory.free(nadParametersPointer);
+ }
});
}
@@ -996,13 +1155,16 @@ public static NadParameters convertNadParameters(NadParametersPointer nadParamet
public static void writeSingleLineDiagramSvg(IsolateThread thread, ObjectHandle networkHandle, CCharPointer containerId,
CCharPointer svgFile, CCharPointer metadataFile, SldParametersPointer sldParametersPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String containerIdStr = CTypeUtil.toString(containerId);
- String svgFileStr = CTypeUtil.toString(svgFile);
- String metadataFileStr = metadataFile.isNonNull() ? CTypeUtil.toString(metadataFile) : null;
- SldParameters sldParameters = convertSldParameters(sldParametersPtr);
- SingleLineDiagramUtil.writeSvg(network, containerIdStr, svgFileStr, metadataFileStr, sldParameters);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String containerIdStr = CTypeUtil.toString(containerId);
+ String svgFileStr = CTypeUtil.toString(svgFile);
+ String metadataFileStr = metadataFile.isNonNull() ? CTypeUtil.toString(metadataFile) : null;
+ SldParameters sldParameters = convertSldParameters(sldParametersPtr);
+ SingleLineDiagramUtil.writeSvg(network, containerIdStr, svgFileStr, metadataFileStr, sldParameters);
+ }
});
}
@@ -1011,37 +1173,46 @@ public static void writeMatrixMultiSubstationSingleLineDiagramSvg(IsolateThread
int substationIdCount, int substationIdRowCount,
CCharPointer svgFile, CCharPointer metadataFile, SldParametersPointer sldParametersPtr,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String[][] matrixIds = CTypeUtil.toString2DArray(substationIdsPointer, substationIdCount, substationIdRowCount);
- String svgFileStr = CTypeUtil.toString(svgFile);
- String metadataFileStr = metadataFile.isNonNull() ? CTypeUtil.toString(metadataFile) : null;
- SldParameters sldParameters = convertSldParameters(sldParametersPtr);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String[][] matrixIds = CTypeUtil.toString2DArray(substationIdsPointer, substationIdCount, substationIdRowCount);
+ String svgFileStr = CTypeUtil.toString(svgFile);
+ String metadataFileStr = metadataFile.isNonNull() ? CTypeUtil.toString(metadataFile) : null;
+ SldParameters sldParameters = convertSldParameters(sldParametersPtr);
- SingleLineDiagramUtil.writeMatrixMultiSubstationSvg(network, matrixIds, svgFileStr, metadataFileStr, sldParameters);
+ SingleLineDiagramUtil.writeMatrixMultiSubstationSvg(network, matrixIds, svgFileStr, metadataFileStr, sldParameters);
+ }
});
}
@CEntryPoint(name = "getSingleLineDiagramSvg")
public static CCharPointer getSingleLineDiagramSvg(IsolateThread thread, ObjectHandle networkHandle, CCharPointer containerId,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String containerIdStr = CTypeUtil.toString(containerId);
- String svg = SingleLineDiagramUtil.getSvg(network, containerIdStr);
- return CTypeUtil.toCharPtr(svg);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String containerIdStr = CTypeUtil.toString(containerId);
+ String svg = SingleLineDiagramUtil.getSvg(network, containerIdStr);
+ return CTypeUtil.toCharPtr(svg);
+ }
});
}
@CEntryPoint(name = "getSingleLineDiagramSvgAndMetadata")
public static ArrayPointer getSingleLineDiagramSvgAndMetadata(IsolateThread thread, ObjectHandle networkHandle, CCharPointer containerId,
SldParametersPointer sldParametersPtr, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String containerIdStr = CTypeUtil.toString(containerId);
- SldParameters sldParameters = convertSldParameters(sldParametersPtr);
- List svgAndMeta = SingleLineDiagramUtil.getSvgAndMetadata(network, containerIdStr, sldParameters);
- return createCharPtrArray(svgAndMeta);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String containerIdStr = CTypeUtil.toString(containerId);
+ SldParameters sldParameters = convertSldParameters(sldParametersPtr);
+ List svgAndMeta = SingleLineDiagramUtil.getSvgAndMetadata(network, containerIdStr, sldParameters);
+ return createCharPtrArray(svgAndMeta);
+ }
});
}
@@ -1049,18 +1220,23 @@ public static ArrayPointer getSingleLineDiagramSvgAndMetada
public static ArrayPointer getMatrixMultiSubstationSvgAndMetadata(IsolateThread thread, ObjectHandle networkHandle, CCharPointerPointer substationIdsPointer,
int substationIdCount, int substationIdRowCount,
SldParametersPointer sldParametersPtr, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String[][] matrixIds = CTypeUtil.toString2DArray(substationIdsPointer, substationIdCount, substationIdRowCount);
- SldParameters sldParameters = convertSldParameters(sldParametersPtr);
- List svgAndMeta = SingleLineDiagramUtil.getMatrixMultiSubstationSvgAndMetadata(network, matrixIds, sldParameters);
- return createCharPtrArray(svgAndMeta);
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String[][] matrixIds = CTypeUtil.toString2DArray(substationIdsPointer, substationIdCount, substationIdRowCount);
+ SldParameters sldParameters = convertSldParameters(sldParametersPtr);
+ List svgAndMeta = SingleLineDiagramUtil.getMatrixMultiSubstationSvgAndMetadata(network, matrixIds, sldParameters);
+ return createCharPtrArray(svgAndMeta);
+ }
});
}
@CEntryPoint(name = "getSingleLineDiagramComponentLibraryNames")
public static PyPowsyblApiHeader.ArrayPointer getSingleLineDiagramComponentLibraryNames(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> createCharPtrArray(SingleLineDiagramUtil.getComponentLibraryNames()));
+ return doCatch(exceptionHandlerPtr, () -> {
+ return createCharPtrArray(SingleLineDiagramUtil.getComponentLibraryNames());
+ });
}
@CEntryPoint(name = "writeNetworkAreaDiagramSvg")
@@ -1068,12 +1244,15 @@ public static void writeNetworkAreaDiagramSvg(IsolateThread thread, ObjectHandle
CCharPointerPointer voltageLevelIdsPointer, int voltageLevelIdCount, int depth,
double highNominalVoltageBound, double lowNominalVoltageBound, NadParametersPointer nadParametersPointer,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String svgFileStr = CTypeUtil.toString(svgFile);
- List voltageLevelIds = toStringList(voltageLevelIdsPointer, voltageLevelIdCount);
- NadParameters nadParameters = convertNadParameters(nadParametersPointer, network);
- NetworkAreaDiagramUtil.writeSvg(network, voltageLevelIds, depth, svgFileStr, highNominalVoltageBound, lowNominalVoltageBound, nadParameters);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String svgFileStr = CTypeUtil.toString(svgFile);
+ List voltageLevelIds = toStringList(voltageLevelIdsPointer, voltageLevelIdCount);
+ NadParameters nadParameters = convertNadParameters(nadParametersPointer, network);
+ NetworkAreaDiagramUtil.writeSvg(network, voltageLevelIds, depth, svgFileStr, highNominalVoltageBound, lowNominalVoltageBound, nadParameters);
+ }
});
}
@@ -1081,22 +1260,28 @@ public static void writeNetworkAreaDiagramSvg(IsolateThread thread, ObjectHandle
public static CCharPointer getNetworkAreaDiagramSvg(IsolateThread thread, ObjectHandle networkHandle, CCharPointerPointer voltageLevelIdsPointer,
int voltageLevelIdCount, int depth, double highNominalVoltageBound,
double lowNominalVoltageBound, NadParametersPointer nadParametersPointer, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- List voltageLevelIds = toStringList(voltageLevelIdsPointer, voltageLevelIdCount);
- NadParameters nadParameters = convertNadParameters(nadParametersPointer, network);
- String svg = NetworkAreaDiagramUtil.getSvg(network, voltageLevelIds, depth, highNominalVoltageBound, lowNominalVoltageBound, nadParameters);
- return CTypeUtil.toCharPtr(svg);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ List voltageLevelIds = toStringList(voltageLevelIdsPointer, voltageLevelIdCount);
+ NadParameters nadParameters = convertNadParameters(nadParametersPointer, network);
+ String svg = NetworkAreaDiagramUtil.getSvg(network, voltageLevelIds, depth, highNominalVoltageBound, lowNominalVoltageBound, nadParameters);
+ return CTypeUtil.toCharPtr(svg);
+ }
});
}
@CEntryPoint(name = "getNetworkAreaDiagramDisplayedVoltageLevels")
public static PyPowsyblApiHeader.ArrayPointer getNetworkAreaDiagramDisplayedVoltageLevels(IsolateThread thread, ObjectHandle networkHandle, CCharPointerPointer voltageLevelIdsPointer,
int voltageLevelIdCount, int depth, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- List voltageLevelIds = toStringList(voltageLevelIdsPointer, voltageLevelIdCount);
- return createCharPtrArray(NetworkAreaDiagramUtil.getDisplayedVoltageLevels(network, voltageLevelIds, depth));
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ List voltageLevelIds = toStringList(voltageLevelIdsPointer, voltageLevelIdCount);
+ return createCharPtrArray(NetworkAreaDiagramUtil.getDisplayedVoltageLevels(network, voltageLevelIds, depth));
+ }
});
}
@@ -1128,9 +1313,12 @@ public static ValidationLevelType validate(IsolateThread thread, ObjectHandle ne
public static void setMinValidationLevel(IsolateThread thread, ObjectHandle networkHandle,
ValidationLevelType levelType,
ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- network.setMinimumAcceptableValidationLevel(Util.convert(levelType));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ network.setMinimumAcceptableValidationLevel(Util.convert(levelType));
+ }
});
}
@@ -1139,42 +1327,51 @@ public static DataframesMetadataPointer getModificationMetadataWithElementType(I
NetworkModificationType networkModificationType,
ElementType elementType,
ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DataframeNetworkModificationType modificationType = convert(networkModificationType);
- DataframeElementType type = convert(elementType);
- List> metadata = NetworkModifications.getModification(modificationType).getMetadata(type);
- DataframeMetadataPointer dataframeMetadataArray = UnmanagedMemory.calloc(metadata.size() * SizeOf.get(DataframeMetadataPointer.class));
- int i = 0;
- for (List dataframeMetadata : metadata) {
- createSeriesMetadata(dataframeMetadata, dataframeMetadataArray.addressOf(i));
- i++;
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframesMetadataPointer get() {
+ DataframeNetworkModificationType modificationType = convert(networkModificationType);
+ DataframeElementType type = convert(elementType);
+ List> metadata = NetworkModifications.getModification(modificationType).getMetadata(type);
+ DataframeMetadataPointer dataframeMetadataArray = UnmanagedMemory.calloc(metadata.size() * SizeOf.get(DataframeMetadataPointer.class));
+ int i = 0;
+ for (List dataframeMetadata : metadata) {
+ createSeriesMetadata(dataframeMetadata, dataframeMetadataArray.addressOf(i));
+ i++;
+ }
+ DataframesMetadataPointer res = UnmanagedMemory.calloc(SizeOf.get(DataframesMetadataPointer.class));
+ res.setDataframesMetadata(dataframeMetadataArray);
+ res.setDataframesCount(metadata.size());
+ return res;
}
- DataframesMetadataPointer res = UnmanagedMemory.calloc(SizeOf.get(DataframesMetadataPointer.class));
- res.setDataframesMetadata(dataframeMetadataArray);
- res.setDataframesCount(metadata.size());
- return res;
});
}
@CEntryPoint(name = "getSubNetwork")
public static ObjectHandle getSubNetwork(IsolateThread thread, ObjectHandle networkHandle, CCharPointer subNetworkId, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String subNetworkIdStr = CTypeUtil.toString(subNetworkId);
- Network subnetwork = network.getSubnetwork(subNetworkIdStr);
- if (subnetwork == null) {
- throw new PowsyblException("Sub network '" + subNetworkIdStr + "' not found");
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String subNetworkIdStr = CTypeUtil.toString(subNetworkId);
+ Network subnetwork = network.getSubnetwork(subNetworkIdStr);
+ if (subnetwork == null) {
+ throw new PowsyblException("Sub network '" + subNetworkIdStr + "' not found");
+ }
+ return ObjectHandles.getGlobal().create(subnetwork);
}
- return ObjectHandles.getGlobal().create(subnetwork);
});
}
@CEntryPoint(name = "detachSubNetwork")
public static ObjectHandle detachSubNetwork(IsolateThread thread, ObjectHandle subNetworkHandle, ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network subNetwork = ObjectHandles.getGlobal().get(subNetworkHandle);
- Network detachNetwork = subNetwork.detach();
- return ObjectHandles.getGlobal().create(detachNetwork);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ Network subNetwork = ObjectHandles.getGlobal().get(subNetworkHandle);
+ Network detachNetwork = subNetwork.detach();
+ return ObjectHandles.getGlobal().create(detachNetwork);
+ }
});
}
}
diff --git a/java/src/main/java/com/powsybl/python/network/NetworkModificationsCFunctions.java b/java/src/main/java/com/powsybl/python/network/NetworkModificationsCFunctions.java
index 953ae1284f..5431529ece 100644
--- a/java/src/main/java/com/powsybl/python/network/NetworkModificationsCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/network/NetworkModificationsCFunctions.java
@@ -22,6 +22,9 @@
import com.powsybl.python.commons.CTypeUtil;
import com.powsybl.python.commons.Directives;
import com.powsybl.python.commons.PyPowsyblApiHeader;
+import com.powsybl.python.commons.PyPowsyblApiHeader.ArrayPointer;
+import com.powsybl.python.commons.PyPowsyblApiHeader.DataframeMetadataPointer;
+import com.powsybl.python.commons.PyPowsyblApiHeader.SeriesPointer;
import org.apache.commons.lang3.Range;
import org.graalvm.nativeimage.IsolateThread;
import org.graalvm.nativeimage.ObjectHandle;
@@ -32,6 +35,7 @@
import org.graalvm.nativeimage.c.type.CCharPointerPointer;
import org.graalvm.nativeimage.c.type.CIntPointer;
+import java.io.IOException;
import java.util.*;
import static com.powsybl.iidm.modification.topology.TopologyModificationUtils.*;
@@ -44,6 +48,7 @@
*
* @author Sylvain Leclerc
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class NetworkModificationsCFunctions {
@@ -51,38 +56,44 @@ private NetworkModificationsCFunctions() {
}
@CEntryPoint(name = "getConnectablesOrderPositions")
- public static PyPowsyblApiHeader.ArrayPointer getConnectablesOrderPositions(IsolateThread thread, ObjectHandle networkHandle,
- CCharPointer voltageLevelId, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String voltageLevelIdStr = CTypeUtil.toString(voltageLevelId);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
+ public static ArrayPointer getConnectablesOrderPositions(IsolateThread thread, ObjectHandle networkHandle,
+ CCharPointer voltageLevelId, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() throws IOException {
+ String voltageLevelIdStr = CTypeUtil.toString(voltageLevelId);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
- VoltageLevel voltageLevel = network.getVoltageLevel(voltageLevelIdStr);
- Map> feederPositionsOrders = getFeedersByConnectable(voltageLevel);
- return Dataframes.createCDataframe(Dataframes.feederMapMapper(), feederPositionsOrders);
+ VoltageLevel voltageLevel = network.getVoltageLevel(voltageLevelIdStr);
+ Map> feederPositionsOrders = getFeedersByConnectable(voltageLevel);
+ return Dataframes.createCDataframe(Dataframes.feederMapMapper(), feederPositionsOrders);
+ }
});
}
@CEntryPoint(name = "getUnusedConnectableOrderPositions")
- public static PyPowsyblApiHeader.ArrayPointer getUnusedConnectableOrderPositions(IsolateThread thread, ObjectHandle networkHandle,
+ public static ArrayPointer getUnusedConnectableOrderPositions(IsolateThread thread, ObjectHandle networkHandle,
CCharPointer busbarSectionId, CCharPointer beforeOrAfter,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- String busbarSectionIdStr = CTypeUtil.toString(busbarSectionId);
- BusbarSection busbarSection = network.getBusbarSection(busbarSectionIdStr);
- Optional> positionsOrders;
- if (CTypeUtil.toString(beforeOrAfter).equals("BEFORE")) {
- positionsOrders = getUnusedOrderPositionsBefore(busbarSection);
- } else {
- positionsOrders = getUnusedOrderPositionsAfter(busbarSection);
- }
- if (positionsOrders.isPresent()) {
- int max = positionsOrders.get().getMaximum();
- int min = positionsOrders.get().getMinimum();
- return createIntegerArray(Arrays.asList(min, max));
- } else {
- return createIntegerArray(Collections.emptyList());
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() throws IOException {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ String busbarSectionIdStr = CTypeUtil.toString(busbarSectionId);
+ BusbarSection busbarSection = network.getBusbarSection(busbarSectionIdStr);
+ Optional> positionsOrders;
+ if (CTypeUtil.toString(beforeOrAfter).equals("BEFORE")) {
+ positionsOrders = getUnusedOrderPositionsBefore(busbarSection);
+ } else {
+ positionsOrders = getUnusedOrderPositionsAfter(busbarSection);
+ }
+ if (positionsOrders.isPresent()) {
+ int max = positionsOrders.get().getMaximum();
+ int min = positionsOrders.get().getMinimum();
+ return createIntegerArray(Arrays.asList(min, max));
+ } else {
+ return createIntegerArray(Collections.emptyList());
+ }
}
});
}
@@ -93,26 +104,32 @@ public static void createNetworkModification(IsolateThread thread, ObjectHandle
PyPowsyblApiHeader.NetworkModificationType networkModificationType,
boolean throwException, ObjectHandle reportNodeHandle,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- List dfs = new ArrayList<>();
- for (int i = 0; i < cDataframes.getDataframesCount(); i++) {
- dfs.add(createDataframe(cDataframes.getDataframes().addressOf(i)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ List dfs = new ArrayList<>();
+ for (int i = 0; i < cDataframes.getDataframesCount(); i++) {
+ dfs.add(createDataframe(cDataframes.getDataframes().addressOf(i)));
+ }
+ DataframeNetworkModificationType type = convert(networkModificationType);
+ NetworkModifications.applyModification(type, network, dfs, throwException, reportNode);
}
- DataframeNetworkModificationType type = convert(networkModificationType);
- NetworkModifications.applyModification(type, network, dfs, throwException, reportNode);
});
}
@CEntryPoint(name = "getModificationMetadata")
- public static PyPowsyblApiHeader.DataframeMetadataPointer getModificationMetadata(IsolateThread thread,
+ public static DataframeMetadataPointer getModificationMetadata(IsolateThread thread,
PyPowsyblApiHeader.NetworkModificationType networkModificationType,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- DataframeNetworkModificationType type = convert(networkModificationType);
- List metadata = NetworkModifications.getModification(type).getMetadata();
- return CTypeUtil.createSeriesMetadata(metadata);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public DataframeMetadataPointer get() throws IOException {
+ DataframeNetworkModificationType type = convert(networkModificationType);
+ List metadata = NetworkModifications.getModification(type).getMetadata();
+ return CTypeUtil.createSeriesMetadata(metadata);
+ }
});
}
@@ -123,27 +140,30 @@ public static void removeElementsModification(IsolateThread thread, ObjectHandle
PyPowsyblApiHeader.RemoveModificationType removeModificationType,
boolean throwException, ObjectHandle reportNodeHandle,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- List ids = toStringList(connectableIdsPtrPtr, connectableIdsCount);
- Network network = ObjectHandles.getGlobal().get(networkHandle);
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- if (removeModificationType == PyPowsyblApiHeader.RemoveModificationType.REMOVE_FEEDER) {
- ids.forEach(id -> new RemoveFeederBayBuilder().withConnectableId(id).build().apply(network, throwException, reportNode == null ? ReportNode.NO_OP : reportNode));
- } else if (removeModificationType == PyPowsyblApiHeader.RemoveModificationType.REMOVE_VOLTAGE_LEVEL) {
- ids.forEach(id -> new RemoveVoltageLevelBuilder().withVoltageLevelId(id).build().apply(network, throwException, reportNode == null ? ReportNode.NO_OP : reportNode));
- } else if (removeModificationType == PyPowsyblApiHeader.RemoveModificationType.REMOVE_HVDC_LINE) {
- UpdatingDataframe extraDataDf = createDataframe(extraDataDfPtr);
- ids.forEach(hvdcId -> {
- List shuntCompensatorList = Collections.emptyList();
- if (extraDataDf != null) {
- Optional shuntCompensatorOptional = extraDataDf.getStringValue(hvdcId, 0);
- String shuntCompensator = shuntCompensatorOptional.isEmpty() || shuntCompensatorOptional.get().isEmpty() ? "," :
- shuntCompensatorOptional.get();
- shuntCompensatorList = Arrays.stream(shuntCompensator.split(",")).toList();
- }
- new RemoveHvdcLineBuilder().withHvdcLineId(hvdcId).withShuntCompensatorIds(shuntCompensatorList).build().apply(network, throwException, reportNode == null ? ReportNode.NO_OP : reportNode);
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ List ids = toStringList(connectableIdsPtrPtr, connectableIdsCount);
+ Network network = ObjectHandles.getGlobal().get(networkHandle);
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ if (removeModificationType == PyPowsyblApiHeader.RemoveModificationType.REMOVE_FEEDER) {
+ ids.forEach(id -> new RemoveFeederBayBuilder().withConnectableId(id).build().apply(network, throwException, reportNode == null ? ReportNode.NO_OP : reportNode));
+ } else if (removeModificationType == PyPowsyblApiHeader.RemoveModificationType.REMOVE_VOLTAGE_LEVEL) {
+ ids.forEach(id -> new RemoveVoltageLevelBuilder().withVoltageLevelId(id).build().apply(network, throwException, reportNode == null ? ReportNode.NO_OP : reportNode));
+ } else if (removeModificationType == PyPowsyblApiHeader.RemoveModificationType.REMOVE_HVDC_LINE) {
+ UpdatingDataframe extraDataDf = createDataframe(extraDataDfPtr);
+ ids.forEach(hvdcId -> {
+ List shuntCompensatorList = Collections.emptyList();
+ if (extraDataDf != null) {
+ Optional shuntCompensatorOptional = extraDataDf.getStringValue(hvdcId, 0);
+ String shuntCompensator = shuntCompensatorOptional.isEmpty() || shuntCompensatorOptional.get().isEmpty() ? "," :
+ shuntCompensatorOptional.get();
+ shuntCompensatorList = Arrays.stream(shuntCompensator.split(",")).toList();
+ }
+ new RemoveHvdcLineBuilder().withHvdcLineId(hvdcId).withShuntCompensatorIds(shuntCompensatorList).build().apply(network, throwException, reportNode == null ? ReportNode.NO_OP : reportNode);
- });
+ });
+ }
}
});
}
diff --git a/java/src/main/java/com/powsybl/python/report/ReportCFunctions.java b/java/src/main/java/com/powsybl/python/report/ReportCFunctions.java
index 2860e41861..d99325febd 100644
--- a/java/src/main/java/com/powsybl/python/report/ReportCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/report/ReportCFunctions.java
@@ -13,6 +13,7 @@
import com.powsybl.python.commons.CTypeUtil;
import com.powsybl.python.commons.Directives;
import com.powsybl.python.commons.PyPowsyblApiHeader;
+import com.powsybl.python.commons.Util.PointerProvider;
import org.graalvm.nativeimage.IsolateThread;
import org.graalvm.nativeimage.ObjectHandle;
import org.graalvm.nativeimage.ObjectHandles;
@@ -29,6 +30,7 @@
/**
* @author Sylvain Leclerc
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class ReportCFunctions {
@@ -37,38 +39,47 @@ private ReportCFunctions() {
@CEntryPoint(name = "createReportNode")
public static ObjectHandle createReportNode(IsolateThread thread, CCharPointer taskKeyPtr, CCharPointer defaultNamePtr, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- String taskKey = CTypeUtil.toString(taskKeyPtr);
- String defaultName = CTypeUtil.toString(defaultNamePtr);
- ReportNode reportNode = ReportNode.newRootReportNode()
- .withMessageTemplate(taskKey, defaultName)
- .build();
- return ObjectHandles.getGlobal().create(reportNode);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public ObjectHandle get() {
+ String taskKey = CTypeUtil.toString(taskKeyPtr);
+ String defaultName = CTypeUtil.toString(defaultNamePtr);
+ ReportNode reportNode = ReportNode.newRootReportNode()
+ .withMessageTemplate(taskKey, defaultName)
+ .build();
+ return ObjectHandles.getGlobal().create(reportNode);
+ }
});
}
@CEntryPoint(name = "printReport")
public static CCharPointer printReport(IsolateThread thread, ObjectHandle reportNodeHandle, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- StringWriter reportNodeOut = new StringWriter();
- reportNode.print(reportNodeOut);
- return CTypeUtil.toCharPtr(reportNodeOut.toString());
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() throws IOException {
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ StringWriter reportNodeOut = new StringWriter();
+ reportNode.print(reportNodeOut);
+ return CTypeUtil.toCharPtr(reportNodeOut.toString());
+ }
});
}
@CEntryPoint(name = "jsonReport")
public static CCharPointer jsonReport(IsolateThread thread, ObjectHandle reportNodeHandle, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> {
- ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
- StringWriter reportNodeOut = new StringWriter();
- ObjectMapper objectMapper = new ObjectMapper().registerModule(new ReportNodeJsonModule());
- try {
- objectMapper.writerWithDefaultPrettyPrinter().writeValue(reportNodeOut, reportNode);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ ReportNode reportNode = ObjectHandles.getGlobal().get(reportNodeHandle);
+ StringWriter reportNodeOut = new StringWriter();
+ ObjectMapper objectMapper = new ObjectMapper().registerModule(new ReportNodeJsonModule());
+ try {
+ objectMapper.writerWithDefaultPrettyPrinter().writeValue(reportNodeOut, reportNode);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ return CTypeUtil.toCharPtr(reportNodeOut.toString());
}
- return CTypeUtil.toCharPtr(reportNodeOut.toString());
});
}
}
diff --git a/java/src/main/java/com/powsybl/python/security/SecurityAnalysisCFunctions.java b/java/src/main/java/com/powsybl/python/security/SecurityAnalysisCFunctions.java
index 87f150ded6..be3d047f33 100644
--- a/java/src/main/java/com/powsybl/python/security/SecurityAnalysisCFunctions.java
+++ b/java/src/main/java/com/powsybl/python/security/SecurityAnalysisCFunctions.java
@@ -13,12 +13,13 @@
import com.powsybl.contingency.ContingencyContext;
import com.powsybl.iidm.network.Network;
import com.powsybl.python.commons.*;
-import com.powsybl.python.commons.PyPowsyblApiHeader.SecurityAnalysisParametersPointer;
+import com.powsybl.python.commons.PyPowsyblApiHeader.*;
import com.powsybl.python.contingency.ContingencyContainer;
import com.powsybl.python.loadflow.LoadFlowCFunctions;
import com.powsybl.python.loadflow.LoadFlowCUtils;
import com.powsybl.python.network.Dataframes;
import com.powsybl.security.*;
+import com.powsybl.security.LimitViolationType;
import com.powsybl.security.condition.*;
import com.powsybl.security.monitor.StateMonitor;
import com.powsybl.security.results.OperatorStrategyResult;
@@ -53,6 +54,7 @@
*
* @author Sylvain Leclerc
*/
+@SuppressWarnings({"java:S1602", "java:S1604"})
@CContext(Directives.class)
public final class SecurityAnalysisCFunctions {
@@ -64,20 +66,34 @@ private static Logger logger() {
}
@CEntryPoint(name = "getSecurityAnalysisProviderNames")
- public static PyPowsyblApiHeader.ArrayPointer getSecurityAnalysisProviderNames(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> createCharPtrArray(SecurityAnalysisProvider.findAll()
- .stream().map(SecurityAnalysisProvider::getName).toList()));
+ public static ArrayPointer getSecurityAnalysisProviderNames(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
+ return doCatch(exceptionHandlerPtr, new PointerProvider>() {
+ @Override
+ public ArrayPointer get() {
+ return createCharPtrArray(SecurityAnalysisProvider.findAll()
+ .stream().map(SecurityAnalysisProvider::getName).toList());
+ }
+ });
}
@CEntryPoint(name = "setDefaultSecurityAnalysisProvider")
public static void setDefaultSecurityAnalysisProvider(IsolateThread thread, CCharPointer provider, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () ->
- PyPowsyblConfiguration.setDefaultSecurityAnalysisProvider(CTypeUtil.toString(provider)));
+ doCatch(exceptionHandlerPtr, new Runnable() {
+ @Override
+ public void run() {
+ PyPowsyblConfiguration.setDefaultSecurityAnalysisProvider(CTypeUtil.toString(provider));
+ }
+ });
}
@CEntryPoint(name = "getDefaultSecurityAnalysisProvider")
public static CCharPointer getDefaultSecurityAnalysisProvider(IsolateThread thread, PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- return doCatch(exceptionHandlerPtr, () -> CTypeUtil.toCharPtr(PyPowsyblConfiguration.getDefaultSecurityAnalysisProvider()));
+ return doCatch(exceptionHandlerPtr, new PointerProvider() {
+ @Override
+ public CCharPointer get() {
+ return CTypeUtil.toCharPtr(PyPowsyblConfiguration.getDefaultSecurityAnalysisProvider());
+ }
+ });
}
@CEntryPoint(name = "addMonitoredElements")
@@ -87,56 +103,80 @@ public static void addMonitoredElements(IsolateThread thread, ObjectHandle secur
CCharPointerPointer threeWindingsTransformerIds, int threeWindingsTransformerIdsCount,
CCharPointerPointer contingencyIds, int contingencyIdsCount,
PyPowsyblApiHeader.ExceptionHandlerPointer exceptionHandlerPtr) {
- doCatch(exceptionHandlerPtr, () -> {
- SecurityAnalysisContext analysisContext = ObjectHandles.getGlobal().get(securityAnalysisContextHandle);
- List