blob: 5e6866b2a88c6513c475d6c921fdb8a61145807b [file] [log] [blame]
package de.ids_mannheim.korap.interfaces.db;
import de.ids_mannheim.korap.auditing.AuditRecord;
import de.ids_mannheim.korap.user.User;
import edu.emory.mathcs.backport.java.util.Collections;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* User: hanl
* Date: 8/20/13
* Time: 10:45 AM
*/
//fixme: move table to different database!
public abstract class AuditingIface {
protected static int BATCH_SIZE = 15;
private final List<AuditRecord> records = Collections
.synchronizedList(new ArrayList<>(BATCH_SIZE + 5));
private final List<AuditRecord> buffer = new ArrayList<>(BATCH_SIZE + 5);
public abstract <T extends AuditRecord> List<T> retrieveRecords (
AuditRecord.CATEGORY category, DateTime day, DateTime until,
boolean exact, int limit);
public abstract <T extends AuditRecord> List<T> retrieveRecords (
AuditRecord.CATEGORY category, User user, int limit);
public abstract <T extends AuditRecord> List<T> retrieveRecords (
LocalDate day, int hitMax);
public abstract <T extends AuditRecord> List<T> retrieveRecords (
String userID, LocalDate start, LocalDate end, int hitMax);
private void addAndRun (AuditRecord record) {
if (buffer.size() > BATCH_SIZE) {
records.clear();
records.addAll(buffer);
new Thread(new Runnable() {
@Override
public void run () {
apply();
}
}).start();
buffer.clear();
}
if (buffer.size() <= BATCH_SIZE)
buffer.add(record);
}
public <T extends AuditRecord> void audit (T request) {
addAndRun(request);
}
public <T extends AuditRecord> void audit (List<T> requests) {
for (T rec : requests)
addAndRun(rec);
}
public abstract void apply ();
protected List<AuditRecord> getRecordsToSave () {
return this.records;
}
public abstract void finish ();
}