62 lines
1.1 KiB
Java
62 lines
1.1 KiB
Java
package net.filebot.vfs;
|
|
|
|
import static java.util.Collections.*;
|
|
import static net.filebot.Logging.*;
|
|
|
|
import java.nio.ByteBuffer;
|
|
import java.util.EnumSet;
|
|
import java.util.logging.Level;
|
|
|
|
public enum ArchiveType {
|
|
|
|
ZIP {
|
|
|
|
@Override
|
|
public Iterable<MemoryFile> fromData(ByteBuffer data) {
|
|
return new ZipArchive(data);
|
|
}
|
|
},
|
|
|
|
UNDEFINED {
|
|
|
|
@Override
|
|
public Iterable<MemoryFile> fromData(ByteBuffer data) {
|
|
for (ArchiveType type : EnumSet.of(ZIP)) {
|
|
try {
|
|
Iterable<MemoryFile> files = type.fromData(data);
|
|
if (files.iterator().hasNext()) {
|
|
return files;
|
|
}
|
|
} catch (Exception e) {
|
|
debug.log(Level.WARNING, e, e::toString);
|
|
}
|
|
}
|
|
|
|
// cannot extract data, return empty archive
|
|
return emptySet();
|
|
}
|
|
},
|
|
|
|
UNKOWN {
|
|
|
|
@Override
|
|
public Iterable<MemoryFile> fromData(ByteBuffer data) {
|
|
// cannot extract data, return empty archive
|
|
return emptySet();
|
|
}
|
|
};
|
|
|
|
public abstract Iterable<MemoryFile> fromData(ByteBuffer data);
|
|
|
|
public static ArchiveType forName(String name) {
|
|
if (name == null)
|
|
return UNDEFINED;
|
|
|
|
if ("zip".equalsIgnoreCase(name))
|
|
return ZIP;
|
|
|
|
return UNKOWN;
|
|
}
|
|
|
|
}
|