From ff2e89bb53b1d3edfc79ea9106988b3a8927704d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 25 Sep 2026 16:50:27 +0200 Subject: [PATCH 1/2] Add a MaSC ESCAPE Report. --- .../.project | 17 ++ .../org.eclipse.core.resources.prefs | 2 + .../build.properties | 1 + .../feature.xml | 31 +++ .../feature.xml | 4 + .../.classpath | 7 + .../.gitignore | 1 + .../.project | 33 +++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 10 + .../org.eclipse.pde.ds.annotations.prefs | 8 + .../META-INF/MANIFEST.MF | 20 ++ .../OSGI-INF/l10n/bundle_en.properties | 1 + .../build.properties | 6 + .../plugin.xml | 20 ++ .../supplier/masc/escape/ui/Activator.java | 42 +++ .../masc/escape/ui/icon/MenuIcon.java | 28 ++ .../escape/ui/preferences/PreferencePage.java | 44 ++++ .../.classpath | 7 + .../.gitignore | 1 + .../.project | 33 +++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 10 + .../org.eclipse.pde.ds.annotations.prefs | 8 + .../META-INF/MANIFEST.MF | 23 ++ .../OSGI-INF/l10n/bundle_en.properties | 1 + .../build.properties | 6 + .../plugin.xml | 16 ++ .../masc/escape/core/MascEscapeReport.java | 86 ++++++ .../escape/io/MascEscapeReportWriter.java | 247 ++++++++++++++++++ .../preferences/PreferenceSupplier.java | 77 ++++++ .../settings/ChromatogramReportSettings.java | 68 +++++ 32 files changed, 862 insertions(+) create mode 100644 openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.project create mode 100644 openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/.settings/org.eclipse.core.resources.prefs create mode 100644 openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/build.properties create mode 100644 openchrom/features/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.feature/feature.xml create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.classpath create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.gitignore create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.project create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.core.resources.prefs create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.jdt.core.prefs create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/.settings/org.eclipse.pde.ds.annotations.prefs create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/META-INF/MANIFEST.MF create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/OSGI-INF/l10n/bundle_en.properties create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/build.properties create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/plugin.xml create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/Activator.java create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/icon/MenuIcon.java create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape.ui/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/ui/preferences/PreferencePage.java create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.classpath create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.gitignore create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.project create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.core.resources.prefs create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.jdt.core.prefs create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/.settings/org.eclipse.pde.ds.annotations.prefs create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/META-INF/MANIFEST.MF create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/OSGI-INF/l10n/bundle_en.properties create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/build.properties create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/plugin.xml create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/core/MascEscapeReport.java create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/io/MascEscapeReportWriter.java create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/preferences/PreferenceSupplier.java create mode 100644 openchrom/plugins/net.openchrom.chromatogram.xxd.report.supplier.masc.escape/src/net/openchrom/chromatogram/xxd/report/supplier/masc/escape/settings/ChromatogramReportSettings.java 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.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 From 085bba81f1c0de51bf130900de0b4b366f25399d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 28 Sep 2026 19:20:38 +0200 Subject: [PATCH 2/2] A spreadsheet report does not need the event broker. --- .../supplier/excel/template/ui/Activator.java | 16 ---------------- 1 file changed, 16 deletions(-) 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