diff --git a/java/bundles/org.eclipse.set.application.test/pom.xml b/java/bundles/org.eclipse.set.application.test/pom.xml
new file mode 100644
index 0000000000..11c4fa71ec
--- /dev/null
+++ b/java/bundles/org.eclipse.set.application.test/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+ org.eclipse.set.application.test
+ eclipse-test-plugin
+
+
+ ../../
+ org.eclipse.set
+ org.eclipse.set.releng.parent
+ 2.6.0-SNAPSHOT
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+
+ properties
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ -javaagent:${org.mockito:mockito-core:jar}
+
+
+
+
+
\ No newline at end of file
diff --git a/java/bundles/org.eclipse.set.core.test/pom.xml b/java/bundles/org.eclipse.set.core.test/pom.xml
new file mode 100644
index 0000000000..5d8ac54772
--- /dev/null
+++ b/java/bundles/org.eclipse.set.core.test/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+ org.eclipse.set.core.test
+ eclipse-test-plugin
+
+
+ ../../
+ org.eclipse.set
+ org.eclipse.set.releng.parent
+ 2.6.0-SNAPSHOT
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+
+ properties
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ -javaagent:${org.mockito:mockito-core:jar}
+
+
+
+
+
\ No newline at end of file
diff --git a/java/bundles/org.eclipse.set.feature.plazmodel.test/pom.xml b/java/bundles/org.eclipse.set.feature.plazmodel.test/pom.xml
new file mode 100644
index 0000000000..b3b265729e
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.plazmodel.test/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+ org.eclipse.set.feature.plazmodel.test
+ eclipse-test-plugin
+
+
+ ../../
+ org.eclipse.set
+ org.eclipse.set.releng.parent
+ 2.6.0-SNAPSHOT
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+
+ properties
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ -javaagent:${org.mockito:mockito-core:jar}
+
+
+
+
+
\ No newline at end of file
diff --git a/java/bundles/org.eclipse.set.feature.siteplan.test/pom.xml b/java/bundles/org.eclipse.set.feature.siteplan.test/pom.xml
new file mode 100644
index 0000000000..b871abf618
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.siteplan.test/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+ org.eclipse.set.feature.siteplan.test
+ eclipse-test-plugin
+
+
+ ../../
+ org.eclipse.set
+ org.eclipse.set.releng.parent
+ 2.6.0-SNAPSHOT
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+
+ properties
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ -javaagent:${org.mockito:mockito-core:jar}
+
+
+
+
+
\ No newline at end of file
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/META-INF/MANIFEST.MF b/java/bundles/org.eclipse.set.feature.table.pt1.test/META-INF/MANIFEST.MF
index 461b98c866..16e02270fb 100644
--- a/java/bundles/org.eclipse.set.feature.table.pt1.test/META-INF/MANIFEST.MF
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/META-INF/MANIFEST.MF
@@ -4,8 +4,8 @@ Bundle-Name: Pt1 Table Test
Bundle-SymbolicName: org.eclipse.set.feature.table.pt1.test
Bundle-Vendor: Eclipse Signalling Engineering Toolbox
Bundle-Version: 2.6.0.qualifier
-Fragment-Host: org.eclipse.set.feature.table.pt1;bundle-version="0.1.0"
Automatic-Module-Name: org.eclipse.set.feature.table.pt1.test
+Bundle-Activator: org.eclipse.set.feature.table.pt1.test.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-21
Import-Package: com.google.common.util.concurrent,
@@ -15,16 +15,41 @@ Import-Package: com.google.common.util.concurrent,
org.apache.commons.collections4,
org.apache.commons.lang3,
org.apache.commons.lang3.reflect,
+ org.dom4j,
+ org.dom4j.io,
+ org.dom4j.util,
+ org.eclipse.e4.core.services.events,
+ org.eclipse.emf.edit.domain;version="[2.23.0,3.0.0)",
org.eclipse.set.application.cacheservice,
org.eclipse.set.application.geometry,
org.eclipse.set.application.graph,
+ org.eclipse.set.core,
+ org.eclipse.set.core.services.cache,
+ org.eclipse.set.core.services.enumtranslation,
+ org.eclipse.set.core.services.geometry,
+ org.eclipse.set.model.tablemodel,
+ org.eclipse.set.model.temporaryintegration,
+ org.eclipse.set.ppmodel.extensions.container,
+ org.eclipse.set.ppmodel.extensions.utils,
org.eclipse.set.unittest.utils,
org.eclipse.set.utils,
+ org.eclipse.set.utils.export.xsl,
+ org.eclipse.set.utils.table,
org.eclipse.swt.widgets,
org.jgrapht.graph,
org.jheaps.tree,
org.junit.jupiter.api,
+ org.junit.jupiter.api.extension;version="[5.12.0,6.0.0)",
org.junit.jupiter.api.function,
org.junit.jupiter.params,
- org.junit.jupiter.params.provider
-Require-Bundle: org.mockito.mockito-core
+ org.junit.jupiter.params.provider,
+ org.osgi.framework,
+ org.osgi.service.event,
+ org.osgi.test.common.annotation,
+ org.osgi.test.junit5.service;version="[1.2.0,2.0.0)"
+Require-Bundle: org.mockito.mockito-core,
+ org.eclipse.set.feature.table,
+ org.eclipse.set.feature.table.pt1,
+ org.eclipse.set.model.planpro,
+ org.eclipse.set.ppmodel.extensions,
+ org.eclipse.set.basis
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/pom.xml b/java/bundles/org.eclipse.set.feature.table.pt1.test/pom.xml
index 34a194726b..7f4ca89d0e 100644
--- a/java/bundles/org.eclipse.set.feature.table.pt1.test/pom.xml
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/pom.xml
@@ -3,10 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
-
- org.eclipse.set
org.eclipse.set.feature.table.pt1.test
- 2.6.0-SNAPSHOT
eclipse-test-plugin
@@ -15,41 +12,27 @@
org.eclipse.set.releng.parent
2.6.0-SNAPSHOT
-
+
- maven-resources-plugin
- 3.5.0
+ org.apache.maven.plugins
+ maven-dependency-plugin
- copy-news
- prepare-package
- copy-resources
+ properties
-
- ${basedir}/data/export/excel
-
-
- ${basedir}/../org.eclipse.set.feature/rootdir/data/export/excel
-
-
-
-
- maven-clean-plugin
- 3.5.0
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
-
-
- data
- false
-
-
+ -javaagent:${org.mockito:mockito-core:jar}
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssbb-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssbb-fop.xsl
new file mode 100644
index 0000000000..57773b018d
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssbb-fop.xsl
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJGrundsatzangabenWirkungBemerkungBezeichnungZugehörige Außenelement-
+ansteuerungBauartBefestigungBÜ-AnlageBÜ-EinschaltungBÜ-AusschaltungArtStreckekm.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssit-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssit-fop.xsl
new file mode 100644
index 0000000000..9528fc5445
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssit-fop.xsl
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRGrundsatzangabenBedien- und AnzeigeelementeBemerkungBezeichnungZugehörige Außenelement-
+ansteuerungBauartBefestigungMelderSchalterTasteNahstellbereichArtStreckekmAnforderung NbFertig-
+meldungWeichen-
+gruppeUmstellung WeicheUmstellung GleissperreUmstellung SignalFreigabe SchlüsselsperreAnschaltzeit HupesDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sska-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sska-fop.xsl
new file mode 100644
index 0000000000..187aec5391
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sska-fop.xsl
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWGrundsatzangabenVerknüpfungenIP-Adressangaben (DSTW)BemerkungBezeichnungArtBauartUnterbringungInformationEnergieBedienung (ZE)GFK-
+KategorieRegional-
+bereichAdressblock BlauAdressblock GrauArtOrtStreckekmTüranschlagprimärsekundärprimärsekundärlokalBezirk
+ZentraleNot-BPIPv4IPv6IPv4IPv6.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskf-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskf-fop.xsl
new file mode 100644
index 0000000000..0b220e1380
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskf-fop.xsl
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWGrundsatzangabenAuswertungFTGSNF-/TF-GSKSonstigesBemerkungBezeichnung FreimeldeabschnittTeilabschnittArtTypAEAÜbertragungLängeLängeBettungs-
+widerstand Rb'minWeiche, Kreuzung, GleissperreZuordnung Oberleitungsanlagezul. Geschwindig-
+keitHilfs-
+frei-
+meldungSchalt-
+funktionBez. Einzel-
+Ausw.vonnachTyplSl1l2l3elektr.beeinfl.SchaltgruppeBezeichnungmmmmmmΩ*kmkm/hDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskg-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskg-fop.xsl
new file mode 100644
index 0000000000..1b0efae199
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskg-fop.xsl
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMGrundsatzangabenAchszählpunkteStandortmerkmaleFunktionBemerkungBezeichnung GleisschaltmittelArtTypAnschluss Achszähl-
+rechnerAnschluss Energie-
+versorgungSchienen-
+profilBezugspunktStandortAEAAEASeparate AdernBezeichnungAbstandStreckekmmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssko-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssko-fop.xsl
new file mode 100644
index 0000000000..81cd3ee04c
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssko-fop.xsl
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVGrundsatzangabenSchlüsselFahrwegWeiche/Gleissperre/BÜSchlosskombination/SchlüsselsperreSonderanlageSchlüssel bei Technisch BerechtigtemBemerkungBezeichnung SchlossSchloss anIn Grundstellung
+eingeschlossenBezeichnungBartformGruppeBezeichnungVerschlossenes ElementSchlossartBezeichnungHaupt-
+schlossUnterbringungZugRangierBezeichnungLageAnbaulageOrtArtOrtStreckekm.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskp-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskp-fop.xsl
new file mode 100644
index 0000000000..8cbff00d72
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskp-fop.xsl
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZBezugPZB-SchutzstreckeGleismagneteINAGeschwindigkeitsüberwachungBemerkungBezugs-
+elementWirk-
+frequenzPZB-
+SchutzpunktGeschw.-
+klassePZB-
+SchutzstreckeWirk-
+samkeitggf. besondere Bedingungen für WirksamkeitAbstand zu
+Bezugselement/
+ZielsignalAbstand
+zu GM
+2000maßgeb.
+GefahrstelleAbstand zu
+maßgeb.
+GefahrstelleAbstand
+Bahnsteig
+zu GM 2000Abstand
+H-Tafel zu
+GM 2000
+[bis zu 4]Abstand Vorsignal-
+wdh. zu
+GM 2000Prüfdatum
+Wirkbereichs-
+bogenv Prüft PrüfMess-
+fehlerMess-
+streckeMontage-
+varianteBauformggf. Montage-
+ort des
+SchaltkastensEnergie-
+versorgungSollIstAnfangEndeHzkm/hmmmmmmmmmkm/hs%mDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskp_dm-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskp_dm-fop.xsl
new file mode 100644
index 0000000000..33fa23cb8c
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskp_dm-fop.xsl
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZBezugPZB-SchutzstreckeGleismagneteINAGeschwindigkeitsüberwachungBemerkungBezugs-
+elementWirk-
+frequenzPZB-
+SchutzpunktGeschw.-
+klassePZB-
+SchutzstreckeWirk-
+samkeitggf. besondere Bedingungen für WirksamkeitAbstand zu
+Bezugselement/
+ZielsignalAbstand
+zu GM
+2000maßgeb.
+GefahrstelleAbstand zu
+maßgeb.
+GefahrstelleAbstand
+Bahnsteig
+zu GM 2000Abstand
+H-Tafel zu
+GM 2000
+[bis zu 4]Abstand Vorsignal-
+wdh. zu
+GM 2000Prüfdatum
+Wirkbereichs-
+bogenv Prüft PrüfMess-
+fehlerMess-
+streckeMontage-
+varianteBauformggf. Montage-
+ort des
+SchaltkastensEnergie-
+versorgungSollIstAnfangEndeHzkm/hmmmmmmmmmkm/hs%mDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssks-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssks-fop.xsl
new file mode 100644
index 0000000000..88e05ee00b
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssks-fop.xsl
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZAAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXBezeichnung SignalSignal-ArtStandortmerkmaleKonstruktive MerkmaleAnschlussBezeichnung SignalSignalisierungSonstigesBemerkungReales SignalFunktion ohne SignalFiktives SignalStandortSonstige zulässige AnordnungLichtraum-
+profilÜber-
+höhungAbstand
+Mastmitte - Gleismitte
+(Gleisabstand)SichtbarkeitAusrichtungAnordnungObere Lichtpunkt-
+höheStreuscheibeFundamentSchaltkastenSeparater Schaltkasten SteuerungDauerhaft Nacht-
+schaltungSignalbegriffe
+(Schirm)Signalbegriffe
+(Zusatzanzeiger)Nach-
+geordnetes SignalMastschildWeitere
+(z. B. ETCS-Halttafel,
+Vorsignaltafel)Automatische FahrtstellungDunkel-
+schaltungDurchfahrt erlaubtBesetzte AusfahrtLöschung Zs 1/Zs 7ÜberwachungStreckekmLinksRechtsSollMindestIstEntfernungRichtpunktBefestigungRegelzeichnung
+Nr. (Bild)ArtStellungArt/
+Rz. Nr. (Bild)Höhe
+u. SOBezeichnungEntfernungBezeichnungHp, (Hl)Ks, (Vr)Zl,
+KlRa 12/
+Sh 1ZsZs 2Zs 2vZs 3Zs 3vZsZpKombinationRegelzeichnung
+Nr. (Bild)Zs 2Zs 2vmmmmmmmmmmmmmmmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskt-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskt-fop.xsl
new file mode 100644
index 0000000000..9f3ca43cd1
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskt-fop.xsl
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPGrundsatzangabenIP-AdressangabenBemerkungBezeichnung TSO/BSOArtBSOUnterbringungRegional-
+bereichBlauGrauTeilsystemArtOrtStreckekmIPv4IPv6IPv4IPv6ArtBlauGrau.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskw-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskw-fop.xsl
new file mode 100644
index 0000000000..aa32e267fc
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskw-fop.xsl
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZWeiche/Kreuzung/Gleissperre/SonderanlageFreimeldungVorzugslage/
+GrundstellungWeicheKreuzungHerzstückGleissperreSonstigesSonderanlageBemerkungBezeichnungArtFormFMAnicht grenzzeichenfreiIsolierfallLage/
+StellungAuto-
+matikAuffahr-
+ortungAnzahl (Lage) AntriebeWeichen-
+signalPrüf-
+kontakte
+(Zprk)zul. Geschwindigkeitzul. GeschwindigkeitAnzahl (Lage) AntriebeAnzahl AntriebeGsp-
+signalAuswurf-
+richtungSchutz-
+schieneRegelzeichnung
+Nr. (Bild)DWSArtLinks mitRechts mitLinksRechtsLinksRechtsStStkm/hkm/hkm/hkm/hStStDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskx-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskx-fop.xsl
new file mode 100644
index 0000000000..db0be33749
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskx-fop.xsl
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOBezeichnung
+SignalStandortmerkmaleKonstruktive MerkmaleSignalisierungBemerkungStandortLichtraum-profilÜber-höhungAbstand
+Mastmitte - Gleismitte
+(Gleisabstand)AnordnungFundamentSignalbegriffStreckekmGleisLinksRechtsBefestigungRegelzeichnung
+Nr. (Bild)Art/
+Rz. Nr. (Bild)Höhe
+u. SOBezeichnung (Symbol)Regelzeichnung
+Nr. (Bild)mmmmmmmmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskz-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskz-fop.xsl
new file mode 100644
index 0000000000..6d8f6a977d
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sskz-fop.xsl
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIBetrieblicher Bezeichner
+FEAxBetrieblicher Bezeichner
+FeldelementTechnischer Bezeichner
+Object ControllerTüranschlagMontageÜberhöhungAbstand
+Mitte FEAx - Gleismitte
+(Gleisabstand)BlattnummerBemerkungmmmmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssla-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssla-fop.xsl
new file mode 100644
index 0000000000..1915864d89
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssla-fop.xsl
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGGrundsatzangabenUnterwegssignal
+(bei Zugstraßen mit D-Weg)BemerkungBezeichnungFahrwegD-Weg
+ZielArtStartZiel.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslb-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslb-fop.xsl
new file mode 100644
index 0000000000..dd24df31a3
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslb-fop.xsl
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYStreckeGrundsatzangabenErlaubnisBlockmeldungAkustische MeldungAwanstBemerkungNummerGleisRegel-/
+GegengleisStrecken-
+zielBetriebsführungVonNachBlock-
+schaltung
+Schutz-
+über-
+tragerStändig vorhandenHolenRücklauf autom. Abgabe-speicherungAbhängigkeit Durchrutschweg/ RangierzielsperreAnrückabschnittZugschluss-meldungRäumungs-prüfungVorblock-weckerRückblock-weckerBezeichnung (Bedienung von)Betriebs-stelleBauformStrecken-
+freimeldungBetriebs-
+stelleBauformBezeichnungAnordnung.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssld-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssld-fop.xsl
new file mode 100644
index 0000000000..edfbec5bcd
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssld-fop.xsl
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTGrundsatzangabenEigenschaftenAbhängigkeitenAuflösungBemerkungvon
+(Signal)bis
+(markanter Punkt)GefahrpunktPZB-
+SchutzpunktBezeichnungv Ziel
+möglichLängeMaßgebende
+NeigungWeichen, Kreuzungenrelevante
+FmAv-
+Aufwertung
+VerzichtErlaubnis-
+abhängigManuellAuflöseabschnitt (im Zielgleis)Auflöseverzögerung bzw. Kennlicht-
+verzögerungszeitSollIstFrei-
+gemeldetmit Verschlussohne VerschlussBezeichnungBemessungslängekm/hmmm‰msDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslf-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslf-fop.xsl
new file mode 100644
index 0000000000..ab9af4c917
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslf-fop.xsl
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMFlankenschutzanfordererUnmittelbarer FlankenschutzFlankenschutzweitergabeTechnischer
+VerzichtFlankenschutzraumBemerkungBezeichnung Weiche/NbW-Lage/
+Nb-GrenzeWeiche/GleissperreSignalWeiche/Kreuzungfreigemeldetnicht freigemeldetBezeichnungLageZwieschutzBezeichnungRangierziel-
+sperreBezeichnungwie Fahrt über.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssli-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssli-fop.xsl
new file mode 100644
index 0000000000..e853813003
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssli-fop.xsl
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHGrundsatzangabenAusschluss gleichzeitiger FahrtenBemerkungBezeichnung InselgleisLängeBegrenzende SignaleZugausfahrtRangierfahrtP/Y-RichtungN/X-RichtungEinfahrtAusfahrtmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssln-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssln-fop.xsl
new file mode 100644
index 0000000000..3193298a52
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssln-fop.xsl
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNGrundsatzangabenUnterstellungsverhältnisGrenzeElementNahstellbereich RBemerkungBereich/ZoneArtunterge-
+ordnet zuRang der ZuschaltungAuflösung Grenze zu übergeordneter ZoneBezeichnung
+(Element innen, außen)Weiche/GleissperreSignalSchlüsselsperreBedieneinrichtungBedienungshandlungfrei stellbar (Rückgabevoraussetzung)verschlossenfrei stellbar (Rückgabevoraussetzung)Kennlicht.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslr-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslr-fop.xsl
new file mode 100644
index 0000000000..3968b86a54
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslr-fop.xsl
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQGrundsatzangabenEinstellungAbhängigkeitenBemerkungBezeichnungFahrwegArtAutom.
+EinstellungF-
+BedienungInselgleisGleisfrei-
+meldungFahrwegweichen
+mit FlankenschutzÜberwachte Ssp (Auflösung Zielgleis)Abhängiger
+BÜZiel
+erlaubnis-
+abhängigAuflösung
+nicht angefahrener
+FahrstraßenStartZielNr.Entscheidungsweiche
+mit StellungBezeichnungGegenfahrt-
+ausschluss.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssls-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssls-fop.xsl
new file mode 100644
index 0000000000..31aad65f03
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssls-fop.xsl
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHSignalisierungs-
+abschnitt(e)Signal /
+SignalisierungKs / Hp / Hl / Ra / ShKenn- / ZusatzlichtGeschwindigkeitsanzeigerGeschwindigkeitsvoranzeigerRichtungsanzeigerRichtungsvoranzeigerZs _Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslw-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslw-fop.xsl
new file mode 100644
index 0000000000..4387f60ef9
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslw-fop.xsl
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPWeiche/Kreuzung
+in angeforderter StellungArtVerschlussErsatzschutz unmittelbarErsatzschutz WeitergabeTechnischer
+VerzichtFlankenschutzraumNachlauf-
+verhinderungBemerkungEigenEchtWeiche/GleissperreSignalWeiche/Kreuzungfreigemeldetnicht freigemeldetBezeichnungLageZwieschutzBezeichnungRangier-
+zielsperreBezeichnungwie Fahrt
+über.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslz-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslz-fop.xsl
new file mode 100644
index 0000000000..7b8f696444
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sslz-fop.xsl
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFGrundsatzangabenEinstellungAbhängigkeitenSignalisierungBemerkungBezeichnungFahrwegD-WegArtAutom. Einstel-
+lungF-
+Bedie-
+nungInselgleisÜberwachte SspAbhän-
+giger
+BÜNichthaltfall-
+abschnitt2. Haltfall-
+kriteriumAnnäherungs-
+verschlussGeschwindigkeit am StartsignalSonstiges am StartsignalIm FahrwegStartZielNr.Entscheidungs-
+weiche
+mit StellungBezeich-
+nung (*Vorzug)HgFahr-
+wegD-WegBeson-
+dersZs 3
+(Zs 3 Ziel)Aufwertung
+bei MwtfstrZlZs 3vZs 2Zs 2vZs 6Zs 13Zs 3Zs 6Kennlicht anVorsigna-
+lisierung Zielkm/hkm/hkm/hkm/hDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssvu-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssvu-fop.xsl
new file mode 100644
index 0000000000..e7e7cb1895
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssvu-fop.xsl
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHGrundsatzangabenTechnikBemerkungvonnachVerwendungNetzartTechnikartSchnittstelleBandbreite.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssza-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssza-fop.xsl
new file mode 100644
index 0000000000..ecebc9ab14
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/ssza-fop.xsl
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNODatenpunkt (DP)Bezugspunkt (BP)DP-Standort (Balise a)Rel. Lage
+b zu aBemerkungNID_CNID_BGGesteuertAnzahl BalisenTypBezeichnungStandortRel. Lage
+zu BP
+StellbereichETCS-GleiskanteStreckeKmStreckeKmmmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sszs-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sszs-fop.xsl
new file mode 100644
index 0000000000..37a738dcc8
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sszs-fop.xsl
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAHSignalSignalisierungETCS-GefahrpunktKürzester DurchrutschwegSonstige FunktionenTunnelbegegnungs-
+verbot (TBV)AnsteuerungBemerkungBezeichnungArtStandortZs 1Zs 2Zs 3Zs 6Zs 7Zs 8Löschg. Zs 1/7/8Zs 13KlNe 14BezeichnungAb-
+stand
+vom
+Signal< 50 m50 bis
+ < 200 m≥ 200 mDunkel-
+schalt-
+anstoßAutom.
+Fahrt-
+stellungDEndEin-
+stieg
+erlaubtAus-
+stieg
+bei
+ETCS-
+SperredHaltfallHaltfall-
+kriterium 2ZSSMelde-
+punktLänge
+Tunnel-
+bereich
+(Portal-
+signal)Tunnel-
+signalESTW-
+ZEStell-
+bereichkeine
+Über-
+trag. an
+RBCStreckekmmmmmmmmDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sszw-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sszw-fop.xsl
new file mode 100644
index 0000000000..2e3245ebd1
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sszw-fop.xsl
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDEFGHIJKLMNOWeiche/KreuzungZulässige GeschwindigkeitAnsteuerungkeine
+Übertrag.
+an RBCBemerkungBezeichnungGrundformStandortLängeWeicheKreuzungESTW-ZentraleinheitStellbereichArtFormStreckekmLinksRechtsLinksRechtsLinksRechtsmmkm/hkm/hkm/hkm/hDie Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sxxx-fop.xsl b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sxxx-fop.xsl
new file mode 100644
index 0000000000..932afb5289
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/res/xsl/sxxx-fop.xsl
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+ 20mm
+ 10mm
+ 0mm
+ 0mm
+ 297mm
+ 420mm
+
+
+
+ center
+ center
+
+
+
+
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ABCDBearbeitungsvermerkReferenziert von ObjektAusgabe in PlanKurztextInhalt.Die Tabelle ist leer
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Activator.java b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Activator.java
new file mode 100644
index 0000000000..bffbfd2d71
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Activator.java
@@ -0,0 +1,27 @@
+package org.eclipse.set.feature.table.pt1.test;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext bundleContext;
+
+ /**
+ * @return the bundle context
+ */
+ public static BundleContext getContext() {
+ return bundleContext;
+ }
+
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ bundleContext = context;
+ }
+
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ bundleContext = null;
+ }
+
+}
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTest.java b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTest.java
index bd0be70e5c..be2b4df3b2 100644
--- a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTest.java
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTest.java
@@ -10,72 +10,35 @@
*/
package org.eclipse.set.feature.table.pt1.test;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.HashMap;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.Comparator;
+import java.util.Dictionary;
+import java.util.Hashtable;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
+import java.util.stream.Stream;
-import org.apache.commons.lang3.reflect.FieldUtils;
-import org.eclipse.emf.common.util.Enumerator;
-import org.eclipse.set.application.cacheservice.CacheServiceImpl;
-import org.eclipse.set.application.geometry.GeoKanteGeometryServiceImpl;
-import org.eclipse.set.application.geometry.GeoKanteGeometrySessionData;
-import org.eclipse.set.application.graph.BankServiceImpl;
-import org.eclipse.set.application.graph.BankingInformationSession;
-import org.eclipse.set.application.graph.TopologicalGraphServiceImpl;
-import org.eclipse.set.basis.Translateable;
+import org.eclipse.e4.core.services.events.IEventBroker;
+import org.eclipse.set.basis.IModelSession;
import org.eclipse.set.basis.constants.ContainerType;
+import org.eclipse.set.basis.constants.Events;
+import org.eclipse.set.basis.files.ToolboxFile;
import org.eclipse.set.basis.files.ToolboxFileRole;
-import org.eclipse.set.core.services.Services;
-import org.eclipse.set.core.services.cache.CacheService;
-import org.eclipse.set.core.services.enumtranslation.EnumTranslation;
-import org.eclipse.set.core.services.enumtranslation.EnumTranslationService;
-import org.eclipse.set.core.services.geometry.GeoKanteGeometryService;
-import org.eclipse.set.feature.table.PlanPro2TableTransformationService;
-import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableTransformationService;
-import org.eclipse.set.feature.table.pt1.messages.Messages;
-import org.eclipse.set.feature.table.pt1.ssbb.SsbbTransformationService;
-import org.eclipse.set.feature.table.pt1.ssit.SsitTransformationService;
-import org.eclipse.set.feature.table.pt1.sska.SskaTransformationService;
-import org.eclipse.set.feature.table.pt1.sskf.SskfTransformationService;
-import org.eclipse.set.feature.table.pt1.sskg.SskgTransformationService;
-import org.eclipse.set.feature.table.pt1.ssko.SskoTransformationService;
-import org.eclipse.set.feature.table.pt1.sskp.SskpTransformationService;
-import org.eclipse.set.feature.table.pt1.sskp.dm.SskpDmTransformationService;
-import org.eclipse.set.feature.table.pt1.ssks.SsksTransformationService;
-import org.eclipse.set.feature.table.pt1.sskt.SsktTransformationService;
-import org.eclipse.set.feature.table.pt1.sskw.SskwTransformationService;
-import org.eclipse.set.feature.table.pt1.sskx.SskxTransformationService;
-import org.eclipse.set.feature.table.pt1.sskz.SskzTransformationService;
-import org.eclipse.set.feature.table.pt1.ssla.SslaTransformationService;
-import org.eclipse.set.feature.table.pt1.sslb.SslbTransformationService;
-import org.eclipse.set.feature.table.pt1.ssld.SsldTransformationService;
-import org.eclipse.set.feature.table.pt1.sslf.SslfTransformationService;
-import org.eclipse.set.feature.table.pt1.ssli.SsliTransformationService;
-import org.eclipse.set.feature.table.pt1.ssln.SslnTransformationService;
-import org.eclipse.set.feature.table.pt1.sslr.SslrTransformationService;
-import org.eclipse.set.feature.table.pt1.ssls.SslsTransformationService;
-import org.eclipse.set.feature.table.pt1.sslw.SslwTransformationService;
-import org.eclipse.set.feature.table.pt1.sslz.SslzTransformationService;
-import org.eclipse.set.feature.table.pt1.ssvu.SsvuTransformationService;
-import org.eclipse.set.feature.table.pt1.ssza.SszaTransformationService;
-import org.eclipse.set.feature.table.pt1.sszs.SszsTransformationService;
-import org.eclipse.set.feature.table.pt1.sszw.SszwTransformationService;
-import org.eclipse.set.feature.table.pt1.sxxx.SxxxTransformationService;
-import org.eclipse.set.model.planpro.PlanPro.PlanPro_Schnittstelle;
+import org.eclipse.set.feature.table.pt1.test.utils.MockModelSession;
import org.eclipse.set.ppmodel.extensions.PlanProSchnittstelleExtensions;
import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup;
-import org.eclipse.set.ppmodel.extensions.utils.TableNameInfo;
import org.eclipse.set.unittest.utils.AbstractToolboxTest;
-import org.eclipse.set.utils.graph.AsSplitTopGraph;
-import org.jgrapht.graph.WeightedPseudograph;
-import org.mockito.MockedStatic;
+import org.junit.jupiter.api.BeforeAll;
import org.mockito.Mockito;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.service.event.EventConstants;
+import org.osgi.test.common.annotation.InjectService;
/**
* Abstract class for test transformation of Pt1 tables
@@ -83,85 +46,35 @@
* @author Truong
*/
public class Pt1TableTest extends AbstractToolboxTest {
- private static EnumTranslation mockEnumTranlsation(final Object value) {
- return new EnumTranslation() {
-
- @Override
- public String getAlternative() {
- return value.toString();
- }
-
- @Override
- public String getKeyBasis() {
- return value.toString();
- }
-
- @Override
- public String getPresentation() {
- return value.toString();
- }
+ protected String TEMPLATE_DIR = "../org.eclipse.set.feature/rootdir/data/export";
+ protected String TEMPLATE_LOCAL_DIR = "./data/export";
- @Override
- public String getSorting() {
- return "";
- }
- };
+ @BeforeAll
+ void beforeAll() throws Exception {
+ copyResource();
}
- protected static Field getSuperClassField(final Class> clazz,
- final String fieldName) {
- Field result = null;
- Class> superClazz = clazz;
- while (result == null && superClazz != null) {
- try {
- final Field declaredField = superClazz
- .getDeclaredField(fieldName);
- result = declaredField;
- } catch (final Exception e) {
- superClazz = superClazz.getSuperclass();
- continue;
- }
- }
- return result;
- }
+ protected IModelSession modelSession;
- protected static void mockServiceFieldVariable(
- final PlanPro2TableTransformationService service,
- final Object fieldVariable) throws Exception {
- for (final Field field : service.getClass().getDeclaredFields()) {
- if (field.getType().isInstance(fieldVariable)) {
- FieldUtils.writeField(field, service, fieldVariable, true);
- }
- }
- }
-
- protected static void mockTableNameInfo(
- final PlanPro2TableTransformationService service) {
- final String packageName = service.getClass().getPackageName();
- String tableName = packageName
- .substring(packageName.lastIndexOf(".") + 1);
- if (tableName.equals("dm")) {
- tableName = "sskp_dm";
+ /**
+ * @param eventAdmin
+ * injection throw {@link InjectService}
+ */
+ private void givenModelSession(final EventAdmin eventAdmin) {
+ if (planProSchnittstelle == null) {
+ modelSession = null;
}
- final TableNameInfo mockTableNameInfo = Mockito
- .mock(TableNameInfo.class);
- Mockito.doReturn(mockTableNameInfo).when(service).getTableNameInfo();
- Mockito.when(mockTableNameInfo.getShortName()).thenReturn(tableName);
+ final ToolboxFile mockToolboxFile = Mockito.mock(ToolboxFile.class);
+ when(mockToolboxFile.getRole()).thenReturn(ToolboxFileRole.SESSION);
+ modelSession = new MockModelSession(planProSchnittstelle,
+ mockToolboxFile);
+ final Dictionary d = new Hashtable<>(2);
+ d.put(EventConstants.EVENT_TOPIC, Events.MODEL_CHANGED);
+ d.put(IEventBroker.DATA, modelSession);
+ eventAdmin.sendEvent(new Event(Events.MODEL_CHANGED, d));
}
- private BankServiceImpl bankService;
- private CacheService cacheService;
-
- private GeoKanteGeometryService geometryService;
-
- private Messages messages;
-
- private EnumTranslationService mockEnumTranslation;
- private TopologicalGraphServiceImpl topologicalGraphService;
-
- List extends AbstractPlanPro2TableTransformationService> transformationServices;
-
protected List getLSTContainer() {
return List
.of(ContainerType.FINAL, ContainerType.INITIAL,
@@ -173,172 +86,45 @@ protected List getLSTContainer() {
.toList();
}
- /**
- * IMPROVE: use OSGi service unit test to inject these service
- */
- protected void givenTransformationService() {
- transformationServices = List
- .of(new SsbbTransformationService(),
- new SsitTransformationService(),
- new SskaTransformationService(),
- new SskfTransformationService(),
- new SskgTransformationService(),
- new SskoTransformationService(),
- new SskpTransformationService(),
- new SskpDmTransformationService(),
- new SsksTransformationService(),
- new SsktTransformationService(),
- new SskwTransformationService(),
- new SskxTransformationService(),
- new SskzTransformationService(),
- new SslaTransformationService(),
- new SslbTransformationService(),
- new SsldTransformationService(),
- new SslfTransformationService(),
- new SsliTransformationService(),
- new SslnTransformationService(),
- new SslrTransformationService(),
- new SslsTransformationService(),
- new SslwTransformationService(),
- new SslzTransformationService(),
- new SsvuTransformationService(),
- new SszaTransformationService(),
- new SszsTransformationService(),
- new SszwTransformationService(),
- new SxxxTransformationService())
- .stream()
- .map(Mockito::spy)
- .toList();
+ protected void setupTransformationService(final EventAdmin eventAdmin)
+ throws Exception {
+ givenModelSession(eventAdmin);
}
- protected void setupBankingService() throws Exception {
- if (topologicalGraphService == null) {
- setupTopGraphService();
- }
- bankService = new BankServiceImpl();
- final Method declaredMethod = bankService.getClass()
- .getDeclaredMethod("addBankingForContainer",
- BankingInformationSession.class,
- MultiContainer_AttributeGroup.class);
- declaredMethod.setAccessible(true);
- final BankingInformationSession bankingInformationSession = new BankingInformationSession();
- for (final MultiContainer_AttributeGroup container : getLSTContainer()) {
- declaredMethod.invoke(bankService, bankingInformationSession,
- container);
- }
- }
-
- protected void setupEnumTranslationService() {
- mockEnumTranslation = Mockito.mock(EnumTranslationService.class);
- Mockito.when(mockEnumTranslation.translate(any(), any()))
- .thenAnswer(invocation -> {
- return mockEnumTranlsation(invocation.getArguments()[1]);
- });
- Mockito.when(mockEnumTranslation.translate(anyBoolean()))
- .thenAnswer(invocation -> mockEnumTranlsation(
- invocation.getArgument(0)));
- Mockito.when(mockEnumTranslation.translate(any(Enumerator.class)))
- .thenAnswer(invocation -> mockEnumTranlsation(
- invocation.getArgument(0)));
- Mockito.when(mockEnumTranslation.translate(any(Translateable.class)))
- .thenAnswer(invocation -> mockEnumTranlsation(
- invocation.getArgument(0)));
- }
-
- protected void setupGeometryService() throws Exception {
- geometryService = new GeoKanteGeometryServiceImpl();
- final Map sessionesData = new HashMap<>();
-
- final GeoKanteGeometrySessionData geometrySessionData = new GeoKanteGeometrySessionData();
- sessionesData.put(planProSchnittstelle, geometrySessionData);
-
- FieldUtils.writeField(geometryService, "sessionesData", sessionesData,
- true);
-
- final Method declaredMethod = geometryService.getClass()
- .getDeclaredMethod("findGeoKanteGeometry",
- GeoKanteGeometrySessionData.class,
- MultiContainer_AttributeGroup.class);
- declaredMethod.setAccessible(true);
-
- declaredMethod.invoke(geometryService, geometrySessionData,
- PlanProSchnittstelleExtensions.getContainer(
- planProSchnittstelle, ContainerType.INITIAL));
- declaredMethod.invoke(geometryService, geometrySessionData,
- PlanProSchnittstelleExtensions.getContainer(
- planProSchnittstelle, ContainerType.FINAL));
- FieldUtils.writeField(geometryService, "isProcessComplete",
- Boolean.TRUE, true);
-
- }
-
- protected void setupMessages() throws Exception {
- messages = new Messages();
- for (final Field field : messages.getClass().getDeclaredFields()) {
- FieldUtils.writeField(field, messages, field.getName());
- }
-
- }
-
- protected void setupMockServices(
- final MockedStatic mockServices) {
- mockServices.when(Services::getCacheService).thenReturn(cacheService);
- mockServices.when(Services::getTopGraphService)
- .thenReturn(topologicalGraphService);
- mockServices.when(Services::getEnumTranslationService)
- .thenReturn(mockEnumTranslation);
- mockServices.when(Services::getGeometryService)
- .thenReturn(geometryService);
- }
-
- protected void setupTopGraphService() throws Exception {
- if (topologicalGraphService != null) {
- return;
+ protected void copyResource() throws Exception {
+ Path source = Path.of(TEMPLATE_DIR);
+ Path target = Path.of(TEMPLATE_LOCAL_DIR);
+ if (!Files.exists(Path.of(TEMPLATE_LOCAL_DIR))) {
+ Files.createDirectories(Path.of(TEMPLATE_LOCAL_DIR));
+ } else {
+ try (Stream stream = Files.walk(target)) {
+ stream.filter(path -> !path.equals(target))
+ .sorted(Comparator.reverseOrder())
+ .forEach(path -> {
+ try {
+ Files.delete(path);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
}
- topologicalGraphService = new TopologicalGraphServiceImpl();
- final Method declaredMethod = topologicalGraphService.getClass()
- .getDeclaredMethod("addContainerToGraph",
- WeightedPseudograph.class,
- MultiContainer_AttributeGroup.class);
- declaredMethod.setAccessible(true);
- final WeightedPseudograph weightedPseudograph = new WeightedPseudograph<>(
- AsSplitTopGraph.Edge.class);
- final List containers = getLSTContainer();
- for (final MultiContainer_AttributeGroup contanier : containers) {
- declaredMethod.invoke(topologicalGraphService, weightedPseudograph,
- contanier);
+ try (Stream stream = Files.walk(source)) {
+ stream.forEach(path -> {
+ try {
+ Path relative = source.relativize(path);
+ Path targetPath = target.resolve(relative);
+ if (Files.isDirectory(path)) {
+ Files.createDirectories(targetPath);
+ } else {
+ Files.copy(path, targetPath,
+ StandardCopyOption.REPLACE_EXISTING,
+ StandardCopyOption.COPY_ATTRIBUTES);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
}
- final Map> topGraphBaseMap = new HashMap<>();
- topGraphBaseMap.put(planProSchnittstelle, weightedPseudograph);
- FieldUtils.writeField(topologicalGraphService, "topGraphBaseMap",
- topGraphBaseMap, true);
}
-
- protected void setupTransformationService() throws Exception {
- setupTopGraphService();
- setupBankingService();
- setupEnumTranslationService();
- setupMessages();
- setupGeometryService();
- givenCacheService();
- givenTransformationService();
- for (final AbstractPlanPro2TableTransformationService impl : transformationServices) {
- mockServiceFieldVariable(impl, topologicalGraphService);
- mockServiceFieldVariable(impl, messages);
- mockServiceFieldVariable(impl, bankService);
- mockServiceFieldVariable(impl, mockEnumTranslation);
- mockTableNameInfo(impl);
- }
- }
-
- void givenCacheService() {
- cacheService = new CacheServiceImpl() {
- @Override
- protected ToolboxFileRole getSessionRole(
- final PlanPro_Schnittstelle schnittStelle) {
- return ToolboxFileRole.SESSION;
- }
- };
- }
-
-}
\ No newline at end of file
+}
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTransformationTest.java b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTransformationTest.java
index e057c9298b..4dd8e2aa25 100644
--- a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTransformationTest.java
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/Pt1TableTransformationTest.java
@@ -10,33 +10,73 @@
*/
package org.eclipse.set.feature.table.pt1.test;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.*;
+import java.io.File;
+import java.nio.file.Path;
import java.util.Comparator;
+import java.util.List;
import java.util.stream.Stream;
+import org.dom4j.Document;
+import org.dom4j.io.SAXReader;
import org.eclipse.emf.common.util.ECollections;
import org.eclipse.set.basis.ToolboxProperties;
+import org.eclipse.set.basis.constants.ExportType;
import org.eclipse.set.basis.constants.TableType;
-import org.eclipse.set.core.services.Services;
-import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableTransformationService;
+import org.eclipse.set.core.services.enumtranslation.EnumTranslationService;
+import org.eclipse.set.feature.table.PlanPro2TableTransformationService;
+import org.eclipse.set.feature.table.pt1.test.utils.CustomDOMReader;
+import org.eclipse.set.feature.table.pt1.test.utils.CustomNodeComparator;
import org.eclipse.set.model.tablemodel.RowGroup;
import org.eclipse.set.model.tablemodel.Table;
import org.eclipse.set.ppmodel.extensions.MultiContainer_AttributeGroupExtensions;
import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup;
+import org.eclipse.set.utils.export.xsl.TransformTable;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestInstance.Lifecycle;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.test.common.annotation.InjectService;
+import org.osgi.test.junit5.service.ServiceExtension;
/**
* Test Pt1 Table transformation
*
* @author Truong
*/
+@TestInstance(Lifecycle.PER_CLASS)
+@ExtendWith(ServiceExtension.class)
class Pt1TableTransformationTest extends Pt1TableTest {
+ private static List Ssks_Pagebreak_Column_Index = List.of("49",
+ "76");
+ private static String XSL_DIR = "res/xsl";
+
+ private static boolean compareXSLDoc(final Document actual,
+ final Document expect) {
+ final CustomNodeComparator nodeComparator = new CustomNodeComparator();
+ return nodeComparator.compare(actual, expect) == 0;
+ }
+
+ private static Document loadReferenceXSLDoc(final String shortcut)
+ throws Exception {
+ final String xslName = shortcut.toLowerCase() + "-fop.xsl";
+ final File file = Path.of(XSL_DIR, xslName).toFile();
+ if (!file.exists() || !file.isFile()) {
+ throw new IllegalArgumentException(
+ "File Not found: " + file.toString());
+ }
+
+ final SAXReader saxReader = new SAXReader();
+ saxReader.setMergeAdjacentText(true);
+ return saxReader.read(file);
+ }
+
/**
* @return the reference files
*/
@@ -45,37 +85,72 @@ protected static Stream getReferenceFiles() {
Arguments.of(SINGLE_STATE_PLAN, "zustandpphn"));
}
+ @InjectService
+ EventAdmin eventAdmin;
+
+ @InjectService
+ List transformationServices;
+
+ @InjectService
+ EnumTranslationService translationService;
+
+ @Test
+ void testPDFExportStyle() throws Exception {
+ givenPlanProFile(PPHN_1_10_0_3_20220517_PLANPRO);
+ setupTransformationService(eventAdmin);
+ for (final PlanPro2TableTransformationService service : transformationServices) {
+ final TransformTable transformTable = new TransformTable(
+ ExportType.INVENTORY_RECORDS,
+ service.getTableNameInfo().getShortName().toLowerCase(),
+ TableType.DIFF, translationService);
+ final Document xslDoc = assertDoesNotThrow(() -> {
+ final org.w3c.dom.Document doc = service.getTableNameInfo()
+ .getShortName()
+ .equalsIgnoreCase("ssks")
+ ? transformTable
+ .transform(Ssks_Pagebreak_Column_Index)
+ : transformTable.transform();
+ final CustomDOMReader reader = new CustomDOMReader();
+ return reader.read(doc);
+ }, "Error by create XSL Doc: "
+ + service.getClass().getPackageName());
+ assertNotNull(xslDoc, "Error by create XSL Doc: "
+ + service.getClass().getPackageName());
+ final Document expect = loadReferenceXSLDoc(
+ service.getTableNameInfo().getShortName());
+ assertTrue(compareXSLDoc(xslDoc, expect),
+ "The XSL isn't equal expected: "
+ + service.getTableNameInfo().getShortName());
+ }
+ }
+
@ParameterizedTest
@MethodSource("getReferenceFiles")
void testTransformator(final String file) throws Exception {
givenPlanProFile(file);
- setupTransformationService();
+ setupTransformationService(eventAdmin);
System.setProperty(ToolboxProperties.DEVELOPMENT_MODE,
Boolean.FALSE.toString());
- try (final MockedStatic mockServices = Mockito
- .mockStatic(Services.class);) {
- setupMockServices(mockServices);
- for (final AbstractPlanPro2TableTransformationService transformationService : transformationServices) {
- for (final MultiContainer_AttributeGroup container : getLSTContainer()) {
- // Test transformation table
- final Table transformedTable = assertDoesNotThrow(
- () -> transformationService.transform(container),
- () -> "Error by transformation Table: "
- + transformationService.getClass()
- .getPackageName());
- final TableType defaultTableType = MultiContainer_AttributeGroupExtensions
- .getContainerType(container)
- .getDefaultTableType();
- // Test sorting table
- assertDoesNotThrow(() -> {
- final Comparator comparator = transformationService
- .getRowGroupComparator(defaultTableType);
- ECollections.sort(transformedTable.getTablecontent()
- .getRowgroups(), comparator);
- }, () -> "Error by sort table: "
- + transformationService.getClass()
- .getPackageName());
- }
+ for (final PlanPro2TableTransformationService transformationService : transformationServices) {
+ for (final MultiContainer_AttributeGroup container : getLSTContainer()) {
+ // Test transformation table
+ final Table transformedTable = assertDoesNotThrow(
+ () -> transformationService.transform(container),
+ () -> "Error by transformation Table: "
+ + transformationService.getClass()
+ .getPackageName());
+ final TableType defaultTableType = MultiContainer_AttributeGroupExtensions
+ .getContainerType(container)
+ .getDefaultTableType();
+ // Test sorting table
+ assertDoesNotThrow(() -> {
+ final Comparator comparator = transformationService
+ .getRowGroupComparator(defaultTableType);
+ ECollections.sort(
+ transformedTable.getTablecontent().getRowgroups(),
+ comparator);
+ }, () -> "Error by sort table: "
+ + transformationService.getClass().getPackageName());
}
}
}
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/CustomDOMReader.java b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/CustomDOMReader.java
new file mode 100644
index 0000000000..0b7ca3dcbd
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/CustomDOMReader.java
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2026 DB InfraGO AG and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ */
+package org.eclipse.set.feature.table.pt1.test.utils;
+
+import org.dom4j.Branch;
+import org.dom4j.io.DOMReader;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+/**
+ * Individual {@link DOMReader} with tag namespace identification
+ */
+public class CustomDOMReader extends DOMReader {
+ private static record TagNameWithNS(String prefix, String uri,
+ String tagName) {
+ }
+
+ /**
+ * XSL namespace uri
+ */
+ public static final String XSL_NS_URI = "http://www.w3.org/1999/XSL/Transform";
+
+ /**
+ * FO namepsace uri
+ */
+ public static final String FO_NS_URI = "http://www.w3.org/1999/XSL/Format";
+
+ /**
+ * FOX namespace uri
+ */
+ public static final String FOX_NS_URI = "http://xmlgraphics.apache.org/fop/extensions";
+
+ public CustomDOMReader() {
+ super();
+ }
+
+ @Override
+ protected void readElement(org.w3c.dom.Node node, Branch current) {
+ String nodeName = node.getNodeName();
+ TagNameWithNS nodeNSAndName = extractNS(nodeName);
+ if (nodeNSAndName.prefix() == null) {
+ super.readElement(node, current);
+ return;
+ }
+ Document ownerDocument = node.getOwnerDocument();
+ Node renameNode = ownerDocument.renameNode(node, nodeNSAndName.uri(),
+ nodeNSAndName.tagName());
+ renameNode.setPrefix(nodeNSAndName.prefix);
+ setAttributesNS(renameNode);
+ super.readElement(renameNode, current);
+
+ }
+
+ private void setAttributesNS(org.w3c.dom.Node node) {
+ org.w3c.dom.NamedNodeMap attributeList = node.getAttributes();
+ if (attributeList == null) {
+ return;
+ }
+ Document ownerDocument = node.getOwnerDocument();
+ for (int i = 0; i < attributeList.getLength(); i++) {
+ org.w3c.dom.Node attribute = attributeList.item(i);
+ TagNameWithNS ns = extractNS(attribute.getNodeName());
+ if (ns.prefix() == null) {
+ continue;
+ }
+ Node attrWithNS = ownerDocument.renameNode(attribute, ns.uri,
+ ns.tagName);
+ attrWithNS.setPrefix(ns.prefix());
+ }
+ }
+
+ private TagNameWithNS extractNS(String nodeName) {
+ String[] split = nodeName.split(":");
+ if (split.length == 2) {
+ return switch (split[0].toLowerCase()) {
+ case "fo" -> new TagNameWithNS("fo", FO_NS_URI, split[1]);
+ case "xsl" -> new TagNameWithNS("xsl", XSL_NS_URI, split[1]);
+ case "fox" -> new TagNameWithNS("fox", FOX_NS_URI, split[1]);
+ default -> new TagNameWithNS(null, null, nodeName);
+ };
+ }
+ return new TagNameWithNS(null, null, nodeName);
+ }
+}
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/CustomNodeComparator.java b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/CustomNodeComparator.java
new file mode 100644
index 0000000000..51331c1e00
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/CustomNodeComparator.java
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2026 DB InfraGO AG and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ */
+package org.eclipse.set.feature.table.pt1.test.utils;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.dom4j.Attribute;
+import org.dom4j.Branch;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.QName;
+import org.dom4j.util.NodeComparator;
+
+/**
+ * Custom {@link NodeComparator} with ignore the order of the node
+ *
+ * @author truong
+ */
+public class CustomNodeComparator extends NodeComparator {
+ /**
+ * Constructor
+ */
+ public CustomNodeComparator() {
+ super();
+ }
+
+ @Override
+ public int compare(final Element n1, final Element n2) {
+ int answer = compare(n1.getQName(), n2.getQName());
+
+ if (answer == 0) {
+ // lets compare attributes
+ final int c1 = n1.attributeCount();
+ final int c2 = n2.attributeCount();
+ answer = c1 - c2;
+
+ if (answer == 0) {
+ for (int i = 0; i < c1; i++) {
+ final Attribute a1 = n1.attribute(i);
+ final Attribute a2 = findRelevantAttribute(n2,
+ a1.getQName());
+ if (a2 == null) {
+ return -1;
+ }
+ answer = compare(a1, a2);
+
+ if (answer != 0) {
+ return answer;
+ }
+ }
+
+ answer = compareContent(n1, n2);
+ }
+ }
+
+ return answer;
+ }
+
+ @Override
+ public int compareContent(final Branch b1, final Branch b2) {
+ final int c1 = b1.nodeCount();
+ final int c2 = b2.nodeCount();
+ int answer = c1 - c2;
+ final Set alreadyCompare = new HashSet<>();
+ if (answer == 0) {
+ for (int i = 0; i < c1; i++) {
+ final Node n1 = b1.node(i);
+ final Node n2 = b2.node(i);
+ answer = compare(n1, n2);
+ if (answer != 0) {
+ final boolean isSame = b2.content()
+ .stream()
+ .filter(n -> n != n2 && !alreadyCompare.contains(n))
+ .anyMatch(node -> {
+ if (compare(n1, node) == 0) {
+ alreadyCompare.add(node);
+ return true;
+ }
+ return false;
+ });
+ if (isSame) {
+ answer = 0;
+ }
+ }
+
+ if (answer != 0) {
+ break;
+ }
+ }
+ }
+
+ return answer;
+ }
+
+ protected Attribute findRelevantAttribute(final Element e,
+ final QName qName) {
+ final Iterator attributeIterator = e.attributeIterator();
+ while (attributeIterator.hasNext()) {
+ final Attribute next = attributeIterator.next();
+ if (compare(next.getQName(), qName) == 0) {
+ return next;
+ }
+ }
+ return null;
+ }
+}
diff --git a/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/MockModelSession.java b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/MockModelSession.java
new file mode 100644
index 0000000000..407e9ef1f0
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.pt1.test/src/org/eclipse/set/feature/table/pt1/test/utils/MockModelSession.java
@@ -0,0 +1,258 @@
+/**
+ * Copyright (c) 2026 DB InfraGO AG and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ */
+package org.eclipse.set.feature.table.pt1.test.utils;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.set.basis.IModelSession;
+import org.eclipse.set.basis.Pair;
+import org.eclipse.set.basis.ToolboxPaths;
+import org.eclipse.set.basis.constants.ContainerType;
+import org.eclipse.set.basis.constants.PlanProFileNature;
+import org.eclipse.set.basis.constants.TableType;
+import org.eclipse.set.basis.constants.ValidationResult;
+import org.eclipse.set.basis.constants.ValidationResult.FileValidateState;
+import org.eclipse.set.basis.constants.ValidationResult.Outcome;
+import org.eclipse.set.basis.exceptions.UserAbortion;
+import org.eclipse.set.basis.files.ToolboxFile;
+import org.eclipse.set.model.planpro.Layoutinformationen.PlanPro_Layoutinfo;
+import org.eclipse.set.model.planpro.PlanPro.PlanPro_Schnittstelle;
+import org.eclipse.set.model.temporaryintegration.TemporaryIntegration;
+import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ *
+ */
+public class MockModelSession implements IModelSession {
+ PlanPro_Schnittstelle schnittstelle;
+ ToolboxFile toolboxfile;
+
+ public MockModelSession(PlanPro_Schnittstelle schnittstelle,
+ ToolboxFile toolboxfile) {
+ this.schnittstelle = schnittstelle;
+ this.toolboxfile = toolboxfile;
+ }
+
+ @Override
+ public void addSymbolRotation(double rotation) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void cancelMergeMode(Predicate confirmDeletion)
+ throws IOException, UserAbortion {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void cleanUp() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void close() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void discardChanges() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void exitMergeMode(Shell shell) throws IOException, UserAbortion {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public MultiContainer_AttributeGroup getContainer(ContainerType container) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getGuid() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Shell getMainWindow() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Set getModels() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public PlanProFileNature getNature() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public PlanPro_Schnittstelle getPlanProSchnittstelle() {
+ return schnittstelle;
+ }
+
+ @Override
+ public PlanPro_Layoutinfo getLayoutInformation() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public double getSymbolRotation() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public TableType getTableType() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List> getSelectedControlAreas() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isPlanningAreaIgnored() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Path getTempDir() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ToolboxFile getToolboxFile() {
+ return toolboxfile;
+ }
+
+ @Override
+ public ToolboxPaths getToolboxPaths() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ValidationResult getValidationResult(
+ Class extends EObject> sourceClass) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Outcome getValidationsOutcome(
+ Function outcome) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public FileValidateState getFileValidateState() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void init() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isDirty() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isLoaded() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isMergeMode() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isNewProject() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isReportSavedDialogSuppressed(int kind) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void refreshValidation() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void revert() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean save(Shell shell) throws UserAbortion {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean save(Shell shell, boolean askUser) throws UserAbortion {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean saveNew(Shell shell) throws UserAbortion {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setReportSavedDialogSuppressed(int kind, boolean value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isSingleState() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public SaveFixResult getSaveFixResult() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public EditingDomain getEditingDomain() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Optional getTemporaryIntegration() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void switchToMergeMode(TemporaryIntegration newTemporaryIntegration,
+ String mergeDir, Shell shell, ToolboxFile temporaryToolboxFile)
+ throws IOException, UserAbortion {
+ throw new UnsupportedOperationException();
+ }
+
+}
diff --git a/java/bundles/org.eclipse.set.feature.table.test/pom.xml b/java/bundles/org.eclipse.set.feature.table.test/pom.xml
new file mode 100644
index 0000000000..7058833ee3
--- /dev/null
+++ b/java/bundles/org.eclipse.set.feature.table.test/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+ org.eclipse.set.feature.table.test
+ eclipse-test-plugin
+
+
+ ../../
+ org.eclipse.set
+ org.eclipse.set.releng.parent
+ 2.6.0-SNAPSHOT
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+
+ properties
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ -javaagent:${org.mockito:mockito-core:jar}
+
+
+
+
+
\ No newline at end of file
diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java
index f434a5d2c7..19a91cc2a9 100644
--- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java
+++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java
@@ -208,7 +208,8 @@ public void handleEvent(final Event event) {
}
}
- if (event.getTopic().equals(Events.CLOSE_SESSION)) {
+ if (event.getTopic().equals(Events.CLOSE_SESSION)
+ && tableService != null) {
final ToolboxFileRole closeSession = (ToolboxFileRole) event
.getProperty(IEventBroker.DATA);
final IModelSession loadedSession = sessionService
@@ -218,7 +219,8 @@ public void handleEvent(final Event event) {
tableService.clearInstance();
}
- if (event.getTopic().equals(TableDataChangeEvent.TOPIC)) {
+ if (event.getTopic().equals(TableDataChangeEvent.TOPIC)
+ && tableService != null) {
final Object data = event.getProperty(IEventBroker.DATA);
if (data instanceof final TableDataChangeEvent changedEvent) {
if (!changedEvent.getProperties().isEmpty() && changedEvent
diff --git a/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/multipage_layout.xsl b/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/multipage_layout.xsl
index 57842c8452..fd8bb5c340 100644
--- a/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/multipage_layout.xsl
+++ b/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/multipage_layout.xsl
@@ -1,7 +1,6 @@
-
+
diff --git a/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/table_template.xsl b/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/table_template.xsl
index 06ca200c36..637e711bfe 100644
--- a/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/table_template.xsl
+++ b/java/bundles/org.eclipse.set.feature/rootdir/data/export/pdf/table_template.xsl
@@ -52,8 +52,7 @@ http://www.eclipse.org/legal/epl-v20.html
-
+
diff --git a/java/bundles/org.eclipse.set.rcp.compatibility/META-INF/MANIFEST.MF b/java/bundles/org.eclipse.set.rcp.compatibility/META-INF/MANIFEST.MF
index 2499852081..fe4bd522ee 100644
--- a/java/bundles/org.eclipse.set.rcp.compatibility/META-INF/MANIFEST.MF
+++ b/java/bundles/org.eclipse.set.rcp.compatibility/META-INF/MANIFEST.MF
@@ -5,8 +5,8 @@ Bundle-SymbolicName: org.eclipse.set.rcp.compatibility;singleton:=true
Bundle-Version: 2.6.0.qualifier
Automatic-Module-Name: org.eclipse.set.rcp.compatibility
Bundle-RequiredExecutionEnvironment: JavaSE-21
-Require-Bundle: org.eclipse.swt;bundle-version="3.107.0";visibility:=reexport,
- org.eclipse.jface;bundle-version="3.14.0";visibility:=reexport,
- org.eclipse.jface.databinding;bundle-version="1.8.200";visibility:=reexport
+Require-Bundle: org.eclipse.swt;visibility:=reexport,
+ org.eclipse.jface;visibility:=reexport,
+ org.eclipse.jface.databinding;visibility:=reexport
Bundle-Vendor: Eclipse Signalling Engineering Toolbox
Bundle-ActivationPolicy: lazy
diff --git a/java/bundles/org.eclipse.set.releng.target/.polyglot.org.eclipse.set.releng.target.target b/java/bundles/org.eclipse.set.releng.target/.polyglot.org.eclipse.set.releng.target.target
deleted file mode 100644
index 520c79099a..0000000000
--- a/java/bundles/org.eclipse.set.releng.target/.polyglot.org.eclipse.set.releng.target.target
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- 4.0.0
-
- org.eclipse.set
- org.eclipse.set.releng.parent
- 2.6.0-SNAPSHOT
- ..\..\pom.xml
-
- org.eclipse.set.releng.target
- 2.6.0-SNAPSHOT
- eclipse-target-definition
- [target] org.eclipse.set.releng.target
-
diff --git a/java/bundles/org.eclipse.set.releng.target/org.eclipse.set.releng.target.target b/java/bundles/org.eclipse.set.releng.target/org.eclipse.set.releng.target.target
index d0679c04c0..18d957ef13 100644
--- a/java/bundles/org.eclipse.set.releng.target/org.eclipse.set.releng.target.target
+++ b/java/bundles/org.eclipse.set.releng.target/org.eclipse.set.releng.target.target
@@ -486,5 +486,15 @@ DynamicImport-Package: *
+
+
+
+ org.osgi
+ org.osgi.test.junit5
+ 1.3.0
+ jar
+
+
+
-
\ No newline at end of file
+
diff --git a/java/bundles/org.eclipse.set.swtbot/SWTBot.launch b/java/bundles/org.eclipse.set.swtbot/SWTBot.launch
index f10724a511..1f0c53f93e 100644
--- a/java/bundles/org.eclipse.set.swtbot/SWTBot.launch
+++ b/java/bundles/org.eclipse.set.swtbot/SWTBot.launch
@@ -438,9 +438,6 @@
-
-
-
@@ -524,6 +521,9 @@
+
+
+
@@ -537,6 +537,7 @@
+
diff --git a/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/export/xsl/TransformTableBody.java b/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/export/xsl/TransformTableBody.java
index 5711990e41..7aef24f20a 100644
--- a/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/export/xsl/TransformTableBody.java
+++ b/java/bundles/org.eclipse.set.utils/src/org/eclipse/set/utils/export/xsl/TransformTableBody.java
@@ -10,7 +10,8 @@
*/
package org.eclipse.set.utils.export.xsl;
-import static org.eclipse.set.utils.excel.ExcelWorkbookExtension.*;
+import static org.eclipse.set.utils.excel.ExcelWorkbookExtension.getHeaderLastColumnIndex;
+import static org.eclipse.set.utils.excel.ExcelWorkbookExtension.getHeaderLastRowIndex;
import static org.eclipse.set.utils.export.xsl.TransformStyle.setExcelCellBorderStyle;
import static org.eclipse.set.utils.export.xsl.TransformStyle.transformBorderStyle;
import static org.eclipse.set.utils.export.xsl.XMLDocumentExtensions.createXMLElementWithAttr;
@@ -28,6 +29,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -101,8 +103,26 @@ private Set> groupCellByStyle(final Set pageBreakAts) {
throw new RuntimeException(
"Missing first data row. Is the printing area configured correctly?"); //$NON-NLS-1$
}
- getFirstDataRow(sheet).forEach(cell -> {
- final int index = cell.getColumnIndex();
+ final BiFunction getDataCell = (dataRow,
+ colIndex) -> {
+ final Cell cell = dataRow.getCell(colIndex);
+ if (cell != null) {
+ return cell;
+ }
+ if (parentGroupLastIndex.contains(colIndex.intValue())
+ || pageBreakAts.contains(colIndex.intValue())
+ || pageBreakAts.contains(colIndex.intValue())) {
+ return dataRow.createCell(colIndex.intValue());
+ }
+ return null;
+ };
+ for (int index = 0; index <= getHeaderLastColumnIndex(sheet); index++) {
+ final Cell cell = getDataCell.apply(firstDataRow,
+ Integer.valueOf(index));
+ if (cell == null) {
+ continue;
+ }
+
if (parentGroupLastIndex.contains(index)
|| pageBreakAts.contains(index)) {
setExcelCellBorderStyle(cell, BorderDirection.RIGHT,
@@ -112,7 +132,6 @@ private Set> groupCellByStyle(final Set pageBreakAts) {
setExcelCellBorderStyle(cell, BorderDirection.LEFT,
BorderStyle.MEDIUM);
}
-
if (!isDefaultStyle(cell.getCellStyle())) {
Set| sameStyleGroup = result.stream()
.filter(cells -> cells.stream()
@@ -128,14 +147,14 @@ private Set> groupCellByStyle(final Set pageBreakAts) {
}
sameStyleGroup.add(cell);
}
- });
+ }
return result;
}
@SuppressWarnings("boxing")
private Set getColumnWithWideBorderRight() {
- final Row headerRow = sheet.getRow(1);
+ final Row headerRow = sheet.getRow(getHeaderLastRowIndex(sheet));
final Set result = new HashSet<>();
// Start at 1 to skip empty column 0
for (var i = 1; i <= getHeaderLastColumnIndex(sheet); i++) {
diff --git a/java/pom.xml b/java/pom.xml
index 3181c2f77c..1c006f16b0 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -334,170 +334,6 @@
plugin-source
-
- feature-source
- package
-
- feature-source
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|