private void addZipEntry(final StroomZipEntry stroomZipEntry) {
        final String baseName = stroomZipEntry.getBaseName();
        LOGGER.debug("Adding stroomZipEntry {} to group", stroomZipEntry);
        map.computeIfAbsent(stroomZipEntry.getBaseName(), k -> {
            LOGGER.debug("Creating group with baseName '{}'", baseName);
            baseNames.add(k);
            return new StroomZipEntryGroup(k);
        }).add(stroomZipEntry);
    }
This class is responsible for grouping file entries in a stroom format zip by their common base name.
It relies on the standard file extensions defined in {@link StroomZipFileType}.
Files with no extension or a non-standard extension are treated as data files.
There can be only one of each file type in a group, identified by its base name.
<pre>
 Filename        Group BaseName      Notes
 001             1     001           # No ext so treated as 001.dat
 001.ctx         1     001

 002.dat         2     002
 002.ctx         2     002

 003.unknown     3     003           # Non-standard ext, initially treated as 003.unknown.dat
 003.ctx         3     003           # At this point we re-classify the one above as 003.dat

 abc.xyz.004     4     abc.xyz.004   # Non-standard ext, so treated as abc.xyz.004.dat

 abc.xyz.005     5     abc.xyz.005   # Non-standard ext, so treated as abc.xyz.005.dat

 abc.xyz.006     6     abc.xyz.006   # Non-standard ext, so treated as abc.xyz.006.dat
 abc.xyz.006.ctx 6     abc.xyz.006

 007.foo         7     007           # Non-standard ext, so treated as 007.foo.dat
 007.bar         7     007           # Non-standard ext, so treated as 007.bar.dat
 007.ctx         7     007           # Now we re-classify the two above as 007.dat and 007.dat and
                                       raise dup file error
 </pre>
stroom-data/stroom-data-zip/src/main/java/stroom/data/zip/StroomZipEntries.java