package com.codecademy.eventhub.model; import com.google.common.collect.Maps; import com.codecademy.eventhub.base.ByteBufferMap; import com.codecademy.eventhub.base.KeyValueCallback; import java.nio.ByteBuffer; import java.util.Map; public class User { private final ByteBufferMap byteBufferMap; private User(ByteBufferMap byteBufferMap) { this.byteBufferMap = byteBufferMap; } public String getExternalId() { return get("external_user_id"); } public String get(String key) { return byteBufferMap.get(key); } public void enumerate(KeyValueCallback callback) { byteBufferMap.enumerate(callback); } public ByteBuffer toByteBuffer() { return byteBufferMap.toByteBuffer(); } @Override public String toString() { return String.format("external user id: %s" + getExternalId()); } public static User fromByteBuffer(ByteBuffer byteBuffer) { return new User(new ByteBufferMap(byteBuffer.duplicate())); } public static class Builder { private final String externalId; private Map<String, String> properties; public Builder(String externalId, Map<String, String> properties) { this.externalId = externalId; this.properties = properties; } public Builder add(String key, String value) { properties.put(key, value); return this; } public User build() { Map<String, String> allProperties = Maps.newHashMap(); allProperties.putAll(properties); allProperties.put("external_user_id", externalId); return new User(ByteBufferMap.build(allProperties)); } } }