in tools/cli/src/main/java/org/apache/batchee/cli/command/JobOperatorCommand.java [376:427]
private boolean explode(final File source, final File target) {
final File parentDir = target.getAbsoluteFile().getParentFile();
final File timestamp = new File(parentDir, target.getName() + ".timestamp.txt");
long ts = Long.MIN_VALUE;
if (target.exists()) {
if (timestamp.exists()) {
ts = getTimestampFromFile(timestamp);
}
}
final long sourceLastModifiedTst = source.lastModified();
if (ts == Long.MIN_VALUE || ts < sourceLastModifiedTst) {
FileLock lock = null;
if (!parentDir.exists()) {
parentDir.mkdirs();
}
final File lockFile = new File(parentDir, target.getName() + ".batchee.lock");
if (lockFile.exists() && lockFile.lastModified() > (new Date().getTime() - TimeUnit.SECONDS.toMillis(5) )) {
return false;
}
try (FileOutputStream fileOutputStream = new FileOutputStream(lockFile)) {
FileChannel channel = fileOutputStream.getChannel();
lock = channel.tryLock();
if (lock == null) {
return false;
}
if (timestamp.exists()) {
ts = getTimestampFromFile(timestamp);
}
// check timestamp again
if (ts == Long.MIN_VALUE || ts < sourceLastModifiedTst) {
FileUtils.deleteDirectory(target);
Zips.unzip(source, target);
FileUtils.write(timestamp, Long.toString(sourceLastModifiedTst));
}
lock.release();
} catch (final IOException e) {
return false;
} finally {
if (lockFile.exists()) {
lockFile.delete();
}
}
}
return true;
}