protected final Map<String, Object> extractHistoryProperties(Module module) {
		Map<String, Object> properties = new LinkedHashMap<String, Object>();
		if (module.getProperties() != null) {
			for (Map.Entry<Object, Object> entry : module.getProperties().entrySet()) {
				if (entry.getKey() instanceof String) {
					String key = (String) entry.getKey();
					if (key.startsWith(ModulePlaceholders.XD_CONTAINER_KEY_PREFIX)) {
						key = key.substring(ModulePlaceholders.XD_CONTAINER_KEY_PREFIX.length());
						if (key.equals("id")) {
							key = "container.id";
						}
						properties.put(key, entry.getValue());
					}
					else if (key.equals(ModulePlaceholders.XD_STREAM_NAME_KEY)) {
						properties.put(key.substring(3), entry.getValue());
					}
				}
			}
		}
		return properties;
	}
Bind input/output channel of the module's message consumer/producers to {@link MessageBus}'s message
source/target entities. The producer must be bound first so that messages can immediately
start flowing from the consumer.

@param module the module whose consumer and producers to bind to the {@link MessageBus}.
spring-xd-dirt/src/main/java/org/springframework/xd/dirt/plugins/AbstractMessageBusBinderPlugin.java