public static StreamlineEvent fromString(String s) { ObjectMapper mapper = new ObjectMapper(); try { Map<String, Object> event = mapper.readValue( s.substring(s.indexOf(TO_STRING_PREFIX) + TO_STRING_PREFIX.length()), new TypeReference<Map<String, Object>>() {}); return StreamlineEventImpl.builder() .header((Map<String, Object>) event.get("header")) .sourceStream((String) event.get("sourceStream")) .auxiliaryFieldsAndValues((Map<String, Object>) event.get("auxiliaryFieldsAndValues")) .dataSourceId((String) event.get("dataSourceId")) .putAll((Map<String, Object>) event.get("fieldsAndValues")) .build(); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public StreamlineEvent addAuxiliaryFieldAndValue(String field, Object value) { Map<String, Object> aux = new HashMap<>(); aux.putAll(this.getAuxiliaryFieldsAndValues()); aux.put(field, value); return StreamlineEventImpl.builder().from(this) .auxiliaryFieldsAndValues(aux) .build(); }
@Override public StreamlineEvent join(EventGroup eventGroup) { Map<String, Object> fieldValues = new HashMap<>(); Map<String, Object> auxiliaryFieldValues = new HashMap<>(); for (StreamlineEvent subEvent : eventGroup.getSplitEvents()) { if(subEvent.getAuxiliaryFieldsAndValues() != null) { auxiliaryFieldValues.putAll(subEvent.getAuxiliaryFieldsAndValues()); } fieldValues.putAll(subEvent); } return StreamlineEventImpl.builder() .fieldsAndValues(fieldValues) .dataSourceId(eventGroup.getDataSourceId()) .auxiliaryFieldsAndValues(auxiliaryFieldValues) .build(); } }
public Builder from(StreamlineEvent other) { return this.header(other.getHeader()) .sourceStream(other.getSourceStream()) .dataSourceId(other.getDataSourceId()) .auxiliaryFieldsAndValues(other.getAuxiliaryFieldsAndValues()) .putAll(other); }