code.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import java.util.List;
  2. import java.util.Locale;
  3. import java.util.Map;
  4. import java.util.Optional;
  5. public final class PreviewFile {
  6. private static final Map<String, String> RENDERERS = Map.of(
  7. "pdf", "pdfjs-dist",
  8. "ofd", "DLTech21/ofd.js",
  9. "typ", "typst.ts",
  10. "dxf", "@flyfish-dev/cad-viewer",
  11. "dwg", "@flyfish-dev/cad-viewer",
  12. "dwf", "@flyfish-dev/cad-viewer",
  13. "dwfx", "@flyfish-dev/cad-viewer",
  14. "xps", "@flyfish-dev/cad-viewer",
  15. "json", "highlight.js"
  16. );
  17. private final String name;
  18. private final long size;
  19. public PreviewFile(String name, long size) {
  20. this.name = name;
  21. this.size = size;
  22. }
  23. public String extension() {
  24. int index = name.lastIndexOf('.');
  25. return index >= 0 ? name.substring(index + 1).toLowerCase(Locale.ROOT) : "";
  26. }
  27. public Optional<String> renderer() {
  28. return Optional.ofNullable(RENDERERS.get(extension()));
  29. }
  30. public boolean requiresAsyncChunk() {
  31. return renderer().isPresent() || size > 1024 * 1024;
  32. }
  33. public static void main(String[] args) {
  34. List<PreviewFile> files = List.of(
  35. new PreviewFile("contract.pdf", 827_000),
  36. new PreviewFile("invoice.ofd", 4_278_691),
  37. new PreviewFile("report.typ", 18_000),
  38. new PreviewFile("snippet.java", 2_400)
  39. );
  40. files.forEach(file -> System.out.printf(
  41. "%s -> %s async=%s%n",
  42. file.name,
  43. file.renderer().orElse("fallback"),
  44. file.requiresAsyncChunk()
  45. ));
  46. }
  47. }