com.automationrockstars.bmo.event.processor.NeoEvent Maven / Gradle / Ivy
package com.automationrockstars.bmo.event.processor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.automationrockstars.gunter.EventType;
import com.automationrockstars.gunter.events.Event;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
public class NeoEvent {
private final String type;
public static final String ID = "id";
public static final String PARENT_ID = "parentId";
public static final String TIMESTAMP = "time";
public NeoEvent(EventType type) {
this(type.name());
}
public NeoEvent(String type){
this.type=type;
}
private Map attributes = Maps.newHashMap();
public String getType() {
return type;
}
public Map getAttributes() {
return attributes;
}
public void setAttributes(Map attributes) {
this.attributes.putAll(attributes);
}
public void setId(String id){
attributes.put(ID, id);
}
public void setParentId(String parentId){
attributes.put(PARENT_ID, parentId);
}
private static String timeStamp(Object ts){
if (ts instanceof Date){
return new SimpleDateFormat("dd/MM/YYYY HH:mm:ss.SSS").format(ts);
}
if (ts instanceof Double){
return timeStamp(((Double) ts).longValue());
} else if (ts instanceof Long){
return timeStamp(new Date((Long) ts));
} else {
return timeStamp(Long.valueOf((String) ts));
}
}
public void setTimeStamp(Object ts){
attributes.put(TIMESTAMP,timeStamp(ts));
}
public String getParentId(){
return (String) attributes.get(PARENT_ID);
}
public String getId(){
return (String) attributes.get(ID);
}
public static NeoEvent fromJson(String json){
return fromMap(EventType.COMMIT,new Gson().fromJson(json, HashMap.class));
}
public static NeoEvent fromMap(EventType type, Map attrs){
NeoEvent result = new NeoEvent(type.name());
result.setAttributes(attrs);
return result;
}
private static String attributes(Map attributes){
StringBuilder result = new StringBuilder();
for (Entry attr : attributes.entrySet()){
if ((! attr.getKey().equals("attributes")) && (! attr.getKey().equals("type")) && null != attr.getValue()){
if (result.length() > 0){
result.append(", ");
}
if (Map.class.isAssignableFrom(attr.getValue().getClass())){
result.append(attributes((Map) attr.getValue()));
} else {
result.append(attr.getKey()).append(":");
if (attr.getKey().equals("timeStamp")){
result.append("\"").append(timeStamp(attr.getValue())).append("\"");
} else if (Number.class.isAssignableFrom(attr.getValue().getClass())){
result.append(attr.getValue());
} else if (attr.getValue() instanceof Boolean){
result.append(attr.getValue());
} else result.append("\"").append(attr.getValue()).append("\"");
}
}
}
return result.toString();
}
public String toString(){
return String.format("(n:%s {%s})", type, attributes(attributes));
}
public boolean hasParent(){
return attributes.get(PARENT_ID) != null;
}
public String createCommand(){
return String.format("CREATE %s", this.toString());
}
public String createCommandWithParent(){
StringBuilder command = new StringBuilder();
if (hasParent()){
command.append("MATCH (parent {id:\"")
.append(getParentId()).append("\"}\n")
.append("CREATE (parent)<-[:PARENT]-")
.append(toString());
} else {
command.append(createCommand());
}
return command.toString();
}
public static NeoEvent fromEvent(Message eventToStore) {
Event event = eventToStore.toEvent();
NeoEvent result = new NeoEvent(event.getType());
result.setId(event.getId());
result.setParentId(event.getParentId());
result.setTimeStamp(event.getTimeStamp());
result.setAttributes(event.getAttributes());
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy