public MediaType detect()

in digital-document-service/src/main/java/com/epam/digital/data/platform/dgtldcmnt/detector/DigitalDocumentMediaTypeDetector.java [44:76]


  public MediaType detect(InputStream input, Metadata metadata) throws IOException {
    var mediaType = defaultDetector.detect(input, metadata);
    log.trace("Detected media type - '{}'", mediaType);

    if (mediaType.equals(MediaType.parse(DocumentConstants.SIGNATURE_TYPE))) {
      log.trace("As media type is  - '{}'. Checking filename extension",
          DocumentConstants.SIGNATURE_TYPE);
      // if file extension is p7s then return found media type
      var name = metadata.get(TikaCoreProperties.RESOURCE_NAME_KEY);
      var extension = FilenameUtils.getExtension(name);
      if (DocumentConstants.P7S_EXTENSION.equals(extension)) {
        log.trace("As filename extension is '{}' then return found media type - '{}'",
            DocumentConstants.P7S_EXTENSION, mediaType);
        return mediaType;
      }

      log.trace("Filename extension is not '{}'. "
              + "Skip first '{}' bytes in input stream and detect again",
          DocumentConstants.P7S_EXTENSION, SIGNATURE_BYTES_LENGTH);
      input.mark(SIGNATURE_BYTES_LENGTH);
      // file is signed so skip first 65 bytes and detect again
      try {
        input.readNBytes(SIGNATURE_BYTES_LENGTH);
        var newMediaType = defaultDetector.detect(new BufferedInputStream(input), metadata);
        log.trace("Detected media type for signed file - '{}'", newMediaType);
        return newMediaType;
      } finally {
        input.reset();
      }
    }

    return mediaType;
  }