andreschaffer/media-streaming-examples

View on GitHub
src/main/java/videoservice/bootstrap/DirectoryFinder.java

Summary

Maintainability
A
0 mins
Test Coverage
B
83%
package videoservice.bootstrap;

import static java.lang.String.format;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Optional;

class DirectoryFinder {

  File find(String path) throws Exception {
    return firstNonNull(
        getDirectoryFromClassLocation(path).orElse(null),
        getDirectoryFromClassloader(path).orElse(null),
        format("Could not find directory '%s' or it is not a directory", path)
    );
  }

  private File firstNonNull(File file1, File file2, String errorMessage) {
    if (file1 != null) {
      return file1;
    }
    if (file2 != null) {
      return file2;
    }
    throw new IllegalArgumentException(errorMessage);
  }

  private Optional<File> getDirectoryFromClassLocation(String path) throws URISyntaxException {
    File file = new File(
        getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve(path));
    return file.isDirectory() ? Optional.of(file) : Optional.empty();
  }

  private Optional<File> getDirectoryFromClassloader(String path) throws URISyntaxException {
    URL url = Thread.currentThread().getContextClassLoader().getResource(path);
    if (url == null) {
      return Optional.empty();
    }
    File file = new File(url.toURI());
    return file.isDirectory() ? Optional.of(file) : Optional.empty();
  }
}