blob: 5e6866b2a88c6513c475d6c921fdb8a61145807b [file] [log] [blame]
Michael Hanldeb3c212015-10-16 23:02:24 +02001package de.ids_mannheim.korap.interfaces.db;
Michael Hanlca740d72015-06-16 10:04:58 +02002
3import de.ids_mannheim.korap.auditing.AuditRecord;
4import de.ids_mannheim.korap.user.User;
Michael Hanl1e18cb42015-08-06 20:57:35 +02005import edu.emory.mathcs.backport.java.util.Collections;
Michael Hanlca740d72015-06-16 10:04:58 +02006import org.joda.time.DateTime;
7import org.joda.time.LocalDate;
8
9import java.util.ArrayList;
10import java.util.List;
11
12/**
13 * User: hanl
14 * Date: 8/20/13
15 * Time: 10:45 AM
16 */
17//fixme: move table to different database!
Michael Hanl1e18cb42015-08-06 20:57:35 +020018public abstract class AuditingIface {
Michael Hanlca740d72015-06-16 10:04:58 +020019
20 protected static int BATCH_SIZE = 15;
Michael Hanl1e18cb42015-08-06 20:57:35 +020021 private final List<AuditRecord> records = Collections
22 .synchronizedList(new ArrayList<>(BATCH_SIZE + 5));
Michael Hanlca740d72015-06-16 10:04:58 +020023 private final List<AuditRecord> buffer = new ArrayList<>(BATCH_SIZE + 5);
24
Michael Hanl8abaf9e2016-05-23 16:46:35 +020025
26 public abstract <T extends AuditRecord> List<T> retrieveRecords (
Michael Hanlca740d72015-06-16 10:04:58 +020027 AuditRecord.CATEGORY category, DateTime day, DateTime until,
28 boolean exact, int limit);
29
Michael Hanl8abaf9e2016-05-23 16:46:35 +020030
31 public abstract <T extends AuditRecord> List<T> retrieveRecords (
Michael Hanlca740d72015-06-16 10:04:58 +020032 AuditRecord.CATEGORY category, User user, int limit);
33
Michael Hanl8abaf9e2016-05-23 16:46:35 +020034
35 public abstract <T extends AuditRecord> List<T> retrieveRecords (
Michael Hanlca740d72015-06-16 10:04:58 +020036 LocalDate day, int hitMax);
37
Michael Hanl8abaf9e2016-05-23 16:46:35 +020038
39 public abstract <T extends AuditRecord> List<T> retrieveRecords (
Michael Hanlca740d72015-06-16 10:04:58 +020040 String userID, LocalDate start, LocalDate end, int hitMax);
41
Michael Hanl8abaf9e2016-05-23 16:46:35 +020042
43 private void addAndRun (AuditRecord record) {
Michael Hanlca740d72015-06-16 10:04:58 +020044 if (buffer.size() > BATCH_SIZE) {
45 records.clear();
46 records.addAll(buffer);
Michael Hanl1e18cb42015-08-06 20:57:35 +020047 new Thread(new Runnable() {
48 @Override
Michael Hanl8abaf9e2016-05-23 16:46:35 +020049 public void run () {
Michael Hanl1e18cb42015-08-06 20:57:35 +020050 apply();
51 }
52 }).start();
Michael Hanlca740d72015-06-16 10:04:58 +020053 buffer.clear();
54 }
55 if (buffer.size() <= BATCH_SIZE)
56 buffer.add(record);
57 }
58
Michael Hanl8abaf9e2016-05-23 16:46:35 +020059
60 public <T extends AuditRecord> void audit (T request) {
Michael Hanlca740d72015-06-16 10:04:58 +020061 addAndRun(request);
62 }
63
Michael Hanl8abaf9e2016-05-23 16:46:35 +020064
65 public <T extends AuditRecord> void audit (List<T> requests) {
Michael Hanlca740d72015-06-16 10:04:58 +020066 for (T rec : requests)
67 addAndRun(rec);
68 }
69
Michael Hanl1e18cb42015-08-06 20:57:35 +020070
Michael Hanl8abaf9e2016-05-23 16:46:35 +020071 public abstract void apply ();
72
73
74 protected List<AuditRecord> getRecordsToSave () {
Michael Hanlbadd79c2015-06-19 07:41:03 +020075 return this.records;
76 }
77
Michael Hanl0f6ffd72015-08-27 19:23:15 +020078
Michael Hanl8abaf9e2016-05-23 16:46:35 +020079 public abstract void finish ();
Michael Hanlca740d72015-06-16 10:04:58 +020080}