public ResourceResolver(
      Log log,
      ResourceDirectory source,
      ResourceDirectory test,
      List<ResourceDirectory> overlays,
      List<ResourceDirectory> preloadOverlayDirs) {
    this.log = log;
    this.source = source;
    this.test = test;
    this.sourceOverlays = overlays;
    this.preloadOverlayDirs = preloadOverlayDirs;

    for (ResourceDirectory overlay : overlays) {
      registerResourcesToMap(
          SRC_RESOURCE_PREFIX, directoryScanner.scan(overlay), overlay.getDirectory(), true);
    }
    for (ResourceDirectory overlayPreload : preloadOverlayDirs) {
      registerResourcesToMap(
          SRC_RESOURCE_PREFIX,
          directoryScanner.scan(overlayPreload),
          overlayPreload.getDirectory(),
          false);
    }
    registerResourcesToMap(
        TEST_RESOURCE_PREFIX, directoryScanner.scan(test), test.getDirectory(), true);
    registerSrcResourcesToMap(
        SRC_RESOURCE_PREFIX, directoryScanner.scan(source), source.getDirectory(), true);

    if (log.isDebugEnabled()) {
      log.debug("Resources resolved by the server : ");
      for (String resourcePath : resources.keySet()) {
        log.debug("* " + resourcePath + " to " + resources.get(resourcePath));
      }
    }
  }
 public void updateChangeableDirectories() {
   cleanNotExists();
   if (source.isUpdatable()) {
     log.debug("Updating directory files for " + source.getDirectory());
     registerResourcesToMap(
         SRC_RESOURCE_PREFIX, directoryScanner.scan(source), source.getDirectory(), false);
   }
   if (test.isUpdatable()) {
     log.debug("Updating directory files for " + test.getDirectory());
     registerResourcesToMap(
         TEST_RESOURCE_PREFIX, directoryScanner.scan(test), test.getDirectory(), false);
   }
   for (ResourceDirectory overlayPreload : preloadOverlayDirs) {
     log.debug("Updating directory files for " + overlayPreload.getDirectory());
     registerResourcesToMap(
         SRC_RESOURCE_PREFIX,
         directoryScanner.scan(overlayPreload),
         overlayPreload.getDirectory(),
         false);
   }
 }