use of org.bimserver.database.CleanupListener in project BIMserver by opensourceBIM.
the class LongCheckinAction method execute.
public void execute() {
DatabaseSession session = getBimServer().getDatabase().createSession(OperationType.POSSIBLY_WRITE);
try {
checkinDatabaseAction.setDatabaseSession(session);
session.setCleanupListener(new CleanupListener() {
@Override
public void cleanup() {
try (DatabaseSession tmpSession = getBimServer().getDatabase().createSession(OperationType.READ_WRITE)) {
Project project = tmpSession.get(checkinDatabaseAction.getPoid(), OldQuery.getDefault());
project.setCheckinInProgress(0);
tmpSession.store(project);
try {
tmpSession.commit();
} catch (ServiceException e2) {
LOGGER.error("", e2);
}
} catch (BimserverDatabaseException e1) {
LOGGER.error("", e1);
}
}
});
session.executeAndCommitAction(checkinDatabaseAction, new ProgressHandler() {
private int count;
@Override
public void progress(int current, int max) {
if (count == 0) {
updateProgress("Saving to database (" + fileName + ")", current * 100 / max);
} else {
updateProgress("Saving to database (" + fileName + ", " + count + " try)", current * 100 / max);
}
}
@Override
public void retry(int count) {
this.count = count;
}
});
} catch (Exception e) {
if (e instanceof UserException) {
} else if (e instanceof BimserverConcurrentModificationDatabaseException) {
// Ignore
} else {
LOGGER.error("", e);
}
error(e);
} finally {
session.close();
if (getActionState() != ActionState.AS_ERROR) {
changeActionState(ActionState.FINISHED, "Checkin of " + fileName, 100);
}
done();
}
}
Aggregations