package sk.stuba.fiit.perconik.activity.events;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Set;
import sk.stuba.fiit.perconik.activity.data.AnnotableData;
import sk.stuba.fiit.perconik.data.events.Event;
import sk.stuba.fiit.perconik.utilities.reflect.annotation.Annotations;
import static java.util.Collections.EMPTY_SET;
import static sk.stuba.fiit.perconik.activity.data.DataCollections.toAnnotationData;
public class BaseEvent extends AnnotableData implements Event {
protected long timestamp;
protected String action;
protected Set<String> tags;
public BaseEvent() {}
protected BaseEvent(final long timestamp) {
List<Annotation> annotations = Annotations.ofClass(this.getClass());
this.setAnnotations(toAnnotationData(annotations));
this.setTimestamp(timestamp);
this.setTags(EMPTY_SET);
}
protected BaseEvent(final long timestamp, final String action) {
this(timestamp);
this.setAction(action);
}
public static BaseEvent of(final long timestamp) {
return new BaseEvent(timestamp);
}
public static BaseEvent of(final long timestamp, final String action) {
return new BaseEvent(timestamp, action);
}
public void setTimestamp(final long timestamp) {
this.timestamp = timestamp;
}
public void setAction(final String action) {
this.action = action;
}
public void setTags(final Set<String> tags) {
this.tags = tags;
}
public long getTimestamp() {
return this.timestamp;
}
public String getAction() {
return this.action;
}
public Set<String> getTags() {
return this.tags;
}
}