Giter Club home page Giter Club logo

bco.registry.editor's People

Contributors

divinethreepwood avatar pleminoq avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bco.registry.editor's Issues

Unit groups fold on apply change

Other than in the UnitConfig section, the Unit Groups will fold once Apply is clicked.
I think the preffered handling is the one of the UnitConfig section, where the config remains unfolded as it was.

Set focus to newly opened TextEdit and mark content

If the user selects a value to edit, set the focus of the application to the newly opened TextEdit und furthermore mark its content.
By doing this, the user can start typing immediately and don't need to click and mark in addition to the selection of the value.

Unit Navigation

Implement that when clicking on a unitId in a deviceConfig the according unit is shown in the unitRegistry.

MetaConfig Fields are not stored if additional ones are deleted

How to reproduce:

Create new PowerSynchronizer Agent, add 4 MetaConfig Fields and remove two of them again (not sure which ones so try the middle ones). If now the key-value fields are filled those are not properly stored after saving the modification. I guess the removed Elements are stored and the filled ones are not further handled maybe caused by wrong handling of the repeated field entries.

Wrong initialization of device positions (rotation)

When a device that has no position yet is clicked and new values for PlacementConfig->Position->Translation are entered, a dialog window asks if missing values should be intialized.
After initalization, the values for PlacementConfig->Position->ROTATION are NaN which causes an exception in Bcozy because the units' transformation cannot be calculated.

Exception during registry updates of selected colums

If a scene is selected and this scene is modified and saved externally (e.g. with the scene-editor) the following exception is thrown

Exception in thread "pool-3-thread-45" java.lang.NullPointerException
	at com.sun.javafx.css.StyleMap.getCascadingStyles(StyleMap.java:147)
	at javafx.scene.CssStyleHelper.getStyle(CssStyleHelper.java:846)
	at javafx.scene.CssStyleHelper.lookupFont(CssStyleHelper.java:1715)
	at javafx.scene.CssStyleHelper.transitionToState(CssStyleHelper.java:605)
	at javafx.scene.Node.impl_processCSS(Node.java:9191)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1249)
	at javafx.scene.control.Control.impl_processCSS(Control.java:868)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.control.Control.impl_processCSS(Control.java:868)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.control.Control.impl_processCSS(Control.java:868)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.control.Control.impl_processCSS(Control.java:868)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1280)
	at javafx.scene.control.Control.impl_processCSS(Control.java:868)
	at javafx.scene.Node.impl_reapplyCSS(Node.java:8960)
	at javafx.scene.Parent$3.onChanged(Parent.java:1174)
	at com.sun.javafx.collections.TrackableObservableList.lambda$new$19(TrackableObservableList.java:45)
	at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:164)
	at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
	at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
	at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
	at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
	at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
	at com.sun.javafx.collections.ObservableListWrapper.clear(ObservableListWrapper.java:157)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.setReadOnlyMode(RegistryTreeTableView.java:314)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.update(RegistryTreeTableView.java:225)
	at org.openbase.bco.registry.editor.RegistryEditor.updateTreeTableView(RegistryEditor.java:601)
	at org.openbase.bco.registry.editor.RegistryEditor.lambda$updateTab$8(RegistryEditor.java:457)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
17:41:27.584 [Thread-18] INFO  o.o.b.r.e.RegistryEditor Received update for [SceneRegistryRemote[scope:/registry/scene/]]
17:41:27.587 [pool-3-thread-46] INFO  o.o.b.r.e.v.RegistryTreeTableView Message to update [SCENE, Demo]
Exception in thread "JavaFX Application Thread" java.util.ConcurrentModificationException
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
	at java.util.HashMap$EntryIterator.next(HashMap.java:1471)
	at java.util.HashMap$EntryIterator.next(HashMap.java:1469)
	at java.util.AbstractCollection.addAll(AbstractCollection.java:343)
	at java.util.HashSet.(HashSet.java:119)
	at javafx.scene.CssStyleHelper.resetToInitialValues(CssStyleHelper.java:441)
	at javafx.scene.CssStyleHelper.createStyleHelper(CssStyleHelper.java:180)
	at javafx.scene.Node.reapplyCss(Node.java:8985)
	at javafx.scene.Node.reapplyCss(Node.java:9014)
	at javafx.scene.Node.reapplyCss(Node.java:9014)
	at javafx.scene.Node.reapplyCss(Node.java:9014)
	at javafx.scene.Node.reapplyCss(Node.java:9014)
	at javafx.scene.Node.reapplyCss(Node.java:9014)
	at javafx.scene.Node.reapplyCss(Node.java:9014)
	at javafx.scene.Node.impl_processCSS(Node.java:9182)
	at javafx.scene.Parent.impl_processCSS(Parent.java:1249)
	at javafx.scene.control.Control.impl_processCSS(Control.java:868)
	at javafx.scene.Node.processCSS(Node.java:9058)
	at javafx.scene.Node.applyCss(Node.java:9155)
	at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1964)
	at com.sun.javafx.scene.control.skin.VirtualFlow.addTrailingCells(VirtualFlow.java:1344)
	at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1197)
	at com.sun.javafx.scene.control.skin.VirtualFlow.setCellCount(VirtualFlow.java:231)
	at com.sun.javafx.scene.control.skin.TreeTableViewSkin.updateRowCount(TreeTableViewSkin.java:486)
	at com.sun.javafx.scene.control.skin.VirtualContainerBase.checkState(VirtualContainerBase.java:113)
	at com.sun.javafx.scene.control.skin.VirtualContainerBase.layoutChildren(VirtualContainerBase.java:108)
	at com.sun.javafx.scene.control.skin.TableViewSkinBase.layoutChildren(TableViewSkinBase.java:696)
	at javafx.scene.control.Control.layoutChildren(Control.java:578)
	at javafx.scene.control.TreeTableView.layoutChildren(TreeTableView.java:1468)
	at javafx.scene.Parent.layout(Parent.java:1087)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Parent.layout(Parent.java:1093)
	at javafx.scene.Scene.doLayoutPass(Scene.java:552)
	at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
	at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
	at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
	at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)
	at java.lang.Thread.run(Thread.java:745)

Search Function

Implement a search function which searches for a given value in all messages and then only display the ones that contain that value.

Read only mode is not displayed in all tabs and not in all cases.

  1. start bco-registry (normal)
  2. start bco-registry-editor and wait until connected
  3. shutdown bco-registry
  4. start bco-registry (read-only)
  5. wait until bco-registry-editor as established the connection again

After this the registry-editor does not display "read only mode" in all tabs.

Registry tabs disappear after adding new units.

e.g. if a new user is registered the user tab is just showing the loading animation after pressing apply. The entries disappear und only restarting the registry editor solve the problem.

There is no exception or error message printed.

Exceptions during force mode modifications

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.update(RegistryTreeTableView.java:151)
    at org.openbase.bco.registry.editor.RegistryEditor.updateTreeTableView(RegistryEditor.java:577)
    at org.openbase.bco.registry.editor.RegistryEditor.access$900(RegistryEditor.java:105)
    at org.openbase.bco.registry.editor.RegistryEditor$5.run(RegistryEditor.java:438)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-2-thread-14" java.lang.IllegalStateException: Not on FX application thread; currentThread = pool-2-thread-14
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:236)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
    at javafx.scene.Parent$2.onProposedChange(Parent.java:367)
    at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113)
    at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:108)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:575)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.handleControlPropertyChanged(LabeledSkinBase.java:181)
    at com.sun.javafx.scene.control.skin.TableCellSkinBase.handleControlPropertyChanged(TableCellSkinBase.java:128)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197)
    at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55)
    at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
    at javafx.css.StyleableObjectProperty.set(StyleableObjectProperty.java:82)
    at javafx.beans.property.ObjectProperty.setValue(ObjectProperty.java:69)
    at javafx.scene.control.Labeled.setGraphic(Labeled.java:423)
    at org.openbase.bco.registry.editor.visual.cell.ValueCell.cancelEdit(ValueCell.java:156)
    at javafx.scene.control.TreeTableCell.updateEditing(TreeTableCell.java:556)
    at javafx.scene.control.TreeTableCell.lambda$new$105(TreeTableCell.java:140)
    at javafx.beans.WeakInvalidationListener.invalidated(WeakInvalidationListener.java:83)
    at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
    at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
    at javafx.scene.control.TreeTableView.setEditingCell(TreeTableView.java:1122)
    at javafx.scene.control.TreeTableView.edit(TreeTableView.java:1710)
    at com.sun.javafx.scene.control.skin.TreeTableViewSkin.lambda$new$533(TreeTableViewSkin.java:184)
    at javafx.event.WeakEventHandler.handle(WeakEventHandler.java:79)
    at com.sun.javafx.event.CompositeEventHandler$WeakEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:248)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.control.TreeItem.fireEvent(TreeItem.java:743)
    at javafx.scene.control.TreeItem.updateChildren(TreeItem.java:920)
    at javafx.scene.control.TreeItem.lambda$new$113(TreeItem.java:412)
    at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:164)
    at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
    at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
    at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
    at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
    at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
    at javafx.collections.ModifiableObservableListBase.remove(ModifiableObservableListBase.java:183)
    at javafx.collections.ModifiableObservableListBase.remove(ModifiableObservableListBase.java:171)
    at org.openbase.bco.registry.editor.visual.cell.ValueCell$ApplyEventHandler$1.call(ValueCell.java:353)
    at org.openbase.bco.registry.editor.visual.cell.ValueCell$ApplyEventHandler$1.call(ValueCell.java:338)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

