All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.ltgt.gwt.maven.SourcesAsResourcesHelper Maven / Gradle / Ivy

package net.ltgt.gwt.maven;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.apache.maven.model.Resource;
import org.apache.maven.plugin.logging.Log;

class SourcesAsResourcesHelper {
  static List filterSourceRoots(Log log, Iterable resources, Iterable sourceRoots) {
    final Set resourceDirs = prepareResources(resources);
    final List filteredSourceRoots = new ArrayList<>();
    for (String sourceRoot : sourceRoots) {
      if (checkSourceRoot(log, resourceDirs, sourceRoot)) {
        filteredSourceRoots.add(sourceRoot);
      }
    }
    return filteredSourceRoots;
  }

  private static Set prepareResources(Iterable resources) {
    final Set resourceDirs = new LinkedHashSet<>();
    for (Resource resource : resources) {
      resourceDirs.add(ensureTrailingSlash(resource.getDirectory()));
    }
    return resourceDirs;
  }

  static String ensureTrailingSlash(String directory) {
    if (directory.endsWith("/")) {
      return directory;
    }
    return directory + "/";
  }

  private static boolean checkSourceRoot(Log log, Set resourceDirs, String sourceRoot) {
    sourceRoot = ensureTrailingSlash(sourceRoot);
    for (String resourceDir : resourceDirs) {
      if (resourceDir.equals(sourceRoot)) {
        log.info(sourceRoot + " already added as a resource folder; skipping.");
        continue;
      }
      if (resourceDir.startsWith(sourceRoot) || sourceRoot.startsWith(resourceDir)) {
        log.warn(String.format(
            "Conflicting path between source folder (%s, to be added as resource) and resource (%s); skipping.",
            sourceRoot, resourceDir));
        return false;
      }
    }
    return true;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy