right, I can create AbstractStreamPlugin, AbstractJobPlugin and remove the if/else logic using PluginType completely (I like it as well); But, even with dedicated versions for Streams and Jobs we would still have these common methods: bindInputChannel, bindOutputChannel, tapOutputChannel and other common helper methods that both Stream and JobPlugins would use; so, I would still keep this AbstractMessageBinderPlugin that holds more generic message bus related implementation methods for Plugins. what do you think?

Related to null check for message bus, I am adding assertion to make sure message bus is found before binding/unbinding  to/from message bus.