package krasa.formatter.settings.provider; import krasa.formatter.common.ModifiableFile; import krasa.formatter.exception.ParsingFailedException; import krasa.formatter.settings.Settings; import krasa.formatter.utils.FileUtils; import krasa.formatter.utils.StringUtils; import java.io.File; import java.util.*; /** * @author Vojtech Krasa */ public class ImportOrderProvider extends CachedProvider<List<String>> { public ImportOrderProvider(Settings settings) { super(new ModifiableFile(settings.getImportOrderConfigFilePath())); } public static List<String> toList(String importOrder) { return StringUtils.trimToList(importOrder); } @Override protected List<String> readFile(File file) { Properties properties = FileUtils.readPropertiesFile(file); String property = properties.getProperty("org.eclipse.jdt.ui.importorder"); List<String> order; if (property != null) { order = toList(property); } else if (property == null && file.getName().endsWith(".prefs")) { throw new ParsingFailedException( "File is missing a property 'org.eclipse.jdt.ui.importorder', see instructions."); } else if (file.getName().endsWith(".importorder")) { order = loadImportOrderFile(properties); } else { throw new ParsingFailedException( "You must provide either *.importorder file or 'org.eclipse.jdt.ui.prefs' file, see instructions."); } return order; } private List<String> loadImportOrderFile(Properties file) { TreeMap treeMap = new TreeMap(new Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.parseInt(o1) - Integer.parseInt(o2); } }); treeMap.putAll(file); return new ArrayList<String>(treeMap.values()); } }