package org.oliot.epcis_client;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bson.BsonDocument;
public abstract class EPCISEvent {
private long eventTime;
private long recordTime;
private String eventTimeZoneOffset;
private String bizStep;
private String disposition;
private String readPoint;
private String bizLocation;
private Map<String, List<String>> sourceList;
private Map<String, List<String>> destinationList;
private Map<String, String> namespaces;
private Map<String, Map<String, Object>> extensions;
public EPCISEvent() {
this(System.currentTimeMillis(), new SimpleDateFormat("XXX").format(new Date()));
}
public EPCISEvent(long eventTime, String eventTimeZoneOffset) {
this.eventTime = eventTime;
this.eventTimeZoneOffset = eventTimeZoneOffset;
recordTime = 0;
sourceList = new HashMap<String, List<String>>();
destinationList = new HashMap<String, List<String>>();
namespaces = new HashMap<String, String>();
extensions = new HashMap<String, Map<String, Object>>();
}
public long getEventTime() {
return eventTime;
}
public void setEventTime(long eventTime) {
this.eventTime = eventTime;
}
public long getRecordTime() {
return recordTime;
}
public void setRecordTime(long recordTime) {
this.recordTime = recordTime;
}
public String getEventTimeZoneOffset() {
return eventTimeZoneOffset;
}
public void setEventTimeZoneOffset() {
SimpleDateFormat format = new SimpleDateFormat("XXX");
eventTimeZoneOffset = format.format(new Date());
}
public void setEventTimeZoneOffset(String eventTimeZoneOffset) {
this.eventTimeZoneOffset = eventTimeZoneOffset;
}
public String getBizStep() {
return bizStep;
}
public void setBizStep(String bizStep) {
this.bizStep = bizStep;
}
public String getDisposition() {
return disposition;
}
public void setDisposition(String disposition) {
this.disposition = disposition;
}
public String getReadPoint() {
return readPoint;
}
public void setReadPoint(String readPoint) {
this.readPoint = readPoint;
}
public String getBizLocation() {
return bizLocation;
}
public void setBizLocation(String bizLocation) {
this.bizLocation = bizLocation;
}
public Map<String, List<String>> getSourceList() {
return sourceList;
}
public void setSourceList(Map<String, List<String>> sourceList) {
this.sourceList = sourceList;
}
public Map<String, List<String>> getDestinationList() {
return destinationList;
}
public void setDestinationList(Map<String, List<String>> destinationList) {
this.destinationList = destinationList;
}
public Map<String, String> getNamespaces() {
return namespaces;
}
public void setNamespaces(Map<String, String> namespaces) {
this.namespaces = namespaces;
}
public Map<String, Map<String, Object>> getExtensions() {
return extensions;
}
public void setExtensions(Map<String, Map<String, Object>> extensions) {
this.extensions = extensions;
}
public BsonDocument asBsonDocument() {
CaptureUtil util = new CaptureUtil();
BsonDocument baseEvent = new BsonDocument();
// Required Fields
baseEvent = util.putEventTime(baseEvent, eventTime);
baseEvent = util.putEventTimeZoneOffset(baseEvent, eventTimeZoneOffset);
// Optional Fields
if (this.recordTime != 0) {
baseEvent = util.putRecordTime(baseEvent, recordTime);
}
if (this.bizStep != null) {
baseEvent = util.putBizStep(baseEvent, bizStep);
}
if (this.disposition != null) {
baseEvent = util.putDisposition(baseEvent, disposition);
}
if (this.readPoint != null) {
baseEvent = util.putReadPoint(baseEvent, readPoint);
}
if (this.bizLocation != null) {
baseEvent = util.putBizLocation(baseEvent, bizLocation);
}
if (this.extensions != null && this.extensions.isEmpty() == false) {
baseEvent = util.putExtensions(baseEvent, namespaces, extensions);
}
return baseEvent;
}
BsonDocument asExtensionBsonDocument(CaptureUtil util) {
BsonDocument extension = new BsonDocument();
if (this.sourceList != null && this.sourceList.isEmpty() == false) {
extension = util.putSourceList(extension, sourceList);
}
if (this.destinationList != null && this.destinationList.isEmpty() == false) {
extension = util.putDestinationList(extension, destinationList);
}
return extension;
}
}