Coder Social home page Coder Social logo

exxeta / correomqtt Goto Github PK

View Code? Open in Web Editor NEW
52.0 6.0 21.0 23.01 MB

A modern graphical MQTT client using the HiveMQ client library. MQTT is a messaging protocol widely used in the IoT world. CorreoMQTT provides a UI to send and receive messages. It is able to handle multiple connections at the same time.

Home Page: http://correomqtt.org

License: GNU General Public License v3.0

Shell 0.06% Java 93.95% CSS 5.10% Python 0.88%
mqtt mqtt-client hivemq mqtt3 mqtt5 iot javafx java mqtt-client-gui

correomqtt's Introduction

GitHub release (latest by date including pre-releases) GitHub

Javadoc

Maven Central Build Status CodeQL Quality Gate Status

CorreoMQTT

CorreoMQTT

A modern graphical MQTT client using the HiveMQ client library.

Download

Prebuild releases for Linux, OSX and Windows can be found here.

Note for OSX

Since v0.14.1 the gatekeeper issue is less annoying. Start the app the first time with right click > Open > Open.

Screenshot

CorreoMQTT Connection View

Developement

Feel free to contribute.

Plugins

Licence

Licensed under GPL v3.0.

correomqtt's People

Contributors

adsobat avatar dennisschulmeister avatar dependabot[bot] avatar farion avatar fisch3r avatar julienma94 avatar nojomyth-dev avatar oemel09 avatar raujonas avatar scklings avatar thagel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

correomqtt's Issues

Crash on startup using OSX (Big Sur)

After upgrading to Big Sur, Correo starts crashing during startup with the following stacktrace

09:46:55,801;ERROR;osxkeychain.OSXKeychainKeyring;JavaFX-Launcher; ;Failed to retrieve password from osx keychain.net.east301.keyring.BackendNotSupportedException: Failed to load native library at net.east301.keyring.osx.NativeLibraryManager.loadNativeLibraries(NativeLibraryManager.java:26) at net.east301.keyring.osx.OSXKeychainBackend.setup(OSXKeychainBackend.java:24) at org.correomqtt.business.keyring.osxkeychain.OSXKeychainKeyring.getPassword(OSXKeychainKeyring.java:29) at org.correomqtt.gui.keyring.KeyringHandler.getMasterPassword(KeyringHandler.java:89) at org.correomqtt.gui.keyring.KeyringHandler.retryWithMasterPassword(KeyringHandler.java:113) at org.correomqtt.CorreoMqtt.init(CorreoMqtt.java:84) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:824) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) at java.base/java.lang.Thread.run(Unknown Source)

Can't start application on Ubuntu 16.04

Hi everyone,

I just found your project and it looks just what would my live much easier, at least when developing distributed applications with MQTT ;) I have installed the prebuild .deb package but unfortunately cannot start the application. I get the following output.

david@machine:~$ /opt/correomqtt/bin/CorreoMQTT 
11:01:39,891; INFO;     org.correomqtt.CorreoMqtt;JavaFX-Launcher;               ;Application started.
11:01:39,895; INFO;     org.correomqtt.CorreoMqtt;JavaFX-Launcher;               ;JVM: Oracle Corporation | OpenJDK Runtime Environment | 14+36-1461.
11:01:39,896; INFO;     org.correomqtt.CorreoMqtt;JavaFX-Launcher;               ;CorreoMQTT version is 0.13.0.
11:01:39,897; INFO;     org.correomqtt.CorreoMqtt;JavaFX-Launcher;               ;Setting initial correo version in settings: 0.13.0
11:01:39,898; INFO;     org.correomqtt.CorreoMqtt;JavaFX-Launcher;               ;Locale is: en_US
11:01:39,920;DEBUG;tcher.BaseConnectionDispatcher;JavaFX-Launcher;               ;Trigger: PreloadingDispatcher.onProgress:19
11:01:45,889;DEBUG;tcher.BaseConnectionDispatcher;JavaFX-Launcher;               ;Trigger: PreloadingDispatcher.onProgress:19
11:01:45,909; INFO;4j.DefaultPluginStatusProvider;JavaFX-Launcher;               ;Enabled plugins: []
11:01:45,909; INFO;4j.DefaultPluginStatusProvider;JavaFX-Launcher;               ;Disabled plugins: []
11:01:45,911; INFO; org.pf4j.DefaultPluginManager;JavaFX-Launcher;               ;PF4J version 0.0.0 in 'deployment' mode
11:01:45,998;ERROR;yring.kwallet5.KWallet5Keyring;JavaFX-Launcher;               ;Command failed with exit code 2
Exception in Application init method
Exception in thread "main" java.lang.RuntimeException: Exception in Application init method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:895)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.correomqtt.business.keyring.KeyringException
	at org.correomqtt.business.keyring.kwallet5.KWallet5Keyring.runShellCommand(KWallet5Keyring.java:158)
	at org.correomqtt.business.keyring.kwallet5.KWallet5Keyring.runQDBusCommand(KWallet5Keyring.java:142)
	at org.correomqtt.business.keyring.kwallet5.KWallet5Keyring.isEnabled(KWallet5Keyring.java:135)
	at org.correomqtt.business.keyring.kwallet5.KWallet5Keyring.isSupported(KWallet5Keyring.java:51)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
	at org.correomqtt.business.keyring.KeyringFactory.getSupportedKeyrings(KeyringFactory.java:38)
	at org.correomqtt.business.keyring.KeyringFactory.create(KeyringFactory.java:14)
	at org.correomqtt.gui.keyring.KeyringHandler.init(KeyringHandler.java:134)
	at org.correomqtt.CorreoMqtt.init(CorreoMqtt.java:82)
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:824)
	... 2 more
