001package io.konik.csv.pdf; 002 003import com.google.common.base.Function; 004import io.konik.harness.FileAppender; 005 006import javax.annotation.Nullable; 007import java.util.Comparator; 008 009/** 010 * {@link FileAppender} {@link Comparator} that uses {@code FileAppender.getPriority()} method 011 * to define correct order. 012 * 013 * Objects with higher priority come first. 014 */ 015public class FileAppenderPriorityComparator implements Comparator<FileAppender> { 016 017 public enum Order { 018 DESC(new Function<Integer, Integer>() { 019 public Integer apply(Integer input) { 020 return input * -1; 021 } 022 }), 023 ASC(new Function<Integer, Integer>() { 024 public Integer apply(@Nullable Integer input) { 025 return input; 026 } 027 }); 028 029 private Function<Integer,Integer> transform; 030 031 Order(Function<Integer,Integer> transform) { 032 this.transform = transform; 033 } 034 035 public Integer apply(Integer value) { 036 return this.transform.apply(value); 037 } 038 } 039 040 private final Order order; 041 042 public FileAppenderPriorityComparator(Order order) { 043 this.order = order; 044 } 045 046 @Override 047 public int compare(FileAppender fa1, FileAppender fa2) { 048 if (fa1 != null && fa2 != null) { 049 return order.apply(fa1.getPriority() - fa2.getPriority()); 050 } 051 052 if (fa1 != null) { 053 return order.apply(1); 054 } 055 056 return 0; 057 } 058}