TessinerCode Diagnose kann Konsultation nicht angefügt werden
Closed this issue · 5 comments
Eine Instanz von TessinerCode kann über die Methode Konsultation#addDiagnose(IDiagnose) nicht hinzugefügt werden.
Beispielcode:
Konsultation kons = someFall.neueKonsultation();
kons.addDiagnose(TessinerCode.getFromCode("R9"));
Der Code produziert folgende Exception:
java.lang.ClassCastException: ch.elexis.base.ch.ticode.TessinerCode cannot be cast to ch.elexis.data.PersistentObject
at ch.elexis.data.Person.countItem(Person.java:239) ~[ch.elexis.core.data/:na]
at ch.elexis.data.Konsultation.addDiagnose(Konsultation.java:666) ~[ch.elexis.core.data/:na]
at ch.itmed.radcentre.importer.ConsultationImp.addDiagnose(ConsultationImp.java:233) ~[ch.itmed.radcentre/:na]
at ch.itmed.radcentre.importer.ConsultationImp.updateExistingConsultation(ConsultationImp.java:88) ~[ch.itmed.radcentre/:na]
at ch.itmed.radcentre.importer.ConsultationImp.checkExistingConsultation(ConsultationImp.java:64) ~[ch.itmed.radcentre/:na]
at ch.itmed.radcentre.importer.ConsultationImp.addConsultation(ConsultationImp.java:42) ~[ch.itmed.radcentre/:na]
at ch.itmed.radcentre.importer.DataImporter.startImport(DataImporter.java:22) ~[ch.itmed.radcentre/:na]
at ch.itmed.radcentre.xml.XmlParser.run(XmlParser.java:20) ~[ch.itmed.radcentre/:na]
at ch.itmed.radcentre.job.DirectoryWatcherRunnable.processFile(DirectoryWatcherRunnable.java:151) [ch.itmed.radcentre/:na]
at ch.itmed.radcentre.job.DirectoryWatcherRunnable.lambda$4(DirectoryWatcherRunnable.java:82) [ch.itmed.radcentre/:na]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) ~[na:1.8.0_172]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:1.8.0_172]
at java.util.stream.ReferencePipeline.forEach(Unknown Source) ~[na:1.8.0_172]
at ch.itmed.radcentre.job.DirectoryWatcherRunnable.processExistingFiles(DirectoryWatcherRunnable.java:82) [ch.itmed.radcentre/:na]
at ch.itmed.radcentre.job.DirectoryWatcherRunnable.run(DirectoryWatcherRunnable.java:51) [ch.itmed.radcentre/:na]
at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_172]
-----------End Exception handler-----
Wenn bei einer bestehenden Konsultation ein TessinerCode hinzugefügt wird, erscheint keine Exception, sondern lediglich eine Warnung.
Beispielcode:
Konsultation kons = someFall.getLetzteBehandlung();
kons.addDiagnose(TessinerCode.getFromCode("R9"));
Produzierte Warnung:
WARN c.e.data.PersistentObjectFactory - Could not createFromString [ch.elexis.base.ch.ticode.TessinerCode::R9]
In beiden Fällen ist es jedoch so, dass der TessinerCode der Konsultation nicht angefügt wird.
Das Problem muss über den core gefixed werden
@d-roesch ich habe einen patch eingebracht, momentan läuft der master build, kannst du diesen dann bitte auf dem aktuellen master testen? danke
@col-panic besten Dank für die schnelle Reaktion.
Die Exception kann ich nun nicht mehr reproduzieren.
Jedoch ist es so, dass Instanzen von TessinerCode immer noch nicht zur Konsultation hinzugefügt werden. Es erscheint folgende Meldung:
WARN c.e.data.PersistentObjectFactory - Could not createFromString [ch.elexis.base.ch.ticode.TessinerCode::U9]
Soweit ich den Fehler interpretiere, versucht die PersistentObjectFactory über PersistentObjectFactory .createFromString eine Instanz von TessinerCode zu erzeugen.
Zu diesem Zweck nutzt die PersistentObjectFactory die DiagnoseCodeFactory:
Dies ist jedoch nicht möglich, weil die Klasse TessinerCode nicht von PersistentObject erbt. Gerade dies scheint das Feature dieser Klasse zu sein:
Ist es überhaupt vorgesehen, dass Instanzen von TessinerCode als Diagnose zu einer Konsultation hinzugefügt werden können?
hmm ok, bitte bleib einfach momentan dabei die Klasse TessinerCode zu verwenden. Wir arbeiten momentan an einer neuen Persistenz die vmtl. mit 3.8 Einzug halten wird. Dort werden wir die Dinge dann ohnehin anders lösen :)
Timeout