1 package org.bitrepository.audittrails.store;
2
3 import java.math.BigInteger;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8
9 import org.bitrepository.bitrepositoryelements.AuditTrailEvent;
10 import org.bitrepository.bitrepositoryelements.FileAction;
11 import org.bitrepository.common.utils.CalendarUtils;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 import static org.bitrepository.audittrails.store.AuditDatabaseExtractor.*;
16
17
18
19
20 public class AuditEventIterator {
21
22
23 private Logger log = LoggerFactory.getLogger(getClass());
24 private ResultSet auditResultSet = null;
25 private Connection conn = null;
26 private final PreparedStatement ps;
27
28
29
30
31 public AuditEventIterator(PreparedStatement ps) {
32 this.ps = ps;
33 }
34
35
36
37
38
39 public void close() throws SQLException {
40 if(auditResultSet != null) {
41 auditResultSet.close();
42 }
43
44 if(ps != null) {
45 ps.close();
46 }
47
48 if(conn != null) {
49 conn.setAutoCommit(true);
50 conn.close();
51 conn = null;
52 }
53 }
54
55
56
57
58
59
60
61 public AuditTrailEvent getNextAuditTrailEvent() {
62 try {
63 AuditTrailEvent event = null;
64 if(auditResultSet == null) {
65 conn = ps.getConnection();
66 conn.setAutoCommit(false);
67 ps.setFetchSize(100);
68 long tStart = System.currentTimeMillis();
69 log.debug("Executing query to get AuditTrailEvents resultset");
70 auditResultSet = ps.executeQuery();
71 log.debug("Finished executing AuditTrailEvents query, it took: " + (System.currentTimeMillis() - tStart) + "ms");
72 }
73 if(auditResultSet.next()) {
74 event = new AuditTrailEvent();
75 event.setActionDateTime(CalendarUtils.getFromMillis(auditResultSet.getTimestamp(POSITION_OPERATION_DATE).getTime()));
76 event.setActionOnFile(FileAction.fromValue(auditResultSet.getString(POSITION_OPERATION)));
77 event.setAuditTrailInformation(auditResultSet.getString(POSITION_AUDIT_TRAIL));
78 event.setActorOnFile(auditResultSet.getString(POSITION_ACTOR_NAME));
79 event.setFileID(auditResultSet.getString(POSITION_FILE_ID));
80 event.setInfo(auditResultSet.getString(POSITION_INFORMATION));
81 event.setReportingComponent(auditResultSet.getString(POSITION_CONTRIBUTOR_ID));
82 event.setSequenceNumber(BigInteger.valueOf(auditResultSet.getLong(POSITION_SEQUENCE_NUMBER)));
83 event.setOperationID(auditResultSet.getString(POSITION_OPERATION_ID));
84 event.setCertificateID(auditResultSet.getString(POSITION_FINGERPRINT));
85 } else {
86 close();
87 }
88
89 return event;
90 } catch (Exception e) {
91 try {
92 close();
93 } catch (SQLException e1) {
94 throw new RuntimeException("Failed to close ResultSet or PreparedStatement", e1);
95 }
96 throw new IllegalStateException("Could not extract the wanted audittrails", e);
97 }
98 }
99
100 }