CorreoMQTT Failed to launch JVM

Is there anything I can do?

Thank you a lot

  • David

Move plugins that throw exceptions during startup

  • Store the current version in config
  • If the plugin loader throws an exception move the plugins folder into a new folder called plugins.disabled.{oldversion}
  • In case of conflict add an counter plugins.disabled.{oldversion}.1 and so on.

Adjustable Encoding

Is your feature request related to a problem? Please describe.
Correo is using UTF-8. But it is unclear to the user and it can not be changed.

Describe the solution you'd like
The idea is to make encoding definable by the user in several situations:

  • default encoding for correo overall
  • default encoding for a specific connection
  • encoding for publish in a specific connection view
  • endcoding for subscribe in a specific subscription view (basically it could be changed for each subscription)

Refactor Plugin Configuration

Is your feature request related to a problem? Please describe.
Currently there is a protocol.xml to configure plugins. As Correo uses usually json for config files, this is not very convenient to sue. Also the current way is hard to understand and leads to wrongly enabled hooks.

Describe the solution you'd like
Configuration should be simple and in a json file. Per default hooks must be off.

Describe alternatives you've considered
Stay with the current solution? No, cause hard to understand.
Also in case we decide in the future to provide a gui for hook configuration json is much easier for Correo to use.

NOTE: This will probably make Hook-Plugins incompatible -> Updates required.

Kafka Support

Is your feature request related to a problem? Please describe.

Correo should support Kafka.

Intitial MVP:

  • Kafka is available as event system in business layer.
  • Connection UI respects Kafka requirements.
  • Connection View (Publish/Subscribe) is able to show and use Kafka.

First Use Case:

  • I am able to connect to a given Kafka broker, send and receive a message.

Default Config contains wrong MQTT version

Describe the bug

The default config contains V3 instead MQTT_5_0.

To Reproduce

  1. Start Correo with empty config
  2. Wrong string is contained in config

Expected behavior
Config contains correct string.

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • Version: 0.14.2

Disconnect does not visible unsubscribe

If a client disconnects (no matter if user triggered or unexpected) subscriptions are still visible in the UI. They are not functional and must be removed manually.

"null -> KWallet" on initial start

Describe the bug
At first start Correo tells, that the keyring is changed from null -> to something.

To Reproduce

  1. Start Correo with no config
  2. You'll see the dialog

Expected behavior
A dialog should appear that tells, that this is the first time a keyring is used etc.

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • Version: 0.14.2

No publish flow registered

Describe the bug
"No publish flow registered"-Error is thrown if something is published and nothing subscribed.

This is related to: hivemq/hivemq-mqtt-client#368

To Reproduce

  1. Connect to a broker
  2. Do NOT subscribe
  3. Publish a message
  4. 18:38:25,104; WARN;ing.MqttIncomingPublishService;ntLoopGroup-6-1; ;No publish flow registered for MqttStatefulPublish{stateless=MqttPublish{topic=sdfsadf, qos=AT_MOST_ONCE, retain=false}, packetIdentifier=-1, dup=false, topicAlias=0, subscriptionIdentifiers=[]}.

Expected behavior
No error happens

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • Version: 0.14.2

Some Icons in Light Theme are white instead of black

Describe the bug
Some Icons in Light Theme are white instead of black

To Reproduce

  1. Open CorreoMQTT with Light Theme.

Expected behavior
Icons in Light Theme are black.

