package com.github.vbauer.jconditions.checker;
import com.github.vbauer.jconditions.annotation.HasFreeSpace;
import com.github.vbauer.jconditions.core.CheckerContext;
import com.github.vbauer.jconditions.core.ConditionChecker;
import java.io.File;
/**
* @author Vladislav Bauer
*/
public class HasFreeSpaceChecker implements ConditionChecker<HasFreeSpace> {
/**
* {@inheritDoc}
*/
@Override
public boolean isSatisfied(final CheckerContext<HasFreeSpace> context) throws Exception {
final HasFreeSpace annotation = context.getAnnotation();
final String[] targets = annotation.value();
final long min = annotation.min();
final long max = annotation.max();
return isSatisfied(targets, min, max);
}
private boolean isSatisfied(final String[] targets, final long min, final long max) {
for (final String target : targets) {
if (!isSatisfied(target, max, min)) {
return false;
}
}
return targets.length > 0;
}
private boolean isSatisfied(final String target, final long max, final long min) {
final File file = new File(target);
if (file.exists()) {
final long freeSpace = file.getFreeSpace();
if (min != HasFreeSpace.UNDEFINED && freeSpace < min) {
return false;
} else if (max != HasFreeSpace.UNDEFINED && freeSpace > max) {
return false;
}
}
return true;
}
}