@Override
public void put(final K key, final V value, final Handler<AsyncResult<V>> doneHandler) {
map.put(key, value, new Handler<AsyncResult<V>>() {
@Override
public void handle(AsyncResult<V> result) {
eventBus.publish(String.format("%s.%s.%s", map.name(), key, MapEvent.Type.CHANGE.toString()), new JsonObject()
.putString("type", MapEvent.Type.CHANGE.toString())
.putValue("key", key)
.putValue("value", value));
String event = result.result() == null ? MapEvent.Type.CREATE.toString() : MapEvent.Type.UPDATE.toString();
eventBus.publish(String.format("%s.%s.%s", map.name(), key, event), new JsonObject()
.putString("type", event)
.putValue("key", key)
.putValue("value", value));
if (doneHandler != null) {
doneHandler.handle(result);