Screenshots
image

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • 0.14.2 / Zulu JDK 13

Checkbox to publish messages without encoding them as Base64

Atm the publish client sends all messages as Base64 string. For example:
Original message:

{
 "message": "Just a simple test"
}

would be published as

ewogIm1lc3NhZ2UiOiAiSnVzdCBhIHNpbXBsZSB0ZXN0Igp9

It would be great if publish gave you the ability to send messages without Base64

History is broken after Reconnect

Describe the bug
After a reconnect in a connection tab, the publish history is broken

To Reproduce

  1. Connect to a broker
  2. Publish a message
  3. Disconnect
  4. Connect
  5. Publish another message
  6. NullPointerException in History is thrown.
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
	at org.correomqtt.business.provider.PersistPublishHistoryProvider.getTopics(PersistPublishHistoryProvider.java:72)
	at org.correomqtt.business.provider.PersistPublishHistoryProvider.onPublishSucceeded(PersistPublishHistoryProvider.java:79)
	at org.correomqtt.business.dispatcher.PublishGlobalDispatcher.lambda$onPublishSuceeded$0(PublishGlobalDispatcher.java:17)
	at org.correomqtt.business.dispatcher.BaseConnectionDispatcher.lambda$triggerFiltered$2(BaseConnectionDispatcher.java:33)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1510)
	at org.correomqtt.business.dispatcher.BaseConnectionDispatcher.triggerFiltered(BaseConnectionDispatcher.java:27)
	at org.correomqtt.business.dispatcher.PublishGlobalDispatcher.onPublishSuceeded(PublishGlobalDispatcher.java:17)
	at org.correomqtt.business.dispatcher.PublishDispatcher.onPublishSucceeded(PublishDispatcher.java:18)
	at org.correomqtt.business.services.PublishService.onSucceeded(PublishService.java:40)
	at org.correomqtt.gui.business.ServiceTask.succeeded(ServiceTask.java:26)
	at javafx.concurrent.Task.setState(Task.java:726)
	at javafx.concurrent.Task$TaskCallable.lambda$call$1(Task.java:1436)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	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:832)

Expected behavior
No Exception

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • Version: 0.14.2

Do not clear publish fields on Disconnect

Describe the bug

If a user disconnects (or is disconnected by broker) from a connection and reconnect afterwards, the publish field (topic + payload etc.) is resetted. This is not convinient.

To Reproduce

  1. Publish a message with topic and payload
  2. Disconnect connection
  3. Press "Disconnect"
  4. Topic and Payload is empty.

Expected behavior
Topic and Payload stays as there are before the reconnect.

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • Version: 0.14.2

Ubuntu 18.04 and higher: Debian Package uses libpng12 and is therefore not installable

I tried to install correomqtt_0.11.1-1_amd64.deb on Ubuntu 18.04. You cannot install the package since it depends on libpng12 which is deprecated and therefore not available for Ubuntu users since 18.04. This may also apply to Mint and Debian. Note: Version 0.9 works fine.

