108 lines
3.3 KiB
Java
108 lines
3.3 KiB
Java
package eu.openaire.urls_controller.models;
|
|
|
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
import com.google.common.collect.LinkedHashMultimap;
|
|
import com.google.common.collect.Multimaps;
|
|
import com.google.common.collect.SetMultimap;
|
|
import com.google.gson.Gson;
|
|
import eu.openaire.urls_controller.util.GenericUtils;
|
|
|
|
import java.util.Collection;
|
|
import java.util.Map;
|
|
|
|
|
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
|
public class BulkImportReport {
|
|
|
|
private static final Gson gson = new Gson(); // This is "transient" by default. It won't be included in any json object.
|
|
|
|
@JsonProperty
|
|
private String provenance;
|
|
|
|
@JsonProperty
|
|
private String reportLocation;
|
|
|
|
@JsonProperty
|
|
private String reportID;
|
|
|
|
// This will not be serialized, since Gson cannot serialize Multimaps. Instead, it will be converted to the "simpler" map below.
|
|
transient private SetMultimap<String, String> eventsMultimap = Multimaps.synchronizedSetMultimap(LinkedHashMultimap.create());
|
|
// We need a "LinkedHashMultimap", se that the order of the keys (timestamps) stay ascending, so the final report makes sense in chronological order.
|
|
// We need for one key (timestamp) to have multiple values (events), in order to not lose events happening at the same time.
|
|
|
|
@JsonProperty
|
|
private Map<String, Collection<String>> eventsMap;
|
|
|
|
|
|
public BulkImportReport(String provenance, String reportLocation, String reportID) {
|
|
this.provenance = provenance;
|
|
this.reportLocation = reportLocation;
|
|
this.reportID = reportID;
|
|
}
|
|
|
|
|
|
public void addEvent(String event) {
|
|
eventsMultimap.put(GenericUtils.getReadableCurrentTimeAndZone(), event); // This is synchronized.
|
|
}
|
|
|
|
public String getJsonReport()
|
|
{
|
|
//Convert the LinkedHashMultiMap<String, String> to Map<String, Collection<String>>, since Gson cannot serialize Multimaps.
|
|
eventsMap = eventsMultimap.asMap();
|
|
return gson.toJson(this, BulkImportReport.class);
|
|
}
|
|
|
|
public String getProvenance() {
|
|
return provenance;
|
|
}
|
|
|
|
public void setProvenance(String provenance) {
|
|
this.provenance = provenance;
|
|
}
|
|
|
|
public String getReportLocation() {
|
|
return reportLocation;
|
|
}
|
|
|
|
public void setReportLocation(String reportLocation) {
|
|
this.reportLocation = reportLocation;
|
|
}
|
|
|
|
public String getReportID() {
|
|
return reportID;
|
|
}
|
|
|
|
public void setReportID(String reportID) {
|
|
this.reportID = reportID;
|
|
}
|
|
|
|
public SetMultimap<String, String> getEventsMultimap() {
|
|
return eventsMultimap;
|
|
}
|
|
|
|
public void setEventsMultimap(SetMultimap<String, String> eventsMultimap) {
|
|
this.eventsMultimap = eventsMultimap;
|
|
}
|
|
|
|
public Map<String, Collection<String>> getEventsMap() {
|
|
return eventsMap;
|
|
}
|
|
|
|
public void setEventsMap(Map<String, Collection<String>> eventsMap) {
|
|
this.eventsMap = eventsMap;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "BulkImportReport{" +
|
|
"provenance='" + provenance + '\'' +
|
|
", reportLocation='" + reportLocation + '\'' +
|
|
", reportID='" + reportID + '\'' +
|
|
", eventsMultimap=" + eventsMultimap +
|
|
", eventsMap=" + eventsMap +
|
|
'}';
|
|
}
|
|
|
|
}
|