uint64 always displayed as date

The native type uint64 is always displayed as a date in the registry editor.
For the indices in type FloorCeilingEdge which is now part of shape of every UnitConfig for example, this is not wanted.

Fatal implementation error while agent registration.

12:57:57.827 [JavaFX Application Thread] ERROR j.lang.Thread ═╦═⚀ Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
12:57:57.827 [JavaFX Application Thread] ERROR j.lang.Thread  ╚════⚀ NullPointerException
12:57:57.827 [JavaFX Application Thread] ERROR j.lang.Thread =====================================
12:57:57.832 [JavaFX Application Thread] ERROR j.lang.Thread Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
org.openbase.jul.exception.FatalImplementationErrorException: Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
	at org.openbase.jul.schedule.AbstractExecutorService$1.uncaughtException(AbstractExecutorService.java:91)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1057)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1052)
	at com.sun.glass.ui.Application.reportException(Application.java:453)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException: null
	at rst.language.LabelType$Label$MapFieldEntry$Builder.setKey(LabelType.java:807)
	at org.openbase.bco.registry.editor.struct.editing.LabelEditingGraphic.updateBuilder(LabelEditingGraphic.java:64)
	at org.openbase.bco.registry.editor.struct.editing.LabelEditingGraphic.updateBuilder(LabelEditingGraphic.java:43)
	at org.openbase.bco.registry.editor.struct.editing.AbstractBuilderEditingGraphic.getCurrentValue(AbstractBuilderEditingGraphic.java:57)
	at org.openbase.bco.registry.editor.struct.editing.AbstractBuilderEditingGraphic.getCurrentValue(AbstractBuilderEditingGraphic.java:33)
	at org.openbase.bco.registry.editor.struct.editing.AbstractEditingGraphic.commitEdit(AbstractEditingGraphic.java:163)
	at org.openbase.bco.registry.editor.struct.editing.AbstractBuilderEditingGraphic.commitEdit(AbstractBuilderEditingGraphic.java:51)
	at org.openbase.bco.registry.editor.struct.editing.AbstractEditingGraphic.lambda$new$0(AbstractEditingGraphic.java:81)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Node.fireEvent(Node.java:8411)
	at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.forwardToParent(ComboBoxPopupControl.java:457)
	at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.handleKeyEvent(ComboBoxPopupControl.java:444)
	at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.lambda$new$292(ComboBoxPopupControl.java:89)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
	at com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
	at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
	at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$KeyHandler.process(Scene.java:3964)
	at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3910)
	at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
	at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2501)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$352(GlassViewEventHandler.java:248)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
	at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
	at com.sun.glass.ui.View.notifyKey(View.java:966)
	... 3 common frames omitted
12:57:57.833 [JavaFX Application Thread] ERROR j.lang.Thread =====================================

Registry Editor doesn't let me add new location

