feature request #10096
closedAdd new TaxonNode status and make notes field more general
70%
Description
Add taxon node status
- Excluded geo., øg (geographically out of scope); specification of excluded status
- Excluded tax., øt (taxonomically out of scope); specification of excluded status
- Excluded nom., øn (excluded for nomenclatural reasons); specification of excluded status
- Uncertain application, øa/↑ (name of verified uncertain application); specification of excluded status; the second symbol is math symbol for undefined, we may also think about https://unicode-table.com/en/2BD1/ (uncertainty sign)
- Unresolved, u (names that could not be clarified with the sources used and need further investigation)
The notes field should be available for all status including NONE (or included). So it should become a general placement note, not only a status note. The according model change (change of field name in TaxonNode) is handled in #10100
Files
Related issues
Updated by Andreas Müller 11 months ago
- Status changed from New to Discussed
- Severity changed from normal to critical
Updated by Andreas Müller 10 months ago
- File Referencing-Circumscription-Assignments-Placements_NK.docx Referencing-Circumscription-Assignments-Placements_NK.docx added
For details see attachement.
Updated by Andreas Müller 10 months ago
WGB:
ich habe eine Diskussion aus dem Mai 2020 wieder aufgegriffen, da ich dringend eine Erweiterung des Placement-Vokabulars brauche – bzw. die Möglichkeit, dort referenzierte Notes abzulegen. Seht Ihr Euch das anhängende mal an? Vor allem, ob die Statusangaben auf der 2. Seite so akzeptabel sind? Dann kann das Andreas hoffentlich noch im neuen Release unterbringen.
Das sollte vollständig rückwärtskompatibel sein, da die bisherigen Termini und Symbole beibehalten werden.
Der nächste Schritt wäre dann, dies vernünftig in den Print- und vor allem den Portal-Output zu integrieren, da gibt’s noch Diskussionsbedarf.
Nadja hatte sich das schon angesehen und ergänzt.
==
Norbert und Eckhard sind wohl nicht dazu gekommen, dies zu kommentieren, ich glaube aber, dass mit dem Abdecken von Nadjas Kommentaren die Sache in sich schlüssig ist. Außerdem kann ja (durch die Kompatibilität mit der bisherigen Lösung im Eingabebereich) auch kein Schaden angerichtet werden, wenn wir das jetzt schon so im Taxonomic Editor implementieren. Das (in Kombination mit der Ausgabe der Status note und der sub-Namen bei den sec.-Refs in CDM-light) wird es mir dann ermöglichen, die Achyranthoid-Clade-Checklist für die Publikation direkt aus der Datenbank zu generieren.
NoK:
ich habe keine Einwände, aber noch eine Nachfrage zur gegenwärtigen Implementierung:
Ich habe gelegentlich den Fall, dass ich ein taxon node provisorisch und informell nur mit einem lineage/clade Namen bezeichnen möchte (z.B. "Melanoseris lineage"), weil noch nicht entscheiden ist, ob dieses Monophylum tatsächlich als separate Gattung akzeptiert werden sollte, weshalb sich darunter auch Arten mit anderen Gattungsnamen befinden. Die gegenwärtige Implementierung versieht im Taxon Editor diese nodes automatisch mit dem unplaced ("??") Symbol (was inhaltlich falsch ist, da die Platzierung im nächsthöheren Taxon gar nicht in Frage steht), ohne dass ich das editieren könnte. Da das im Portal nicht ausgeben wird, stört es mich auch nicht sonderlich., wenn aber an einer Ausgabe gearbeitet wird, muss dieser Automatismus geändert werden oder zumindest der Status editierbar gemacht werden. Einen eigene Status dafür finde ich nicht nötig, da die informelle Benennung für sich spricht.
AM:
vielen Dank für die Antwort. Inhaltlich würde ich Kommentare hierzu den anderen Taxonomen überlassen, insbesondere auch die Frage, ob dieser Fall bereits von einem der anderen Status irgendwie abgedeckt ist.
Aber eine formale Anmerkung: du sagst „Einen eigene Status dafür finde ich nicht nötig, da die informelle Benennung für sich spricht.“ Das stimmt sicherlich für den menschlichen Leser, die Frage ist aber, ob nicht auch Maschinen diesen Status interpretieren können sollten. Das fängt mit der Frage an, ob bei der Sortierung (die ja von Maschinen gemacht wird) abgewichen werden soll vom Standard, insbesondere auch, wenn dem Pseudonamen eigentlich kein Rang zugewiesen ist. Zudem wäre es hilfreich, bei Validierungsfragen (derzeit leider noch kaum sichtlich implementiert) anhand eines Status zu erkennen, um was es sich hier handelt. Z.B. kann dann erkannt werden, dass der Gattungsname der Kinder nicht falsch ist, obwohl er nicht mit dem Eltern-Namen übereinstimmt. Auch wäre die Frage nach einem speziellen Symbol oder einer speziellen Formatierung zu stellen und vielleicht noch andere Dinge.
Vieles davon gilt vermutlich für alle „Pseudotaxa“, weshalb ich eigentlich auch nochmal eine Diskussion über das wann, wo und weshalb werden Pseudotaxa benutzt und wie können sie vom Modell am besten unterstützt werden, führen würde.
Allerdings muss das nicht jetzt sein, um nicht die von Walter dringend benötigten neuen Taxonknoten Status zu verzögern.
NoK:
Du hast natürlich recht. Ich hatte das mit dem eigenen Status auch eher pragmatisch im unmittelbaren Kontext gemeint. Abgedeckt scheint mir dieser Status durch Walters Erweiterungen tatsächlich noch nicht.
AM:
würde es dann Sinn machen, für solche „Lineage“ Taxa/Knoten einen eigenen Status hinzuzufügen. Wie würden wir ihn dann benennen? „Lineage“? „Clade“? Was würde da alles drunter fallen?
Und ist er richtig angesiedelt bei TaxonNode oder ist es eher eine reine Taxon Info? Ich würde persönlich ersteres erwarten, da das „Taxon“ ja primär zur Einsortierung der Kindtaxa gedacht ist, als eine Positionsbezogene Information.
WGB:
ich bin mir nicht sicher, ob wir dies irgendwie (maschinenlesbar) abbilden müssen, die einzige Nutzung die mir einfällt, ist ein Filter bei der Ausgabe reiner Namenslisten. Wir haben hier auch andere nicht-Code „Node-Typen“, die über Rangstufen abgebildet werden, wie z.B. Aggregate, Species groups, informelle höhere Taxa („Gymnospermes“), etc.
Updated by Andreas Müller 10 months ago
- Related to feature request #9010: Display taxon node status excluded, unplaced, placement doubtful on taxon page and taxon tree and show taxon node status note and taxon node source on taxon page added
Updated by Andreas Müller 10 months ago
- Related to feature request #9002: Find suitable symbols for excluded, unplaced, placement doubtful added
Updated by Andreas Müller 10 months ago
- Related to feature request #9005: Make the TaxonNode flags alternatives and change excluded notes to status notes added
Updated by Andreas Müller 10 months ago
- Related to feature request #8281: Doubtful flag for TaxonNode added
Updated by Andreas Müller 10 months ago
- Status changed from Discussed to In Progress
- % Done changed from 10 to 60
Status added and cdmlight adapted. Still need to test in taxeditor and dataportal.
Updated by Andreas Müller 10 months ago
- Subject changed from Add new TaxonNode status to Add new TaxonNode status and make notes field more general
Updated by Andreas Müller 10 months ago
- Copied to task #10100: Rename statusNote into placementNote in TaxonNode added
Updated by Andreas Müller 10 months ago
- Status changed from In Progress to Resolved
- Assignee changed from Andreas Müller to Katja Luther
- % Done changed from 60 to 70
This should be fixed now. Katja, can you please review when back.
Please also have a look to the changes in TaxEditor code (commit:75f1593acb707) and fully remove the commented code there if my implementation is correct. Maybe the code can be cleaned up further.
Updated by Andreas Müller 10 months ago
@Katja: can you please also have a look why there are 3 messages.properties that seem to hold the same values (in taxeditor.local, taxeditor.store and taxeditor.workbench). Is this really necessary or can we deduplicate them. It looks like only the one in t.store is used in the current example.
These 3 messages.properties are very cofusing (and time consuming) if you are not used to it.
Can you please deduplicate them if possible?
Updated by Andreas Müller 10 months ago
- Priority changed from Highest to Priority14
Updated by Andreas Müller 10 months ago
AM:
ich habe das jetzt mal implementiert. Es sollte im nächsten Release (vermutlich noch diese Woche) drin sein.
Ich habe dabei die Status geo excluded, tax excluded, nom excluded und uncertain application alle als Unterstatus (spezifischere Status) von exluded implementiert. D.h. wenn nur auf exluded getestet wird, wird bei diesen Status ebenfalls true zurückgegeben. Bei „uncertain application“ bin ich mir da aber nicht 100% ig sicher, ob das stimmt. Das vorgeschlagene Symbol øa lässt es mich aber vermuten.
Zumindest in cdmlight bekommt man aber alles genau aufgedröselt, also auch, ob der Status exact excluded ist und nicht „nur“ ein Unterstatus. Zudem habe ich eine Textrepräsentation des Status in cdmlight integriert für den Fall der Fälle.
Da die Status jetzt hierarchisch sind, frage ich mich zudem, ob es nicht auch bei unplaced and unresolved eine Hierarchie gibt. Ist evtl. unresolved ein spezifischer Fall von unplaced? Also der Fall, dass alle vorliegenden Quellen durchgegangen wurden und eine genauere Zuordnung nicht möglich war, während unplaced evtl. auch den Fall umfasst, dass die Zuordnung nur vorläufig ist da noch nicht unbedingt alle Quellen befragt wurden. Wenn das nicht so ist, könntet ihr nochmal kurz beschreiben, wie der Unterschied zwischen unresolved und unplaced am besten zu beschreiben ist. Dann kann ich das in die Code Dokumentation mit aufnehmen.
Eine andere Frage wäre, wie die Standardsortierung aussehen sollte. Also welcher Status zuerst (nach „included“), und welcher weiter unten.
WGB:
zwei Nachfragen zum Interface:
“als Unterstatus implementiert” – bedeutet das, dass man erst eine 2. Liste aufmachen muss? Bei der doch recht kurzen Auswahl (9 Zeilen) fände ich das nicht schön.
Und nur „excluded“ ohne Spezifikation bleibt auch erhalten, nicht?
Zur den Labeln würde ich vorschlagen, die etwas länger und dafür ein bisschen mehr selbsterklärend zu machen:
Taxon included in parent taxon (default)
Taxon included in parent taxon with doubts
Taxon unplaced
Name or taxon excluded (unspecific)
Taxon excluded (geographically out of scope)
Taxon or name excluded (taxonomically out of scope)
Name excluded (for nomenclatural reasons)
Name of verified uncertain application
Unresolved name – to be further revised
AM:
nein, keine 2. Liste. Es ist lediglich semantisch klar, dass die Status substatus sind, eventuell könnte man das mal durch Einrücken auch optisch anzeigen. Bislang aber noch nicht der Fall.
Das mit den langen Labeln schau ich mir an, ob das nicht den Dialog etwas sprengt.
WGB:
bei den Labels könnte man noch etwas abkürzen:
Taxon included in parent taxon (default)
Taxon incl. in parent taxon with doubts
Taxon unplaced
Name/taxon excluded (unspecific)
Taxon excl. (geographically out of scope)
Taxon/name excl. (taxonomically out of sc.)
Name excl. (for nomenclatural reasons)
Name of verified uncertain application
Unresolved name – to be further revised
AM:
ich habe das mal implementiert:
Da ist mehr Platz als ich dachte. Man könnte also auch die noch längere Form verwenden? Vielleicht Anzeige mit Symbol vorne dran, das erhöht den Wiedererkennunseffekt.
(Das Sonderzeichen (En-Dash) korrigiere ich noch).
Ich würde gerne aber nochmal auf meine Frage nach der Sortierung zurückkommen. Gibt es da weitere Vorgaben.
Außerdem wäre das Verhältnis von unplaced und unresolved für die interne Dokumentation interessant.
Beide Fragen siehe meine Mail unten.
Updated by Andreas Müller 10 months ago
- Copied to feature request #10103: Add "Included" as default status to taxon node status added
Updated by Katja Luther 10 months ago
When adding taxonnode status and status note, but this seems to be a problem with the note.
last remote method : https://test.e-taxonomy.eu:443/cdmserver/rem_conf_am/remoting/taxonnode.service last remote request client time : 2022-08-22T14:54:08.644 last remote request response header time : Mon, 22 Aug 2022 12:54:08 GMT client error time : 2022-08-22T14:54:08.959 login : admin editor version : 5.33.0.202208221219 server : test.e-taxonomy.eu (edit-test) / rem_conf_am schema version : 5.32.0.0.20220807 os : Windows Server 2012 R2 6.3 amd64 java : 1.8.0_131 org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:241) at org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:755) at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:594) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:765) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:734) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:522) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:293) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy826.merge(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:78) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy1229.merge(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:212) at eu.etaxonomy.cdm.api.remoting.DebuggingRemoteInvocationExecutor.invoke(DebuggingRemoteInvocationExecutor.java:52) at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78) at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114) at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:80) at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1395) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:755) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:215) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at eu.etaxonomy.cdm.servlet.DateHeaderFilter.doFilter(DateHeaderFilter.java:56) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at eu.etaxonomy.cdm.server.logging.InstanceLogWrapper.handle(InstanceLogWrapper.java:48) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:500) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) at java.lang.Thread.run(Thread.java:748) at org.springframework.remoting.support.RemoteInvocationUtils.fillInClientStackTraceIfPossible(RemoteInvocationUtils.java:45) at org.springframework.remoting.support.RemoteInvocationResult.recreate(RemoteInvocationResult.java:149) at org.springframework.remoting.support.RemoteInvocationBasedAccessor.recreateRemoteInvocationResult(RemoteInvocationBasedAccessor.java:85) at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:158) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy87.merge(Unknown Source) at eu.etaxonomy.taxeditor.ui.section.classification.EditTaxonNodeWizard.saveEntity(EditTaxonNodeWizard.java:57) at eu.etaxonomy.taxeditor.ui.section.classification.AbstractEditWizard.performFinish(AbstractEditWizard.java:66) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:790) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:423) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:618) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:249) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4418) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4236) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3824) at org.eclipse.jface.window.Window.runEventLoop(Window.java:818) at org.eclipse.jface.window.Window.open(Window.java:794) at eu.etaxonomy.taxeditor.handler.defaultHandler.e4.DefaultOpenTaxonNodeWizardHandlerE4.open(DefaultOpenTaxonNodeWizardHandlerE4.java:61) at eu.etaxonomy.taxeditor.handler.defaultHandler.e4.DefaultOpenTaxonNodeWizardHandlerE4.open(DefaultOpenTaxonNodeWizardHandlerE4.java:1) at eu.etaxonomy.taxeditor.handler.defaultHandler.e4.DefaultOpenHandlerBaseE4.handleUuidList(DefaultOpenHandlerBaseE4.java:60) at eu.etaxonomy.taxeditor.handler.defaultHandler.e4.DefaultOpenHandlerBaseE4.execute(DefaultOpenHandlerBaseE4.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:282) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:288) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:264) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:494) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:488) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210) at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:433) at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem.handleWidgetSelection(AbstractContributionItem.java:454) at org.eclipse.e4.ui.workbench.renderers.swt.AbstractContributionItem$3.handleEvent(AbstractContributionItem.java:482) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4418) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4236) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3824) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at eu.etaxonomy.taxeditor.Application.start(Application.java:20) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610) at org.eclipse.equinox.launcher.Main.run(Main.java:1519) Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:46) at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1593) at org.hibernate.action.internal.CollectionUpdateAction.execute(CollectionUpdateAction.java:89) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604) at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478) at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:344) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:99) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1362) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:453) at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3212) at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2380) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:448) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281) at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101) at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:582) ... 174 more Caused by: java.sql.SQLIntegrityConstraintViolationException: Column 'statusNote_KEY' cannot be null at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009) at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:384) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ... 194 more
Updated by Katja Luther 10 months ago
Newly set status are not shown in the navigator (tested for 'taxon included in parent taxon with doubts' and 'unplaced')
update: after reconnect the status is shown
Updated by Katja Luther 9 months ago
- Related to bug #10120: After status change symbol not shown in navigator added
Updated by Katja Luther 9 months ago
Katja Luther wrote in #note-21:
When adding taxonnode status and status note, but this seems to be a problem with the note.
last remote method : https://test.e-taxonomy.eu:443/cdmserver/rem_conf_am/remoting/taxonnode.service last remote request client time : 2022-08-22T14:54:08.644 last remote request response header time : Mon, 22 Aug 2022 12:54:08 GMT client error time : 2022-08-22T14:54:08.959 login : admin editor version : 5.33.0.202208221219 server : test.e-taxonomy.eu (edit-test) / rem_conf_am schema version : 5.32.0.0.20220807 os : Windows Server 2012 R2 6.3 amd64 java : 1.8.0_131 org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:241)
create new ticket for KL (#10121)
Updated by Katja Luther 9 months ago
- Related to bug #10121: ConstraintViolationException when editing placement notes added
Updated by Katja Luther 9 months ago
- Status changed from Resolved to Closed
- Assignee changed from Katja Luther to Andreas Müller