diff --git a/glsk/glsk-document-cse/pom.xml b/glsk/glsk-document-cse/pom.xml
index 053b92c7..e47d3b30 100644
--- a/glsk/glsk-document-cse/pom.xml
+++ b/glsk/glsk-document-cse/pom.xml
@@ -14,6 +14,32 @@
GLSK document - CSE format
Model of GLSK according to CSE format with its importer.
+
+
+
+ org.codehaus.mojo
+ jaxb2-maven-plugin
+
+
+
+ xjc
+
+
+
+
+
+ src/main/resources/xsd/etso-code-lists.xsd
+ src/main/resources/xsd/etso-core-cmpts.xsd
+ src/main/resources/xsd/gsk-document.xsd
+
+
+ src/main/resources/xjb/binding.xjb
+
+
+
+
+
+
${project.groupId}
@@ -48,6 +74,15 @@
slf4j-simple
test
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+ com.sun.xml.bind
+ jaxb-impl
+ runtime
+
\ No newline at end of file
diff --git a/glsk/glsk-document-cse/src/main/java/com/powsybl/glsk/cse/BlockWrapper.java b/glsk/glsk-document-cse/src/main/java/com/powsybl/glsk/cse/BlockWrapper.java
new file mode 100644
index 00000000..3c87a3c4
--- /dev/null
+++ b/glsk/glsk-document-cse/src/main/java/com/powsybl/glsk/cse/BlockWrapper.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2023, RTE (http://www.rte-france.com)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+package com.powsybl.glsk.cse;
+
+import xsd.etso_core_cmpts.QuantityType;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * @author Vincent BOCHET {@literal }
+ */
+public final class BlockWrapper {
+ private final Object block;
+
+ public BlockWrapper(Object block) {
+ this.block = block;
+ }
+
+ public Object getBlock() {
+ return block;
+ }
+
+ public Optional getOrder() {
+ try {
+ BigInteger order = (BigInteger) block.getClass().getDeclaredField("order").get(block);
+ return Optional.ofNullable(order);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ return Optional.empty();
+ }
+ }
+
+ public Optional getMaximumShift() {
+ try {
+ QuantityType maximumShift = (QuantityType) block.getClass().getDeclaredField("maximumShift").get(block);
+ return Optional.ofNullable(maximumShift).map(QuantityType::getV);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ return Optional.empty();
+ }
+ }
+
+ public Optional getFactor() {
+ try {
+ QuantityType factor = (QuantityType) block.getClass().getDeclaredField("factor").get(block);
+ return Optional.ofNullable(factor).map(QuantityType::getV);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ return Optional.empty();
+ }
+ }
+
+ public Optional> getNodeList() {
+ try {
+ List