I could add one location but after that right clicking doesn't produce a context menu anymore. Even restarting doesn't help:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/usr/share/bco/lib/protobuf-java-3.0.0.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
01:10:10.842 [JavaFX Application Thread] ERROR j.lang.Thread ═╦═⚀ Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
01:10:10.846 [JavaFX Application Thread] ERROR j.lang.Thread  ╚════⚀ NullPointerException
01:10:10.847 [JavaFX Application Thread] ERROR j.lang.Thread =====================================
01:10:10.850 [JavaFX Application Thread] ERROR j.lang.Thread Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
org.openbase.jul.exception.FatalImplementationErrorException: Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
	at org.openbase.jul.schedule.AbstractExecutorService$1.uncaughtException(AbstractExecutorService.java:88)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1054)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1049)
	at com.sun.glass.ui.Application.reportException(Application.java:451)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
	at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.NullPointerException: null
	at org.openbase.bco.registry.editor.visual.RegistryTab.lambda$new$8(RegistryTab.java:176)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.stage.Window.fireEvent(Window.java:1368)
	at javafx.stage.Window$12.invalidated(Window.java:1058)
	at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
	at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145)
	at javafx.stage.Window.setShowing(Window.java:1174)
	at javafx.stage.Window.show(Window.java:1189)
	at javafx.stage.PopupWindow.showImpl(PopupWindow.java:472)
	at javafx.stage.PopupWindow.show(PopupWindow.java:437)
	at javafx.scene.control.ContextMenu.doShow(ContextMenu.java:320)
	at javafx.scene.control.ContextMenu.show(ContextMenu.java:282)
	at javafx.scene.control.Control.lambda$static$0(Control.java:199)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene.processMenuEvent(Scene.java:1889)
	at javafx.scene.Scene$ScenePeerListener.menuEvent(Scene.java:2612)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMenuEvent$3(GlassViewEventHandler.java:484)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMenuEvent$4(GlassViewEventHandler.java:464)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMenuEvent(GlassViewEventHandler.java:463)
	at com.sun.glass.ui.View.handleMenuEvent(View.java:564)
	at com.sun.glass.ui.View.notifyMenu(View.java:894)
	... 3 common frames omitted
01:10:10.851 [JavaFX Application Thread] ERROR j.lang.Thread =====================================
01:10:10.852 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 ═╦═⚀ Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
01:10:10.852 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1  ╚════⚀ NullPointerException
01:10:10.852 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 =====================================
01:10:10.852 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
org.openbase.jul.exception.FatalImplementationErrorException: Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
	at org.openbase.jul.schedule.AbstractExecutorService$1.uncaughtException(AbstractExecutorService.java:88)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1054)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1049)
	at com.sun.glass.ui.Application.reportException(Application.java:451)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
	at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.NullPointerException: null
	at org.openbase.bco.registry.editor.visual.RegistryTab.lambda$new$8(RegistryTab.java:176)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.stage.Window.fireEvent(Window.java:1368)
	at javafx.stage.Window$12.invalidated(Window.java:1058)
	at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
	at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:145)
	at javafx.stage.Window.setShowing(Window.java:1174)
	at javafx.stage.Window.show(Window.java:1189)
	at javafx.stage.PopupWindow.showImpl(PopupWindow.java:472)
	at javafx.stage.PopupWindow.show(PopupWindow.java:437)
	at javafx.scene.control.ContextMenu.doShow(ContextMenu.java:320)
	at javafx.scene.control.ContextMenu.show(ContextMenu.java:282)
	at javafx.scene.control.Control.lambda$static$0(Control.java:199)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene.processMenuEvent(Scene.java:1889)
	at javafx.scene.Scene$ScenePeerListener.menuEvent(Scene.java:2612)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMenuEvent$3(GlassViewEventHandler.java:484)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMenuEvent$4(GlassViewEventHandler.java:464)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMenuEvent(GlassViewEventHandler.java:463)
	at com.sun.glass.ui.View.handleMenuEvent(View.java:564)
	at com.sun.glass.ui.View.notifyMenu(View.java:894)
	... 3 common frames omitted
01:10:10.853 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 =====================================

Fatal Implementation when adding new Device Classes

