001 package org.kuali.common.util;
002
003 import java.io.File;
004 import java.io.IOException;
005 import java.util.ArrayList;
006 import java.util.Arrays;
007 import java.util.Collections;
008 import java.util.List;
009
010 import org.apache.commons.io.FileUtils;
011 import org.codehaus.plexus.util.StringUtils;
012 import org.slf4j.Logger;
013 import org.slf4j.LoggerFactory;
014
015 public class MetaInfUtils {
016
017 private static final Logger logger = LoggerFactory.getLogger(MetaInfUtils.class);
018
019 public static void scanAndCreateFiles(List<MetaInfContext> contexts) throws IOException {
020 for (MetaInfContext context : contexts) {
021 Assert.notNull(context.getBaseDir(), "baseDir is null");
022 Assert.notNull(context.getOutputFile(), "outputFile is null");
023 List<String> includes = context.getIncludes();
024 List<String> excludes = context.getExcludes();
025 logger.info("Examining - " + context.getBaseDir().getCanonicalPath());
026 logger.info("Include - " + CollectionUtils.getSpaceSeparatedString(includes));
027 logger.info("Exclude - " + CollectionUtils.getSpaceSeparatedString(excludes));
028 SimpleScanner scanner = new SimpleScanner(context.getBaseDir(), includes, excludes);
029 List<File> files = scanner.getFiles();
030 logger.info("Located " + files.size() + " files");
031 List<String> locations = getLocations(context.getBaseDir(), files, context.getPrefix());
032 if (context.isSort()) {
033 Collections.sort(locations);
034 }
035 logger.info("Creating " + context.getOutputFile().getCanonicalPath());
036 FileUtils.writeLines(context.getOutputFile(), locations);
037 }
038 }
039
040 public static void scanAndCreateFile(MetaInfContext context) throws IOException {
041 scanAndCreateFiles(Arrays.asList(context));
042 }
043
044 public static List<String> getLocations(File baseDir, List<File> files, String prefix) throws IOException {
045 List<String> locations = new ArrayList<String>();
046 for (int i = 0; i < files.size(); i++) {
047 String location = getLocation(baseDir, files.get(i), prefix);
048 locations.add(location);
049 }
050 return locations;
051 }
052
053 public static String getLocation(File baseDir, File file, String prefix) throws IOException {
054 String dir = baseDir.getCanonicalPath();
055 String path = file.getCanonicalPath();
056 int pos = dir.length() + 1;
057 return prefix + StringUtils.substring(path, pos);
058 }
059
060 }