package uk.co.acuminous.julez.event;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
public class Event {
public static final String EVENT_TYPE_FORMAT = "%s/%s";
public static final String ID = "#ID";
public static final String TYPE = "#TYPE";
public static final String TIMESTAMP = "#TIMESTAMP";
protected Map<String, String> data;
public Event(Map<String, String> data) {
this.data = data;
}
public Event(String id, long timestamp, String type) {
this.data = new HashMap<String, String>();
put(ID, id);
put(TYPE, type);
put(TIMESTAMP, String.valueOf(timestamp));
}
public Event(String type) {
this(UUID.randomUUID().toString(), System.currentTimeMillis(), type);
}
public void put(String key, String value) {
data.put(key, value);
}
public String get(String key) {
return data.get(key);
}
public String getId() {
return get(ID);
}
public long getTimestamp() {
return Long.parseLong(get(TIMESTAMP));
}
public String getType() {
return get(TYPE);
}
public Map<String, String> getData() {
return data;
}
public void setData(Map<String, String> data) {
this.data = data;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Set<String> keys = new TreeSet<String>(data.keySet());
Map<String, String> sortedData = new LinkedHashMap<String, String>();
for (String key : keys) {
sortedData.put(key, data.get(key));
}
sb.append(this.getClass().getName()).append(sortedData);
return sb.toString();
}
@Override
public int hashCode() {
return 24761 ^ data.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (null == obj || !(obj instanceof Event)) return false;
Event other = (Event) obj;
return this.data.equals(other.data);
}
}