diff --git a/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.project b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.project
new file mode 100644
index 000000000..d1a7e218d
--- /dev/null
+++ b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.project
@@ -0,0 +1,17 @@
+
+
+ net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature
+
+
+
+
+
+ org.eclipse.pde.FeatureBuilder
+
+
+
+
+
+ org.eclipse.pde.FeatureNature
+
+
diff --git a/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.settings/org.eclipse.core.resources.prefs b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..801fab74d
--- /dev/null
+++ b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=utf8
diff --git a/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/build.properties b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/build.properties
new file mode 100644
index 000000000..64f93a9f0
--- /dev/null
+++ b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
diff --git a/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/feature.xml b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/feature.xml
new file mode 100644
index 000000000..73bdb09d4
--- /dev/null
+++ b/openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/feature.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ This is the MaSC ESCAPE report plugin.
+
+
+
+ Copyright (c) 2026 Lablicate GmbH.
+
+
+
+ %license
+
+
+
+
+
+
+
+
+
diff --git a/openchrom/features/net.openchrom.platform.feature/feature.xml b/openchrom/features/net.openchrom.platform.feature/feature.xml
index 7fc099bb8..3149dfcb2 100644
--- a/openchrom/features/net.openchrom.platform.feature/feature.xml
+++ b/openchrom/features/net.openchrom.platform.feature/feature.xml
@@ -95,6 +95,10 @@
id="org.eclipse.chemclipse.nmr.processing.supplier.base.feature"
version="0.0.0"/>
+
+
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.excel.template.ui/src/net/openchrom/chromatogram/xxd/report/supplier/excel/template/ui/Activator.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.excel.template.ui/src/net/openchrom/chromatogram/xxd/report/supplier/excel/template/ui/Activator.java
index 09ba37422..df51ca9f0 100644
--- a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.excel.template.ui/src/net/openchrom/chromatogram/xxd/report/supplier/excel/template/ui/Activator.java
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.excel.template.ui/src/net/openchrom/chromatogram/xxd/report/supplier/excel/template/ui/Activator.java
@@ -13,9 +13,7 @@
*******************************************************************************/
package net.openchrom.chromatogram.xxd.report.supplier.excel.template.ui;
-import org.eclipse.chemclipse.support.events.IChemClipseEvents;
import org.eclipse.chemclipse.support.ui.activator.AbstractActivatorUI;
-import org.eclipse.chemclipse.ux.extension.ui.support.DataUpdateSupport;
import org.osgi.framework.BundleContext;
import net.openchrom.chromatogram.xxd.report.supplier.excel.template.preferences.PreferenceSupplier;
@@ -24,16 +22,12 @@ public class Activator extends AbstractActivatorUI {
private static Activator plugin;
- private DataUpdateSupport dataUpdateSupport;
-
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
initializePreferenceStore(PreferenceSupplier.INSTANCE());
- dataUpdateSupport = new DataUpdateSupport(getEventBroker());
- initialize(dataUpdateSupport);
}
@Override
@@ -47,14 +41,4 @@ public static Activator getDefault() {
return plugin;
}
-
- public DataUpdateSupport getDataUpdateSupport() {
-
- return dataUpdateSupport;
- }
-
- private void initialize(DataUpdateSupport dataUpdateSupport) {
-
- dataUpdateSupport.subscribe(IChemClipseEvents.TOPIC_CHROMATOGRAM_XXD_UPDATE_SELECTION, IChemClipseEvents.EVENT_BROKER_DATA);
- }
}
\ No newline at end of file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.classpath b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.classpath
new file mode 100644
index 000000000..7a42e53ce
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.gitignore b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.gitignore
new file mode 100644
index 000000000..5e56e040e
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.project b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.project
new file mode 100644
index 000000000..706a6e810
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.project
@@ -0,0 +1,33 @@
+
+
+ net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.pde.ds.core.builder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.core.resources.prefs b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..801fab74d
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=utf8
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.jdt.core.prefs b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..086d5d7a8
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=25
+org.eclipse.jdt.core.compiler.compliance=25
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=25
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.pde.ds.annotations.prefs b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 000000000..73a356b6d
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,8 @@
+classpath=true
+dsVersion=V1_3
+eclipse.preferences.version=1
+enabled=true
+generateBundleActivationPolicyLazy=true
+path=OSGI-INF
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/META-INF/MANIFEST.MF b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..94bfe4347
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: net.openchrom.chromatogram.xxd.report.supplier.csv.ui
+Bundle-ManifestVersion: 2
+Bundle-Name: MaSC ESCAPE Report UI
+Bundle-SymbolicName: net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui;singleton:=true
+Bundle-Version: 1.6.34.qualifier
+Bundle-Activator: net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui.Activator
+Bundle-Vendor: OpenChrom
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.chemclipse.support;bundle-version="0.9.0",
+ org.eclipse.chemclipse.support.ui;bundle-version="0.9.0",
+ org.eclipse.ui;bundle-version="3.109.100",
+ org.eclipse.chemclipse.ux.extension.ui;bundle-version="0.9.0",
+ org.eclipse.chemclipse.rcp.ui.icons;bundle-version="0.9.0",
+ org.eclipse.chemclipse.xxd.process.ui;bundle-version="0.9.0",
+ org.eclipse.e4.core.services;bundle-version="2.3.400",
+ net.openchrom.chromatogram.xxd.report.supplier.masc.escape;bundle-version="1.6.34",
+ org.eclipse.chemclipse.logging;bundle-version="0.9.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-25
+Bundle-ActivationPolicy: lazy
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/OSGI-INF/l10n/bundle_en.properties b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/OSGI-INF/l10n/bundle_en.properties
new file mode 100644
index 000000000..597fd0bfb
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/OSGI-INF/l10n/bundle_en.properties
@@ -0,0 +1 @@
+#Properties file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/build.properties b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/build.properties
new file mode 100644
index 000000000..3e5f9ad7d
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ OSGI-INF/
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/plugin.xml b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/plugin.xml
new file mode 100644
index 000000000..a746ec323
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/plugin.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/Activator.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/Activator.java
new file mode 100644
index 000000000..fb36d25c2
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/Activator.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - data update support
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui;
+
+import org.eclipse.chemclipse.support.preferences.PreferenceSupplier;
+import org.eclipse.chemclipse.support.ui.activator.AbstractActivatorUI;
+import org.osgi.framework.BundleContext;
+
+public class Activator extends AbstractActivatorUI {
+
+ private static Activator plugin;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+
+ super.start(context);
+ plugin = this;
+ initializePreferenceStore(PreferenceSupplier.INSTANCE());
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+
+ plugin = null;
+ super.stop(context);
+ }
+
+ public static Activator getDefault() {
+
+ return plugin;
+ }
+}
\ No newline at end of file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/icon/MenuIcon.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/icon/MenuIcon.java
new file mode 100644
index 000000000..1e9058ab8
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/icon/MenuIcon.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - initial API and implementation
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui.icon;
+
+import org.eclipse.chemclipse.rcp.ui.icons.core.ApplicationImageFactory;
+import org.eclipse.chemclipse.rcp.ui.icons.core.IApplicationImage;
+import org.eclipse.chemclipse.rcp.ui.icons.core.IApplicationImageProvider;
+import org.eclipse.chemclipse.xxd.process.ui.menu.IMenuIcon;
+import org.eclipse.swt.graphics.Image;
+
+public class MenuIcon implements IMenuIcon {
+
+ @Override
+ public Image getImage() {
+
+ return ApplicationImageFactory.getInstance().getImage(IApplicationImage.IMAGE_EXCEL, IApplicationImageProvider.SIZE_16x16);
+ }
+}
\ No newline at end of file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/preferences/PreferencePage.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/preferences/PreferencePage.java
new file mode 100644
index 000000000..35fbe47da
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/preferences/PreferencePage.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - initial API and implementation
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui.preferences;
+
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.FileFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.preferences.PreferenceSupplier;
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui.Activator;
+
+public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+ public PreferencePage() {
+
+ super(GRID);
+ setPreferenceStore(Activator.getDefault().getPreferenceStore());
+ setTitle("MaSC ESCAPE Chromatogram Reports");
+ setDescription("Allows user customizable report based on *.xltx spreadsheet templates.");
+ }
+
+ @Override
+ public void createFieldEditors() {
+
+ addField(new FileFieldEditor(PreferenceSupplier.P_TEMPLATE, "ESCAPE Template", getFieldEditorParent()));
+ addField(new FileFieldEditor(PreferenceSupplier.P_REPORT, "Export Folder", getFieldEditorParent()));
+ }
+
+ @Override
+ public void init(IWorkbench workbench) {
+
+ }
+}
\ No newline at end of file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.classpath b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.classpath
new file mode 100644
index 000000000..7a42e53ce
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.gitignore b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.gitignore
new file mode 100644
index 000000000..5e56e040e
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.project b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.project
new file mode 100644
index 000000000..e40083def
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.project
@@ -0,0 +1,33 @@
+
+
+ net.openchrom.chromatogram.xxd.report.supplier.masc.escape
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.pde.ds.core.builder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.core.resources.prefs b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..801fab74d
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=utf8
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.jdt.core.prefs b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..086d5d7a8
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,10 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=25
+org.eclipse.jdt.core.compiler.compliance=25
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=25
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.pde.ds.annotations.prefs b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 000000000..73a356b6d
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,8 @@
+classpath=true
+dsVersion=V1_3
+eclipse.preferences.version=1
+enabled=true
+generateBundleActivationPolicyLazy=true
+path=OSGI-INF
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/META-INF/MANIFEST.MF b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..f1e8b47f2
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: net.openchrom.chromatogram.xxd.report.supplier.excel.template
+Bundle-ManifestVersion: 2
+Bundle-Name: MaSC ESCAPE Report
+Bundle-SymbolicName: net.openchrom.chromatogram.xxd.report.supplier.masc.escape;singleton:=true
+Bundle-Version: 1.6.34.qualifier
+Export-Package: net.openchrom.chromatogram.xxd.report.supplier.masc.escape.preferences
+Bundle-Vendor: OpenChrom
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.chemclipse.chromatogram.xxd.report;bundle-version="0.9.0",
+ org.eclipse.chemclipse.model;bundle-version="0.9.0",
+ org.eclipse.chemclipse.logging;bundle-version="0.9.0",
+ org.eclipse.chemclipse.processing;bundle-version="0.9.0",
+ org.eclipse.chemclipse.support;bundle-version="0.9.0",
+ org.apache.poi;bundle-version="4.1.1",
+ org.apache.poi.ooxml;bundle-version="4.1.1",
+ org.apache.poi.ooxml.schemas;bundle-version="4.1.1",
+ org.apache.xmlbeans;bundle-version="3.1.0",
+ org.apache.commons.commons-compress;bundle-version="1.28.0",
+ org.eclipse.chemclipse.msd.model;bundle-version="[0.9.0,1.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-25
+Bundle-ActivationPolicy: lazy
+Import-Package: com.fasterxml.jackson.annotation;version="2.20.0"
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/OSGI-INF/l10n/bundle_en.properties b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/OSGI-INF/l10n/bundle_en.properties
new file mode 100644
index 000000000..597fd0bfb
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/OSGI-INF/l10n/bundle_en.properties
@@ -0,0 +1 @@
+#Properties file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/build.properties b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/build.properties
new file mode 100644
index 000000000..3e5f9ad7d
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ OSGI-INF/
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/plugin.xml b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/plugin.xml
new file mode 100644
index 000000000..e19e8deda
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/plugin.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/core/MascEscapeReport.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/core/MascEscapeReport.java
new file mode 100644
index 000000000..647ab88e3
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/core/MascEscapeReport.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - initial API and implementation
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.core;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.chemclipse.chromatogram.xxd.report.chromatogram.AbstractChromatogramReportGenerator;
+import org.eclipse.chemclipse.chromatogram.xxd.report.settings.IChromatogramReportSettings;
+import org.eclipse.chemclipse.logging.core.Logger;
+import org.eclipse.chemclipse.model.core.IChromatogram;
+import org.eclipse.chemclipse.msd.model.core.IChromatogramMSD;
+import org.eclipse.chemclipse.processing.core.IProcessingInfo;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.io.MascEscapeReportWriter;
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.preferences.PreferenceSupplier;
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.settings.ChromatogramReportSettings;
+
+public class MascEscapeReport extends AbstractChromatogramReportGenerator {
+
+ private static final Logger logger = Logger.getLogger(MascEscapeReport.class);
+
+ public IProcessingInfo report(File file, IChromatogram chromatogram, IChromatogramReportSettings settings) {
+
+ IProcessingInfo processingInfo = super.validate(file);
+ if(!processingInfo.hasErrorMessages()) {
+
+ if(settings instanceof ChromatogramReportSettings reportSettings) {
+ try {
+ MascEscapeReportWriter chromatogramReport = new MascEscapeReportWriter();
+ if(chromatogram instanceof IChromatogramMSD chromatogramMSD) {
+ chromatogramReport.generate(file, chromatogramMSD, reportSettings);
+ processingInfo.setProcessingResult(file);
+ } else {
+ processingInfo.addErrorMessage("ESCAPE Report", "This report expects MSD chromatograms");
+ return processingInfo;
+ }
+ } catch(IOException e) {
+ logger.error(e);
+ processingInfo.addErrorMessage("MaSC Report", "The report couldn't be created.");
+ }
+ } else {
+ logger.warn("The settings are not of type: " + ChromatogramReportSettings.class);
+ }
+ }
+ return processingInfo;
+ }
+
+ @Override
+ public IProcessingInfo generate(File file, boolean append, IChromatogram chromatogram, IProgressMonitor monitor) {
+
+ IChromatogramReportSettings settings = PreferenceSupplier.getReportSettings();
+ return report(file, chromatogram, settings);
+ }
+
+ @Override
+ public IProcessingInfo generate(File file, boolean append, List chromatograms, IProgressMonitor monitor) {
+
+ IChromatogramReportSettings settings = PreferenceSupplier.getReportSettings();
+ return report(file, chromatograms.getFirst(), settings);
+ }
+
+ @Override
+ public IProcessingInfo> generate(File file, boolean append, IChromatogram chromatogram, IChromatogramReportSettings settings, IProgressMonitor monitor) {
+
+ return report(file, chromatogram, settings);
+ }
+
+ @Override
+ public IProcessingInfo> generate(File file, boolean append, List chromatograms, IChromatogramReportSettings settings, IProgressMonitor monitor) {
+
+ return report(file, chromatograms.getFirst(), settings);
+ }
+}
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/io/MascEscapeReportWriter.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/io/MascEscapeReportWriter.java
new file mode 100644
index 000000000..32b4140bc
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/io/MascEscapeReportWriter.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - initial API and implementation
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.io;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbookType;
+import org.eclipse.chemclipse.model.core.IChromatogram;
+import org.eclipse.chemclipse.model.core.IChromatogramOverview;
+import org.eclipse.chemclipse.model.core.IChromatogramPeak;
+import org.eclipse.chemclipse.model.core.IPeak;
+import org.eclipse.chemclipse.model.core.IScan;
+import org.eclipse.chemclipse.model.identifier.IComparisonResult;
+import org.eclipse.chemclipse.model.identifier.IIdentificationTarget;
+import org.eclipse.chemclipse.model.identifier.ILibraryInformation;
+import org.eclipse.chemclipse.model.math.IonRoundMethod;
+import org.eclipse.chemclipse.model.targets.TargetSupport;
+import org.eclipse.chemclipse.msd.model.core.IChromatogramMSD;
+import org.eclipse.chemclipse.msd.model.core.IChromatogramPeakMSD;
+import org.eclipse.chemclipse.msd.model.core.IIon;
+import org.eclipse.chemclipse.msd.model.core.IScanMSD;
+
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.settings.ChromatogramReportSettings;
+
+public class MascEscapeReportWriter {
+
+ public void generate(File file, IChromatogramMSD chromatogram, ChromatogramReportSettings reportSettings) throws IOException {
+
+ try (FileInputStream fileInputStreamTemplate = new FileInputStream(reportSettings.getTemplate())) {
+ try (XSSFWorkbook workbook = new XSSFWorkbook(fileInputStreamTemplate)) {
+
+ workbook.setWorkbookType(XSSFWorkbookType.XLSX);
+
+ XSSFSheet amdisReportSheet = workbook.getSheet("Amdis report Sample");
+ writePeaks(amdisReportSheet, chromatogram);
+
+ XSSFSheet chromThermoReportSheet = workbook.getSheet("Chrom-Thermo");
+ writeTIC(chromThermoReportSheet, chromatogram);
+
+ try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
+ workbook.write(fileOutputStream);
+ }
+ }
+ }
+ }
+
+ private void writePeaks(XSSFSheet amdisReportSheet, IChromatogramMSD chromatogram) {
+
+ createPeakHeader(amdisReportSheet);
+
+ double areaSum = calculateAreaSum(chromatogram.getPeaks());
+
+ int p = 1;
+ for(IChromatogramPeakMSD peak : chromatogram.getPeaks()) {
+ XSSFRow row = amdisReportSheet.createRow(p);
+ IScanMSD peakMax = (IScanMSD)peak.getPeakModel().getPeakMaximum();
+ IIdentificationTarget identificationTarget = TargetSupport.getBestIdentificationTarget(peak);
+ if(identificationTarget == null) {
+ continue;
+ }
+ ILibraryInformation libraryInformation = identificationTarget.getLibraryInformation();
+ if(libraryInformation == null) {
+ continue;
+ }
+
+ createTextCell(row, 0, chromatogram.getFile().getAbsolutePath());
+ createTextCell(row, 1, libraryInformation.getCasNumber());
+ createTextCell(row, 2, libraryInformation.getName());
+ createNumericCell(row, 3, peakMax.getRetentionTime() / IChromatogramOverview.MINUTE_CORRELATION_FACTOR);
+ createNumericCell(row, 4, peakMax.getRetentionIndex());
+ createNumericCell(row, 5, peak.getPeakModel().getNumberOfScans());
+ createNumericCell(row, 6, peak.getPurity());
+ createTextCell(row, 7, peak.getModelDescription());
+ // TODO: min abundance
+ createTextCell(row, 9, calculateAreaPercent(peak, areaSum) + "%");
+ createNumericCell(row, 10, peakMax.getScanNumber());
+ createNumericCell(row, 11, peak.getPeakModel().getTailing());
+ createNumericCell(row, 12, peak.getSignalToNoiseRatio());
+ createNumericCell(row, 13, peakMax.getBasePeak());
+ // TODO: max amount
+ createNumericCell(row, 15, peak.getIntegratedArea());
+ // TODO: Intgr.Signal
+ // TODO: Max. Area
+ // TODO: Extra Width
+ createTextCell(row, 19, peakMax.getIons().size() + ": " + peakMax.getIons().stream() //
+ .map(IIon::getIon) //
+ .map(IonRoundMethod.getActive()::round) //
+ .map(String::valueOf) //
+ .collect(Collectors.joining(",")));
+ // TODO: Frac. Good
+ double retentionIndexDeviation = getRetentionIndexDeviation(peak);
+ if(retentionIndexDeviation > 0) {
+ createNumericCell(row, 21, (int)retentionIndexDeviation);
+ }
+ // TODO Net
+ IComparisonResult comparisonResult = identificationTarget.getComparisonResult();
+ createNumericCell(row, 23, comparisonResult.getMatchFactor());
+ createNumericCell(row, 24, comparisonResult.getMatchFactorDirectNotAdjusted());
+ createNumericCell(row, 25, comparisonResult.getReverseMatchFactorNotAdjusted());
+ // TODO Corrections
+ createNumericCell(row, 27, libraryInformation.getMolWeight());
+ // TODO S/N (m/z)
+ // TODO Area % (m/z)
+ // TODO Conc.
+ double retentionTimeDeviation = getRetentionTimeDeviation(peak);
+ if(retentionTimeDeviation > 0) {
+ createNumericCell(row, 31, retentionTimeDeviation);
+ }
+ p++;
+ }
+
+ }
+
+ private void createPeakHeader(XSSFSheet sheet) {
+
+ XSSFRow headerRow = sheet.createRow(0);
+ createTextCell(headerRow, 0, "FileName");
+ createTextCell(headerRow, 1, "CAS");
+ createTextCell(headerRow, 2, "Name");
+ createTextCell(headerRow, 3, "RT");
+ createTextCell(headerRow, 4, "RI");
+ createTextCell(headerRow, 5, "Width");
+ createTextCell(headerRow, 6, "Purity");
+ createTextCell(headerRow, 7, "Model");
+ createTextCell(headerRow, 8, "Min. Abund.");
+ createTextCell(headerRow, 9, "Amount");
+ createTextCell(headerRow, 10, "Scan");
+ createTextCell(headerRow, 11, "Peak Tailing");
+ createTextCell(headerRow, 12, "S/N (total)");
+ createTextCell(headerRow, 13, "Base Peak");
+ createTextCell(headerRow, 14, "Max. Amount");
+ createTextCell(headerRow, 15, "Area");
+ createTextCell(headerRow, 16, "Intgr.Signal");
+ createTextCell(headerRow, 17, "Max. Area");
+ createTextCell(headerRow, 18, "Extra Width");
+ createTextCell(headerRow, 19, "Models");
+ createTextCell(headerRow, 20, "Frac. Good");
+ createTextCell(headerRow, 21, "RI-RI(lib)");
+ createTextCell(headerRow, 22, "Net");
+ createTextCell(headerRow, 23, "Weighted");
+ createTextCell(headerRow, 24, "Simple");
+ createTextCell(headerRow, 25, "Reverse");
+ createTextCell(headerRow, 26, "Corrections");
+ createTextCell(headerRow, 27, "(m/z)");
+ createTextCell(headerRow, 28, "S/N (m/z)");
+ createTextCell(headerRow, 29, "Area % (m/z)");
+ createTextCell(headerRow, 30, "Conc.");
+ createTextCell(headerRow, 31, "RT-RT(lib)");
+ }
+
+ private void writeTIC(XSSFSheet chromThermoReportSheet, IChromatogram chromatogram) {
+
+ XSSFRow firstRow = chromThermoReportSheet.createRow(0);
+ createTextCell(firstRow, 0, "CHROMATOGRAM");
+ createTextCell(firstRow, 0, chromatogram.getSampleName());
+
+ XSSFRow secondRow = chromThermoReportSheet.createRow(1);
+ createTextCell(secondRow, 0, chromatogram.getName());
+
+ XSSFRow thirdRow = chromThermoReportSheet.createRow(2);
+ createTextCell(thirdRow, 0, "Data Points: " + chromatogram.getNumberOfScans());
+
+ XSSFRow headerRow = chromThermoReportSheet.createRow(3);
+ createTextCell(headerRow, 0, "Time");
+ createTextCell(headerRow, 1, "Intensity");
+
+ for(IScan scan : chromatogram.getScans()) {
+ XSSFRow row = chromThermoReportSheet.createRow(3 + scan.getScanNumber());
+ createNumericCell(row, 0, scan.getRetentionTime() / IChromatogramOverview.MINUTE_CORRELATION_FACTOR);
+ createNumericCell(row, 1, scan.getTotalSignal());
+ }
+ }
+
+ private void createTextCell(XSSFRow row, int column, String value) {
+
+ XSSFCell cell = row.createCell(column);
+ cell.setCellType(CellType.STRING);
+ cell.setCellValue(value);
+ }
+
+ private void createNumericCell(XSSFRow row, int column, double value) {
+
+ XSSFCell cell = row.createCell(column);
+ cell.setCellType(CellType.NUMERIC);
+ cell.setCellValue(value);
+ }
+
+ private static double calculateAreaPercent(IPeak peak, double areaSum) {
+
+ if(areaSum != 0) {
+ return peak.getIntegratedArea() / areaSum * 100;
+ } else {
+ return 0.0d;
+ }
+ }
+
+ private static double calculateAreaSum(Collection peaks) {
+
+ double areaSum = 0;
+ for(IPeak peak : peaks) {
+ areaSum = areaSum + peak.getIntegratedArea();
+ }
+ return areaSum;
+ }
+
+ private static double getRetentionIndexDeviation(IChromatogramPeak peak) {
+
+ IScan scan = peak.getPeakModel().getPeakMaximum();
+ if(scan.getRetentionIndex() == 0) {
+ return 0;
+ }
+ IIdentificationTarget identificationTarget = TargetSupport.getBestIdentificationTarget(peak);
+ ILibraryInformation libraryInformation = identificationTarget.getLibraryInformation();
+ return scan.getRetentionIndex() - libraryInformation.getRetentionIndex();
+ }
+
+ private double getRetentionTimeDeviation(IChromatogramPeakMSD peak) {
+
+ IScan scan = peak.getPeakModel().getPeakMaximum();
+ IIdentificationTarget identificationTarget = TargetSupport.getBestIdentificationTarget(peak);
+ ILibraryInformation libraryInformation = identificationTarget.getLibraryInformation();
+ if(libraryInformation.getRetentionTime() == 0) {
+ return 0;
+ }
+ return scan.getRetentionTime() - libraryInformation.getRetentionTime();
+ }
+}
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/preferences/PreferenceSupplier.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/preferences/PreferenceSupplier.java
new file mode 100644
index 000000000..26a4b1716
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/preferences/PreferenceSupplier.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - initial API and implementation
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.preferences;
+
+import java.io.File;
+
+import org.eclipse.chemclipse.chromatogram.xxd.report.settings.IChromatogramReportSettings;
+import org.eclipse.chemclipse.support.preferences.AbstractPreferenceSupplier;
+import org.eclipse.chemclipse.support.preferences.IPreferenceSupplier;
+import org.osgi.framework.FrameworkUtil;
+
+import net.openchrom.chromatogram.xxd.report.supplier.masc.escape.settings.ChromatogramReportSettings;
+
+public class PreferenceSupplier extends AbstractPreferenceSupplier {
+
+ public static final String P_TEMPLATE = "EscapeExcelTemplateFile";
+ public static final String DEF_TEMPLATE = "";
+
+ public static final String P_REPORT = "EscapeExcelReportFile";
+ public static final String DEF_REFPORT = "";
+
+ public static IPreferenceSupplier INSTANCE() {
+
+ return INSTANCE(PreferenceSupplier.class);
+ }
+
+ @Override
+ public String getPreferenceNode() {
+
+ return FrameworkUtil.getBundle(PreferenceSupplier.class).getSymbolicName();
+ }
+
+ @Override
+ public void initializeDefaults() {
+
+ putDefault(P_TEMPLATE, DEF_TEMPLATE);
+ putDefault(P_REPORT, DEF_REFPORT);
+ }
+
+ public static IChromatogramReportSettings getReportSettings() {
+
+ ChromatogramReportSettings reportSettings = new ChromatogramReportSettings();
+ reportSettings.setTemplate(getTemplate());
+ reportSettings.setExportFolder(getReport());
+ return reportSettings;
+ }
+
+ public static File getTemplate() {
+
+ return new File(INSTANCE().get(P_TEMPLATE, DEF_TEMPLATE));
+ }
+
+ public static void setTemplate(File file) {
+
+ INSTANCE().put(P_TEMPLATE, file.getAbsolutePath());
+ }
+
+ public static File getReport() {
+
+ return new File(INSTANCE().get(P_REPORT, DEF_TEMPLATE));
+ }
+
+ public static void setReport(File file) {
+
+ INSTANCE().put(P_REPORT, file.getAbsolutePath());
+ }
+}
\ No newline at end of file
diff --git a/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/settings/ChromatogramReportSettings.java b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/settings/ChromatogramReportSettings.java
new file mode 100644
index 000000000..40ef64ae0
--- /dev/null
+++ b/openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/settings/ChromatogramReportSettings.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Lablicate GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Matthias Mailänder - initial API and implementation
+ *******************************************************************************/
+package net.openchrom.chromatogram.xxd.report.supplier.masc.escape.settings;
+
+import java.io.File;
+
+import org.eclipse.chemclipse.chromatogram.xxd.report.settings.IChromatogramReportSettings;
+import org.eclipse.chemclipse.model.settings.AbstractProcessSettings;
+import org.eclipse.chemclipse.support.settings.FileSettingProperty;
+import org.eclipse.chemclipse.support.settings.FileSettingProperty.DialogType;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+
+public class ChromatogramReportSettings extends AbstractProcessSettings implements IChromatogramReportSettings {
+
+ @JsonProperty(value = "ESCAPE Master Template", defaultValue = "")
+ @FileSettingProperty(dialogType = DialogType.OPEN_DIALOG, validExtensions = ".xltx", allowEmpty = false)
+ private File template = null;
+
+ @JsonProperty(value = "Export Folder", defaultValue = "")
+ @FileSettingProperty(onlyDirectory = true, dialogType = DialogType.SAVE_DIALOG, allowEmpty = false)
+ @JsonPropertyDescription("Save the Excel report in this location.")
+ private File exportFolder;
+
+ public File getTemplate() {
+
+ return template;
+ }
+
+ public void setTemplate(File template) {
+
+ this.template = template;
+ }
+
+ @Override
+ public File getExportFolder() {
+
+ return exportFolder;
+ }
+
+ public void setExportFolder(File exportFolder) {
+
+ this.exportFolder = exportFolder;
+ }
+
+ @Override
+ public boolean isAppend() {
+
+ return false;
+ }
+
+ @Override
+ public String getFileNamePattern() {
+
+ return VARIABLE_CHROMATOGRAM_NAME + VARIABLE_EXTENSION;
+ }
+}
\ No newline at end of file