package dslog; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import java.util.function.Supplier; class Logdir { public static class LogSet { public final String name; public LogSet(String name) { this.name = name; } public Path dslogPath, dseventsPath, pdplogPath; public String toString() { return name+" "+verstr(this::dslog)+"/"+verstr(this::dsevents)+"/"+verstr(this::pdplog); } private static String verstr(Versioned.Supplier getter) { try (Versioned thing = getter.get()) { if (thing == null) { return "␕"; } return ""+thing.version(); } catch (IOException e) { return "☠"; } } public DslogReader dslog() throws IOException { if (dslogPath == null) { return null; } return new DslogReader(Files.newInputStream(dslogPath)); } public DseventsReader dsevents() throws IOException { if (dseventsPath == null) { return null; } return new DseventsReader(Files.newInputStream(dseventsPath)); } public PdplogReader pdplog() throws IOException { if (pdplogPath == null) { return null; } return new PdplogReader(Files.newInputStream(pdplogPath)); } } private static LogSet getSet(Map sets, String filename) { String setname = filename.substring(0, filename.lastIndexOf('.')); LogSet set; set = sets.get(setname); if (set == null) { set = new LogSet(setname); sets.put(set.name, set); } return set; } public static SortedMap opendir(String dirname) throws IOException { SortedMap logsets = new TreeMap(); List errs = new ArrayList(); Files.list(Paths.get(dirname)).forEach(filepath->{ String filename = filepath.getFileName().toString(); if (filename.endsWith(".dslog")) { getSet(logsets, filename).dslogPath = filepath; } else if (filename.endsWith(".dsevents")) { getSet(logsets, filename).dseventsPath = filepath; } else if (filename.endsWith(".pdplog")) { getSet(logsets, filename).pdplogPath = filepath; } }); return logsets; } }