Fix: Use libpng16 and everything works fine. Maybe we can fix this by using the option --linux-package-deps for JPackage (see: https://openjdk.java.net/jeps/343)

Theme "Auto"

Is your feature request related to a problem? Please describe.
Currently users use the default skin mostly, which does not fit to their system and looks 3D JavaFX old school. This hurts my esthetic eyes :P. Of course it is also a good idea to give the users an UI that fits to the environment and looks modern.

Describe the solution you'd like
An idea is to have a special theme "auto" per default, which autodetects the system and environment and chooses a matching theme.
Win10/11 bright/dark
MacOSX bright/dark
Linux KDE breeze bright/dark
Linux Gnome Adwaita bright/dark

Additional context
To make this work, we need themes matching several systems. Basically the systems in the modern world are flat. So the existing breeze theme will be a good starting point for Win/Mac/Gnome theme.

Handling fast incoming messages

Is your feature request related to a problem? Please describe.
Once correo is connected to a MQTT-broker which receives a lot of messages at a time, the table of messages is not really usable. If you select a message, the new messages are all rendered above and your selection is no longer visible. So you have to be fast to get the detail message.
Also it is not possible to see which messages are new since there is no timestamp or something like this in the table entries.

Describe the solution you'd like

  • If a user selects a message and new messages arrive: the selected message is still selected and the selection is visible to the user and does not scroll all the way down.
  • If a message arrive: there should be a date (message received) for each message above the topic

Additional context
I also did a sample video: https://user-images.githubusercontent.com/584963/158768182-22ba5d4a-1bea-4cba-a85a-00977a552b11.mp4

Trying to get in touch regarding a security issue

Hey there!

I belong to an open source security research community, and a member (@srikanthprathi) has found an issue, but doesn’t know the best way to disclose it.

If not a hassle, might you kindly add a SECURITY.md file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.

Thank you for your consideration, and I look forward to hearing from you!

(cc @huntr-helper)

Plugin Repositories to allow optional and third party plugins.

Currently CorreoMQTT is able to be extended by plugins. There is a list of plugins that are installed automatically from urls. And it is possible to copy plugin-jars manually to the jars-Folder.

With this approach it is not possible to have plugins available that can be installed via click in the UI.

The idea to solve this is as follows:

CorreoMQTT maintains a list of plugin-jsons as plugin repositories. These are stored in the configuration and can be changed via configuration dialog. Per default there is one registry added already: https://github.com/EXXETA/correomqtt-pluginrepo/blob/master/plugins-repository-{version}.json

On start CorreoMQTT will also check https://github.com/EXXETA/correomqtt-pluginrepo/blob/master/mandatory-plugins-{version}.json which holds a list of mandatory plugins. These plugins will be installed automatically (if possible).

Also CorreoMQTT will check all repositories during start and updating plugins if possible. There is also an "Update" button in the plugin dialog to trigger this.

The plugin dialog will be extended. It shows all plugins from the repository, not only the installed ones. If a plugin is installed, it will have an "Uninstall" and an "Disable" button (no checkmarks) and except it is one of the mandatory plugins. If the plugin is not installed it will have an "Install" button. Some of the existing informations will be visible if the plugin is installed only. There is also a column where the repository is mentioned.

If a plugin id is used twice, this will cause an error message. The message will provide the option to reset the repository settings (which will set the list of repositories to the default one only).

Add a simple test broker to correo (as plugin)

To start up fast with MQTT, it would be nice to have an option to start a simple broker from within correo.

My proposal is to use Moquette as it is written in java and can be used embedded: https://github.com/moquette-io/moquette

  • Plugin must add a further menu point to tools "Local Broker". (new extension point required)
  • This will open a small window with at least these options: "Port" defaults to 1883, "Start broker on CorreoMQTT start", "Start"-Button. Maybe some more options like SSL and SSL-Port ... depends on what moquette is able to do.
  • As long as the broker runs there is a new bar above the tabs. "Local broker is running on port xxxx" + "Stop"-button (new extension point required). If the broker is running, the menu point must also change to "Stop local broker" of course.
  • "Port", "Start broker on CorreoMQTT start" must be persisted (use a dedicated file, as it is a plugin only thing)

Broken formatter avoid opening details window

23:39:09,780;DEBUG;omqtt.plugin.format.JsonFormat;lication Thread; ;JSON could not be parsed. com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (String)"


xxxxxx
xxxxxx
xxxxxx


xxxxxx
LAN
<jjjj"[truncated 5149 chars]; line: 1, column: 2]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1840)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:712)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:637)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1917)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:773)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4340)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4189)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3205)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3173)
at org.correomqtt.plugin.format.JsonFormat.createJsonObject(JsonFormat.java:89)
at org.correomqtt.plugin.format.JsonFormat.getParsedJsonObject(JsonFormat.java:80)
at org.correomqtt.plugin.format.JsonFormat.isValid(JsonFormat.java:75)
at org.correomqtt.gui.controller.DetailViewController.lambda$autoFormatPayload$9(DetailViewController.java:492)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1599)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
at org.correomqtt.gui.controller.DetailViewController.autoFormatPayload(DetailViewController.java:498)
at org.correomqtt.gui.controller.DetailViewController.updatePayload(DetailViewController.java:443)
at org.correomqtt.gui.controller.DetailViewController.showMessage(DetailViewController.java:336)
at org.correomqtt.gui.controller.DetailViewController.setMessage(DetailViewController.java:294)
at org.correomqtt.gui.controller.DetailViewController.load(DetailViewController.java:153)
at org.correomqtt.gui.controller.MessageListViewController.showDetailView(MessageListViewController.java:313)
at org.correomqtt.gui.controller.MessageListViewController.toggleDetailView(MessageListViewController.java:297)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
at jdk.internal.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1784)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
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.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:8890)
at javafx.scene.control.ToggleButton.fire(ToggleButton.java:257)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
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.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.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:830)

Add Tests

  • UnitTests (Prio 1)
  • BrokerTests with Broker in Container

Scripting for core client

The core client should offer the possibility to create "scripts" with a scripting language. It should be possible to interact with the installed plugin and the core functionality.

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.