try {
stmt = con
.prepareStatement("INSERT INTO hh_datum VALUES (nextval('hh_datum_id_sequence'), ?, ?, ?, ?)");
Statement st = con.createStatement();
st.executeUpdate("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE"); } catch (SQLException e1) {
throw new InternalException(e1);
}
int batchSize = 0;
for (int i = 0; i < dataRaw.size(); i++) {
// Debug.print("Start processing hh: " + (System.currentTimeMillis()
// - now));
boolean added = false;
boolean altered = false;
HhDatumRaw datumRaw = dataRaw.get(i);
HhDatum datum = null;
if (i - missing < data.size()) {
datum = data.get(i - missing);
if (!datumRaw.getStartDate().equals(datum.getStartDate())) {
datum = null;
}
}
if (datum == null) {
// Debug.print("About to save datum: "
// + (System.currentTimeMillis() - now));
try {
stmt.setLong(1, channel.getId());
stmt.setTimestamp(2, new Timestamp(datumRaw.getStartDate()
.getDate().getTime()));
stmt.setBigDecimal(3, datumRaw.getValue());
stmt.setString(4, Character.toString(datumRaw.getStatus()));
stmt.addBatch();
batchSize++;
} catch (SQLException e) {
throw new InternalException(e);
}
// Debug.print("Saved datum: "
// + (System.currentTimeMillis() - now));
// Hiber.flush();
lastAdditionDate = datumRaw.getStartDate();
added = true;
missing++;
if (deleteMissingFrom == null) {
deleteMissingFrom = datumRaw.getStartDate();
}
deleteMissingTo = datumRaw.getStartDate();
// Debug.print("Resolved missing: "
// + (System.currentTimeMillis() - now));
} else if (datumRaw.getValue().doubleValue() != datum.getValue()
.doubleValue() || datumRaw.getStatus() != datum.getStatus()) {
// Debug.print("About to update datum: " + datum + " with " +
// datumRaw + " "
// + (System.currentTimeMillis() - now));
originalDatumValue = datum.getValue();
originalDatumStatus = datum.getStatus();
datum.update(datumRaw.getValue(), datumRaw.getStatus());
Hiber.flush();
altered = true;
}
// Debug.print("About to see if changed: "
// + (System.currentTimeMillis() - now));
if (added || altered) {
if (siteCheckFrom == null) {
siteCheckFrom = datumRaw.getStartDate();
}
siteCheckTo = datumRaw.getStartDate();
if (datumRaw.getValue().doubleValue() < 0) {
channel.addSnag(ChannelSnag.SNAG_NEGATIVE, datumRaw.getStartDate(),
datumRaw.getStartDate());
} else if (altered && originalDatumValue.doubleValue() < 0) {
channel.deleteSnag(ChannelSnag.SNAG_NEGATIVE,
datumRaw.getStartDate());
}
if (HhDatum.ACTUAL != datumRaw.getStatus()) {
if (notActualFrom == null) {
notActualFrom = datumRaw.getStartDate();
}
notActualTo = datumRaw.getStartDate();
} else if (altered && originalDatumStatus != HhDatum.ACTUAL) {
channel.deleteSnag(ChannelSnag.SNAG_ESTIMATED,
datumRaw.getStartDate());
}
}
if (lastAdditionDate != null
&& (lastAdditionDate.equals(prevStartDate) || batchSize > 100)) {
// Debug.print("About to execute batch "
// + (System.currentTimeMillis() - now));
try {
stmt.executeBatch();
Statement st = con.createStatement();
st.executeUpdate("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE");
// Debug.print("Added lines.");
batchSize = 0;
} catch (SQLException e) {
throw new InternalException(e);
}
lastAdditionDate = null;
}
if (siteCheckTo != null && siteCheckTo.equals(prevStartDate)) {
// Debug.print("About to do site check: "
// + (System.currentTimeMillis() - now));
channel.siteCheck(siteCheckFrom, siteCheckTo);
siteCheckFrom = null;
siteCheckTo = null;
// Debug.print("Finished site check: "
// + (System.currentTimeMillis() - now));
}
if (notActualTo != null && notActualTo.equals(prevStartDate)) {
// Debug.print("Started not actual: "
// + (System.currentTimeMillis() - now));
channel.addSnag(ChannelSnag.SNAG_ESTIMATED, notActualFrom, notActualTo);
// Debug.print("Finished not actual: "
// + (System.currentTimeMillis() - now));
notActualFrom = null;
notActualTo = null;
}
if (deleteMissingTo != null
&& deleteMissingTo.equals(prevStartDate)) {
// Debug.print("Starting resolvedMissing: "
// + (System.currentTimeMillis() - now));
channel.deleteSnag(ChannelSnag.SNAG_MISSING, deleteMissingFrom,
deleteMissingTo);
deleteMissingFrom = null;
deleteMissingTo = null;
// Debug.print("Finished resolveMissing: "
// + (System.currentTimeMillis() - now));
}
prevStartDate = datumRaw.getStartDate();
}
if (lastAdditionDate != null && lastAdditionDate.equals(prevStartDate)) {
// Debug.print("About to execute batch 2: "
// + (System.currentTimeMillis() - now));
try {
stmt.executeBatch();
Statement st = con.createStatement();
st.executeUpdate("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE");
} catch (SQLException e) {
throw new InternalException(e);
}
lastAdditionDate = null;
}
if (siteCheckTo != null && siteCheckTo.equals(prevStartDate)) {
// Debug.print("About to start site thing 2: "