package mandelbrot.ocamljava_maven_plugin.util; import java.io.File; import java.util.Collection; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.StringUtils; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; public class FileMappings { private static final char PACKAGE_NAME_SEPARATOR = '.'; private FileMappings() { } public static Multimap<String, String> buildPackageMap( final File prefixToTruncate, final Collection<String> artifactFiles) { final ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap .builder(); for (final String artifactFilePath : artifactFiles) { final String packageName = toPackage(prefixToTruncate, new File(artifactFilePath).getParent()); builder.put(packageName, artifactFilePath); } return builder.build(); } public static Multimap<String, String> buildPathMap( final Collection<String> artifactFiles) { final ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap .builder(); for (final String artifactFilePath : artifactFiles) { final String parent = new File(artifactFilePath).getParent(); builder.put(parent, artifactFilePath); } return builder.build(); } public static Function<String, String> toPackageTransform( final File prefixToTruncate) { return new Function<String, String>() { @Override public String apply(String path) { if (path == null) return ""; path = StringUtils.isBlank(FileUtils.getExtension(path)) ? path : new File(path).getParent(); if (path == null) return ""; if (prefixToTruncate != null && prefixToTruncate.getPath() != null && prefixToTruncate.exists()) { Preconditions.checkState(path.contains(prefixToTruncate.getPath()), "path \"" + path + "\" does not contain prefix \"" + prefixToTruncate.getPath() + "\""); final int length = prefixToTruncate.getPath().length(); if (path.length() >= length) path = path.substring(length); } path = StringTransforms.trim(path, File.separatorChar); path = path.replace(File.separatorChar, PACKAGE_NAME_SEPARATOR); return path; } }; } public static Collection<String> toPackage(final File prefixToTruncate, final Collection<String> paths) { return Collections2.transform(paths, toPackageTransform(prefixToTruncate)); } public static String toPackage(final File prefixToTruncate, final String path) { return toPackage(prefixToTruncate, ImmutableSet.<String> of(path)) .iterator().next(); } public static String toPackagePath(final File prefixToTruncate, final String path) { return toPackage(prefixToTruncate, ImmutableSet.<String> of(path)) .iterator().next().replace(PACKAGE_NAME_SEPARATOR, File.separatorChar); } public static String toPackagePath(final String prefixToTruncate, final String path) { return toPackagePath(prefixToTruncate == null ? (File) null : new File(prefixToTruncate), path); } }