15:51:59.370 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 ═╦═⚀ Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
15:51:59.370 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1  ╚════⚀ class java.lang.String cannot be cast to class com.google.protobuf.Message$Builder (java.lang.String is in module java.base of loader 'bootstrap'; com.google.protobuf.Message$Builder is in unnamed module of loader 'app')
15:51:59.370 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 =====================================
15:51:59.370 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
org.openbase.jul.exception.FatalImplementationErrorException: Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
	at org.openbase.jul.schedule.AbstractExecutorService$1.uncaughtException(AbstractExecutorService.java:88)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1053)
	at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1048)
	at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:362)
	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
	at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
	at javafx.scene.Node$FocusedProperty.notifyListeners(Node.java:8159)
	at javafx.scene.Scene$12.invalidated(Scene.java:2158)
	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
	at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
	at javafx.scene.Scene$KeyHandler.setFocusOwner(Scene.java:4030)
	at javafx.scene.Scene$KeyHandler.requestFocus(Scene.java:4077)
	at javafx.scene.Scene.requestFocus(Scene.java:2125)
	at javafx.scene.Node.requestFocus(Node.java:8320)
	at javafx.scene.control.ControlUtils.requestFocusOnControlOnlyIfCurrentFocusOwnerIsChild(ControlUtils.java:64)
	at javafx.scene.control.TreeTableCell.cancelEdit(TreeTableCell.java:400)
	at org.openbase.bco.registry.editor.visual.cell.ValueCell.cancelEdit(ValueCell.java:73)
	at javafx.scene.control.TreeTableCell.updateEditing(TreeTableCell.java:553)
	at javafx.scene.control.TreeTableCell.lambda$new$3(TreeTableCell.java:140)
	at javafx.beans.WeakInvalidationListener.invalidated(WeakInvalidationListener.java:83)
	at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:348)
	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
	at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
	at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
	at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
	at javafx.scene.control.TreeTableView.setEditingCell(TreeTableView.java:1161)
	at javafx.scene.control.TreeTableView.edit(TreeTableView.java:1761)
	at com.sun.javafx.scene.control.behavior.TreeTableCellBehavior.edit(TreeTableCellBehavior.java:107)
	at com.sun.javafx.scene.control.behavior.TreeTableCellBehavior.handleClicks(TreeTableCellBehavior.java:150)
	at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.simpleSelect(TableCellBehaviorBase.java:216)
	at com.sun.javafx.scene.control.behavior.TableCellBehaviorBase.doSelect(TableCellBehaviorBase.java:146)
	at com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:176)
	at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3862)
	at javafx.scene.Scene.processMouseEvent(Scene.java:1849)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at com.sun.glass.ui.View.notifyMouse(View.java:942)
	at com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.google.protobuf.Message$Builder (java.lang.String is in module java.base of loader 'bootstrap'; com.google.protobuf.Message$Builder is in unnamed module of loader 'app')
	at org.openbase.bco.registry.editor.struct.AbstractBuilderTreeItem.getBuilder(AbstractBuilderTreeItem.java:61)
	at org.openbase.bco.registry.editor.struct.LeafTreeItem.lambda$new$0(LeafTreeItem.java:63)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.control.TreeItem.fireEvent(TreeItem.java:764)
	at javafx.scene.control.TreeItem.access$200(TreeItem.java:206)
	at javafx.scene.control.TreeItem$2.invalidated(TreeItem.java:461)
	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
	at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
	at javafx.beans.property.ObjectProperty.setValue(ObjectProperty.java:72)
	at javafx.scene.control.TreeTableColumn.lambda$new$1(TreeTableColumn.java:290)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at org.openbase.bco.registry.editor.visual.cell.ValueCell.commitEdit(ValueCell.java:89)
	at org.openbase.bco.registry.editor.visual.cell.ValueCell.commitEdit(ValueCell.java:35)
	at org.openbase.bco.registry.editor.struct.editing.AbstractEditingGraphic.commitEdit(AbstractEditingGraphic.java:167)
	at org.openbase.bco.registry.editor.struct.editing.AbstractTextEditingGraphic.commitEdit(AbstractTextEditingGraphic.java:46)
	at org.openbase.bco.registry.editor.struct.editing.StringEditingGraphic.commitEdit(StringEditingGraphic.java:33)
	at org.openbase.bco.registry.editor.struct.editing.AbstractEditingGraphic.lambda$initFocusLossHandling$2(AbstractEditingGraphic.java:142)
	at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360)
	... 66 common frames omitted
15:51:59.371 [JavaFX Application Thread] ERROR o.o.j.s.AbstractExecutorService$1 =====================================

Sometimes the "applyAction" button does not hide again.

If entries are modified but the consistency checks are removing this modifications e.g. because of the boundToUnitHost flag, than the registry-editor receives the same unitConfig again but the update is ignored.

The apply action and the progress bar should be removed if the registry "update" method returns.

Moved Issue openbase/bco.registry#57 to this project.

Re-implement selecting entries by their id

In the registry configuration from different registries are often referenced by their id. The restructured registry editor should re-implement the old functionality where a double click would change the selection to the configuration referenced by the id.

Sometimes this exception is still received on updates

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: javafx.scene.control.TreeItem cannot be cast to org.openbase.bco.registry.editor.struct.NodeContainer
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:219)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:224)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.getNodeByMessage(RegistryTreeTableView.java:230)
	at org.openbase.bco.registry.editor.visual.RegistryTreeTableView.update(RegistryTreeTableView.java:170)
	at org.openbase.bco.registry.editor.RegistryEditor.updateTreeTableView(RegistryEditor.java:564)
	at org.openbase.bco.registry.editor.RegistryEditor.access$900(RegistryEditor.java:105)
	at org.openbase.bco.registry.editor.RegistryEditor$5.run(RegistryEditor.java:452)
	at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)
	at java.lang.Thread.run(Thread.java:745)

Fatal implementation error while adding meta config entries.

@DivineThreepwood commented on Wed Oct 31 2018

The following Exception occurs if a new and still empty meta config entry is created and the focus of the registry editor window is lost. Than the following exception occurs:

12:51:52.134 [JavaFX Application Thread] ERROR j.lang.Thread ═╦═⚀ Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
12:51:52.134 [JavaFX Application Thread] ERROR j.lang.Thread  ╚════⚀ 1
12:51:52.134 [JavaFX Application Thread] ERROR j.lang.Thread =====================================
12:51:52.135 [JavaFX Application Thread] ERROR j.lang.Thread Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
org.openbase.jul.exception.FatalImplementationErrorException: Fatal implementation error in or by using Thread[JavaFX Application Thread,5,main]: UncaughtException found!
	at org.openbase.jul.schedule.AbstractExecutorService$1.uncaughtException(AbstractExecutorService.java:92)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1057)
	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1052)
	at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:363)
	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
	at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
	at javafx.scene.Node$FocusedProperty.notifyListeners(Node.java:7718)
	at javafx.scene.Node.setFocused(Node.java:7771)
	at javafx.scene.Scene$KeyHandler.setWindowFocused(Scene.java:3932)
	at javafx.scene.Scene$KeyHandler.lambda$new$11(Scene.java:3954)
	at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
	at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
	at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
	at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
	at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
	at javafx.stage.Window.setFocused(Window.java:452)
	at com.sun.javafx.stage.WindowPeerListener.changedFocused(WindowPeerListener.java:59)
	at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:101)
	at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$422(GlassWindowEventHandler.java:151)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:149)
	at com.sun.glass.ui.Window.handleWindowEvent(Window.java:1270)
	at com.sun.glass.ui.Window.notifyFocus(Window.java:1249)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
	at org.openbase.bco.registry.editor.struct.editing.MetaConfigEntryEditingGraphic.updateBuilder(MetaConfigEntryEditingGraphic.java:45)
	at org.openbase.bco.registry.editor.struct.editing.MetaConfigEntryEditingGraphic.updateBuilder(MetaConfigEntryEditingGraphic.java:34)
	at org.openbase.bco.registry.editor.struct.editing.AbstractBuilderEditingGraphic.getCurrentValue(AbstractBuilderEditingGraphic.java:57)
	at org.openbase.bco.registry.editor.struct.editing.AbstractBuilderEditingGraphic.getCurrentValue(AbstractBuilderEditingGraphic.java:33)
	at org.openbase.bco.registry.editor.struct.editing.AbstractEditingGraphic.commitEdit(AbstractEditingGraphic.java:163)
	at org.openbase.bco.registry.editor.struct.editing.AbstractBuilderEditingGraphic.commitEdit(AbstractBuilderEditingGraphic.java:51)
	at org.openbase.bco.registry.editor.struct.editing.AbstractEditingGraphic.lambda$initFocusLossHandling$2(AbstractEditingGraphic.java:142)
	at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
	... 25 common frames omitted

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.