package io.konik.csv.pdf;
import com.google.common.base.Function;
import io.konik.harness.FileAppender;
import javax.annotation.Nullable;
import java.util.Comparator;
/**
* {@link FileAppender} {@link Comparator} that uses {@code FileAppender.getPriority()} method
* to define correct order.
*
* Objects with higher priority come first.
*/
public class FileAppenderPriorityComparator implements Comparator<FileAppender> {
public enum Order {
DESC(new Function<Integer, Integer>() {
public Integer apply(Integer input) {
return input * -1;
}
}),
ASC(new Function<Integer, Integer>() {
public Integer apply(@Nullable Integer input) {
return input;
}
});
private Function<Integer,Integer> transform;
Order(Function<Integer,Integer> transform) {
this.transform = transform;
}
public Integer apply(Integer value) {
return this.transform.apply(value);
}
}
private final Order order;
public FileAppenderPriorityComparator(Order order) {
this.order = order;
}
@Override
public int compare(FileAppender fa1, FileAppender fa2) {
if (fa1 != null && fa2 != null) {
return order.apply(fa1.getPriority() - fa2.getPriority());
}
if (fa1 != null) {
return order.apply(1);
}
return 0;
}
}