From 31dcab90957b6282c6af569c5d73a472c54986e0 Mon Sep 17 00:00:00 2001 From: Uwe Peuker Date: Fri, 26 Jun 2020 18:52:53 +0200 Subject: [PATCH] Aktualisierung des Rahmenwerksspeichers passiert jetzt nicht mehr im Updater-Thread sondern in einem Job, fixes #21 --- CHANGELOG.md | 3 +- README.md | 2 +- de.bsvrz.buv.rw.basislib/META-INF/MANIFEST.MF | 2 +- .../feature.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- de.bsvrz.buv.rw.rw.core.feature/feature.xml | 2 +- .../feature.xml | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../einstellungen/BenutzerNetzSpeicher.java | 13 ++-- .../buv/rw/rw/einstellungen/NetzSpeicher.java | 53 ++++++++++---- de.bsvrz.buv.rw.rw/META-INF/MANIFEST.MF | 2 +- de.bsvrz.buv.rw.rw/plugin.xml | 2 +- .../buv/rw/rw/ui/internal/RwProcessor.java | 71 ++++++++++--------- de.bsvrz.buv.rw.tycho.product/pom.xml | 2 +- .../rahmenwerk.product | 4 +- pom.xml | 2 +- 16 files changed, 104 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d8dd489..ac9a77ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,8 @@ Produkt Rahmenwerk ## Noch nicht veröffentlicht -- derzeit keine Änderungen +- Wenn alte und neue Einstellungen leer waren, wurden diese potentiell in ein einer Endlosschleife aktualisiert +- Update der Einstellungen erfolgt in einem Hintergrundthread, weil potentiell ClientDavInterface#getData aufgerufen werden muss (Fixes #21) ## Version 3.5.0 - Release 2020-05-28 - Kompatibilität mit aktueller Eclipse-Version ( https://gitlab.nerz-ev.de/ERZ/RW_de.bsvrz.buv.rw/-/issues/12 ) diff --git a/README.md b/README.md index cdb04733..1470cd8b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Rahmenwerk für eine Bedienoberfläche der NERZ-Software -Das Projekt enthält das Rahmenwerk auf Basis der Eclipse 2019-06. +Das Projekt enthält das Rahmenwerk auf Basis der Eclipse 2020-03. ## Updateseite diff --git a/de.bsvrz.buv.rw.basislib/META-INF/MANIFEST.MF b/de.bsvrz.buv.rw.basislib/META-INF/MANIFEST.MF index ae80e920..5ea41eb1 100644 --- a/de.bsvrz.buv.rw.basislib/META-INF/MANIFEST.MF +++ b/de.bsvrz.buv.rw.basislib/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Basisbibliothek Bundle-SymbolicName: de.bsvrz.buv.rw.basislib;singleton:=true -Bundle-Version: 3.5.0.qualifier +Bundle-Version: 3.5.1.qualifier Bundle-ClassPath: . Bundle-Activator: de.bsvrz.buv.rw.basislib.internal.RwBasisLibActivator Bundle-Vendor: BitCtrl Systems GmbH, Swarco Traffic Systems GmbH diff --git a/de.bsvrz.buv.rw.rw.berechtigungen.feature/feature.xml b/de.bsvrz.buv.rw.rw.berechtigungen.feature/feature.xml index 2dac21e3..ee9facd6 100644 --- a/de.bsvrz.buv.rw.rw.berechtigungen.feature/feature.xml +++ b/de.bsvrz.buv.rw.rw.berechtigungen.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/de.bsvrz.buv.rw.rw.berechtigungen/META-INF/MANIFEST.MF b/de.bsvrz.buv.rw.rw.berechtigungen/META-INF/MANIFEST.MF index 8475bf0e..8df904b5 100644 --- a/de.bsvrz.buv.rw.rw.berechtigungen/META-INF/MANIFEST.MF +++ b/de.bsvrz.buv.rw.rw.berechtigungen/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Standard-Rahmenwerk-Berechtigungen Bundle-SymbolicName: de.bsvrz.buv.rw.rw.berechtigungen;singleton:=true -Bundle-Version: 3.5.0.qualifier +Bundle-Version: 3.5.1.qualifier Bundle-Activator: de.bsvrz.buv.rw.rw.berechtigungen.RwBerechtigungen Bundle-Vendor: BitCtrl Systems GmbH Require-Bundle: org.eclipse.ui;bundle-version="3.109.0", diff --git a/de.bsvrz.buv.rw.rw.core.feature/feature.xml b/de.bsvrz.buv.rw.rw.core.feature/feature.xml index 9fb95d71..f1860388 100644 --- a/de.bsvrz.buv.rw.rw.core.feature/feature.xml +++ b/de.bsvrz.buv.rw.rw.core.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/de.bsvrz.buv.rw.rw.einstellungen.feature/feature.xml b/de.bsvrz.buv.rw.rw.einstellungen.feature/feature.xml index 373fe3c7..6c965859 100644 --- a/de.bsvrz.buv.rw.rw.einstellungen.feature/feature.xml +++ b/de.bsvrz.buv.rw.rw.einstellungen.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/de.bsvrz.buv.rw.rw.einstellungen/META-INF/MANIFEST.MF b/de.bsvrz.buv.rw.rw.einstellungen/META-INF/MANIFEST.MF index d842f2c3..99b82ff6 100644 --- a/de.bsvrz.buv.rw.rw.einstellungen/META-INF/MANIFEST.MF +++ b/de.bsvrz.buv.rw.rw.einstellungen/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: de.bsvrz.buv.rw.rw.einstellungen;singleton:=true -Bundle-Version: 3.5.0.qualifier +Bundle-Version: 3.5.1.qualifier Bundle-Activator: de.bsvrz.buv.rw.rw.einstellungen.RwEinstellungenActivator Require-Bundle: org.eclipse.ui;bundle-version="3.109.0", org.eclipse.core.runtime;bundle-version="3.14.0", diff --git a/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/BenutzerNetzSpeicher.java b/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/BenutzerNetzSpeicher.java index 52b806d2..bb81df5c 100644 --- a/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/BenutzerNetzSpeicher.java +++ b/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/BenutzerNetzSpeicher.java @@ -36,6 +36,8 @@ import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -143,11 +145,14 @@ class BenutzerNetzSpeicher extends NetzSpeicher implements ClientReceiverInterfa @Override public void update(ResultData[] results) { - for (final ResultData result : results) { - if (result.hasData()) { - liesEinstellungen(result); + Job.create("Update Rahmenwerks - Benutzerspeicher", (monitor) -> { + for (final ResultData result : results) { + if (result.hasData()) { + liesEinstellungen(result); + } } - } + return Status.OK_STATUS; + }).schedule();; } @Override diff --git a/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/NetzSpeicher.java b/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/NetzSpeicher.java index 7bd35d4b..c941e668 100644 --- a/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/NetzSpeicher.java +++ b/de.bsvrz.buv.rw.rw.einstellungen/src/de/bsvrz/buv/rw/rw/einstellungen/NetzSpeicher.java @@ -24,7 +24,7 @@ * Fax: +49-341-49067-15 * mailto: support@bitctrl.de * - * Partly inspired by the original Rahmenwerk created by Dambach Werke GmbH. + * Partly inspired by the original Rahmenwerk created by Dambach Werke GmbH. */ package de.bsvrz.buv.rw.rw.einstellungen; @@ -40,6 +40,9 @@ import java.util.Queue; import java.util.Set; import java.util.concurrent.ConcurrentLinkedQueue; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; + import de.bsvrz.buv.rw.basislib.Rahmenwerk; import de.bsvrz.buv.rw.basislib.dav.DavVerbindungsEvent; import de.bsvrz.buv.rw.basislib.dav.DavVerbindungsListener; @@ -102,23 +105,30 @@ abstract class NetzSpeicher extends EinstellungsSpeicher implements ClientReceiv @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } final Anmeldung other = (Anmeldung) obj; if (dataDesc == null) { - if (other.dataDesc != null) + if (other.dataDesc != null) { return false; - } else if (!dataDesc.equals(other.dataDesc)) + } + } else if (!dataDesc.equals(other.dataDesc)) { return false; + } if (systemObject == null) { - if (other.systemObject != null) + if (other.systemObject != null) { return false; - } else if (!systemObject.equals(other.systemObject)) + } + } else if (!systemObject.equals(other.systemObject)) { return false; + } return true; } } @@ -347,11 +357,14 @@ abstract class NetzSpeicher extends EinstellungsSpeicher implements ClientReceiv @Override public void update(ResultData[] results) { - for (final ResultData result : results) { - if (result.hasData()) { - liesEinstellungen(result); + Job.create("Update Rahmenwerks - Netzspeicher", monitor -> { + for (final ResultData result : results) { + if (result.hasData()) { + liesEinstellungen(result); + } } - } + return Status.OK_STATUS; + }).schedule();; } protected final void liesEinstellungen(ResultData result) { @@ -366,6 +379,7 @@ abstract class NetzSpeicher extends EinstellungsSpeicher implements ClientReceiv } else if (ATG_RAHMENWERK_EINSTELLUNGEN.equals(pid)) { final Array einstellungen = result.getData().getArray("Einstellungen"); if (einstellungen.getLength() == 0) { + aktualisiereEinstellungen(getNeuesSpeicherObjekt(rahmenwerk)); } else { ladeEinstellungen(result.getData()); @@ -410,6 +424,17 @@ abstract class NetzSpeicher extends EinstellungsSpeicher implements ClientReceiv protected abstract void ladeAlteEinstellungen(Data daten); + /** + * Aktualisiert die Einstellungen aus den alten Einstellungsparametern des + * Rahmenwerks. + * + * Die Funktion wird normalerweise nur aufgerufen, wenn die neuen Einstellungen + * leer sind. Wenn alten Einstellungen ebenfalls leer sind, werden diese nicht + * zurückgeschrieben, da es ansonsten zum zyklischen Aufruf der Funktion kommt. + * + * @param neuesObjekt das Objekt an dem die neuen Einstellungen gespeichert + * werden + */ protected final void aktualisiereEinstellungen(SystemObject neuesObjekt) { final ClientDavInterface davVerbindung = rahmenwerk.getDavVerbindung(); if (davVerbindung == null) { @@ -439,6 +464,10 @@ abstract class NetzSpeicher extends EinstellungsSpeicher implements ClientReceiv final Data neueDaten = davVerbindung.createData(atg); final Collection einstellungen = getEinstellungen(); + if (einstellungen.isEmpty()) { + return; + } + final Array array = neueDaten.getArray("Einstellungen"); array.setLength(einstellungen.size()); int idx = 0; diff --git a/de.bsvrz.buv.rw.rw/META-INF/MANIFEST.MF b/de.bsvrz.buv.rw.rw/META-INF/MANIFEST.MF index e0e147c9..0fb94ee7 100644 --- a/de.bsvrz.buv.rw.rw/META-INF/MANIFEST.MF +++ b/de.bsvrz.buv.rw.rw/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: de.bsvrz.buv.rw.rw;singleton:=true -Bundle-Version: 3.5.0.qualifier +Bundle-Version: 3.5.1.qualifier Bundle-ClassPath: ., de.bsvrz.buv.rw.rw.jar Bundle-Activator: de.bsvrz.buv.rw.rw.RahmenwerkActivator diff --git a/de.bsvrz.buv.rw.rw/plugin.xml b/de.bsvrz.buv.rw.rw/plugin.xml index 0b739860..beaf48f2 100644 --- a/de.bsvrz.buv.rw.rw/plugin.xml +++ b/de.bsvrz.buv.rw.rw/plugin.xml @@ -17,7 +17,7 @@ + value="Rahmenwerk 3 (Eclipse 2020-03 basiert), Version 3.5.1 Realisiert im Auftrag des Landes Baden-Württemberg, Regierungspräsidium Tübingen, Landesstelle für Straßentechnik durch BitCtrl Systems GmbH"> { + for (final MWindow modelWindow : application.getChildren()) { + final IWorkbenchWindow iWorkbenchWindow = modelWindow.getContext().get(IWorkbenchWindow.class); + setMainMenu(modelWindow, iWorkbenchWindow); + if (modelWindow instanceof MTrimmedWindow) { + final MTrimmedWindow trimmedWindow = (MTrimmedWindow) modelWindow; + setRwStatusLeiste(trimmedWindow, iWorkbenchWindow); + setRwSymbolLeiste(trimmedWindow, iWorkbenchWindow); + } + modelWindow.setToBeRendered(true); } - modelWindow.setToBeRendered(true); - } + return Status.OK_STATUS; + }); + job.schedule(); } @Override @@ -139,21 +145,22 @@ public class RwProcessor { @Override public void verbindungGetrennt(final DavVerbindungsEvent event) { - for (final MWindow modelWindow : application.getChildren()) { - final IWorkbenchWindow iWorkbenchWindow = modelWindow.getContext().get(IWorkbenchWindow.class); - setMainMenu(modelWindow, iWorkbenchWindow); - if (modelWindow instanceof MTrimmedWindow) { - final MTrimmedWindow trimmedWindow = (MTrimmedWindow) modelWindow; - setRwStatusLeiste(trimmedWindow, iWorkbenchWindow); - setRwSymbolLeiste(trimmedWindow, iWorkbenchWindow); - } - modelWindow.setToBeRendered(true); - } - - final UIJob uiJob = new UIJob("Reconnect Dialog") { + final UIJob uiJob = new UIJob("Verbindung wurde getrennt...") { @Override public IStatus runInUIThread(final IProgressMonitor monitor) { + + for (final MWindow modelWindow : application.getChildren()) { + final IWorkbenchWindow iWorkbenchWindow = modelWindow.getContext().get(IWorkbenchWindow.class); + setMainMenu(modelWindow, iWorkbenchWindow); + if (modelWindow instanceof MTrimmedWindow) { + final MTrimmedWindow trimmedWindow = (MTrimmedWindow) modelWindow; + setRwStatusLeiste(trimmedWindow, iWorkbenchWindow); + setRwSymbolLeiste(trimmedWindow, iWorkbenchWindow); + } + modelWindow.setToBeRendered(true); + } + final Dialog dialog = new ReconnectDialog(shell); dialog.open(); return Status.OK_STATUS; @@ -242,21 +249,21 @@ public class RwProcessor { private String ladeMenuXmlDefinition(String id) { - if( !getName(id).isEmpty()) { + if (!getName(id).isEmpty()) { return null; } - + String argument = null; - if( id.startsWith(MenueEditor.PARAM_STRUCT_MENULEISTE)) { + if (id.startsWith(MenueEditor.PARAM_STRUCT_MENULEISTE)) { argument = "-menueXmlDatei"; - } else if( id.startsWith(StatusleisteEditor.PARAM_STRUCT_STATUSLEISTE)) { + } else if (id.startsWith(StatusleisteEditor.PARAM_STRUCT_STATUSLEISTE)) { argument = "-statusXmlDatei"; - }else if( id.startsWith(ToolbarEditor.PARAM_STRUCT_SYMBOLLEISTE)) { + } else if (id.startsWith(ToolbarEditor.PARAM_STRUCT_SYMBOLLEISTE)) { argument = "-symbolXmlDatei"; } else { return null; } - + final ArgumentList startParameter = RahmenwerkImpl.getInstanz().getStartParameter(); if (startParameter.hasArgument(argument)) { final String fileName = startParameter.fetchArgument(argument).getValue(); @@ -269,20 +276,20 @@ public class RwProcessor { } } } - + return null; } private static String getName(String id) { - + int index = id.indexOf(":"); - if( index < 0) { + if (index < 0) { return ""; } - + return id.substring(index + 1); } - + @Inject @Optional public void onPerspectiveClose(@UIEventTopic(UIEvents.ElementContainer.TOPIC_CHILDREN) final Event event, diff --git a/de.bsvrz.buv.rw.tycho.product/pom.xml b/de.bsvrz.buv.rw.tycho.product/pom.xml index af59b3ea..e7eaae41 100644 --- a/de.bsvrz.buv.rw.tycho.product/pom.xml +++ b/de.bsvrz.buv.rw.tycho.product/pom.xml @@ -6,7 +6,7 @@ de.bsvrz.buv.rw de.bsvrz.buv.rw.tycho.master - 3.5.0 + 3.5.1 ../pom.xml de.bsvrz.buv.rw.tycho.product diff --git a/de.bsvrz.buv.rw.tycho.product/rahmenwerk.product b/de.bsvrz.buv.rw.tycho.product/rahmenwerk.product index b7af2c92..780c60f4 100644 --- a/de.bsvrz.buv.rw.tycho.product/rahmenwerk.product +++ b/de.bsvrz.buv.rw.tycho.product/rahmenwerk.product @@ -1,12 +1,12 @@ - + - Rahmenwerk 3 (Eclipse 2020-03 basiert), Version 3.5.0 + Rahmenwerk 3 (Eclipse 2020-03 basiert), Version 3.5.1 Realisiert im Auftrag des Landes Baden-Württemberg, Regierungspräsidium Tübingen, Landesstelle für diff --git a/pom.xml b/pom.xml index dbc82285..451c5803 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 de.bsvrz.buv.rw - 3.5.0 + 3.5.1 pom Maven Build Rahmenwerk 3.x -- GitLab