package dslog; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.SortedMap; import java.util.Map; import java.util.TreeMap; class Logdir { public static class LogSet { public String name; public String dslog = "␕"; public String dsevents = "␕"; public String pdplog = "␕"; public String toString() { return name+" "+dslog+"/"+dsevents+"/"+pdplog; } } private static LogSet getSet(Map sets, String name) { LogSet set; synchronized (sets) { set = sets.get(name); if (set == null) { set = new LogSet(); set.name = name; sets.put(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)).parallel().forEach(filepath->{ try { String filename = filepath.getFileName().toString(); if (filename.endsWith(".dslog")) { String setname = filename.substring(0, filename.lastIndexOf('.')); try (DslogReader dslog = new DslogReader(Files.newInputStream(filepath))) { getSet(logsets, setname).dslog = ""+dslog.version(); } catch (Exception e) { getSet(logsets, setname).pdplog = "☠"; throw e; } } else if (filename.endsWith(".dsevents")) { String setname = filename.substring(0, filename.lastIndexOf('.')); try (DseventsReader dsevents = new DseventsReader(Files.newInputStream(filepath))) { getSet(logsets, setname).dsevents = ""+dsevents.version(); } catch (Exception e) { getSet(logsets, setname).pdplog = "☠"; throw e; } } else if (filename.endsWith(".pdplog")) { String setname = filename.substring(0, filename.lastIndexOf('.')); try (PdplogReader pdplog = new PdplogReader(Files.newInputStream(filepath))) { getSet(logsets, setname).pdplog = ""+pdplog.version(); } catch (Exception e) { getSet(logsets, setname).pdplog = "☠"; throw e; } } } catch (Exception e) { e = new IOException("Could not read file: "+filepath.toString(), e); synchronized (errs) { errs.add(e); } e.printStackTrace(); } }); return logsets; } }