001 package org.kuali.common.util.execute; 002 003 import java.io.File; 004 import java.util.List; 005 006 import org.kuali.common.util.Assert; 007 import org.kuali.common.util.LocationUtils; 008 import org.kuali.common.util.nullify.NullUtils; 009 import org.slf4j.Logger; 010 import org.slf4j.LoggerFactory; 011 012 public class CopyClasspathLocationsToDirectoryExecutable implements Executable { 013 014 private static final Logger logger = LoggerFactory.getLogger(CopyClasspathLocationsToDirectoryExecutable.class); 015 016 String locationListing; 017 File directory; 018 String encoding; 019 020 @Override 021 public void execute() { 022 if (NullUtils.isNullOrNone(locationListing)) { 023 logger.info("Skipping execution. Location listing [{}]", locationListing); 024 return; 025 } 026 Assert.notNull(locationListing); 027 Assert.notNull(directory); 028 Assert.isTrue(LocationUtils.exists(locationListing)); 029 logger.info("Copying [{}] -> [{}]", locationListing, LocationUtils.getCanonicalPath(directory)); 030 List<String> locations = LocationUtils.getLocations(locationListing, encoding); 031 List<String> filenames = LocationUtils.getClasspathFilenames(locations); 032 List<File> files = LocationUtils.getFiles(directory, filenames); 033 copyLocationsToFiles(locations, files, encoding); 034 logger.info("Copied {} files", locations.size()); 035 } 036 037 protected void copyLocationsToFiles(List<String> locations, List<File> files, String encoding) { 038 Assert.isTrue(locations.size() == files.size()); 039 for (int i = 0; i < locations.size(); i++) { 040 String location = locations.get(i); 041 File destination = files.get(i); 042 LocationUtils.copyLocationToFile(location, destination, encoding); 043 } 044 } 045 046 public String getLocationListing() { 047 return locationListing; 048 } 049 050 public void setLocationListing(String locationListing) { 051 this.locationListing = locationListing; 052 } 053 054 public File getDirectory() { 055 return directory; 056 } 057 058 public void setDirectory(File directory) { 059 this.directory = directory; 060 } 061 062 public String getEncoding() { 063 return encoding; 064 } 065 066 public void setEncoding(String encoding) { 067 this.encoding = encoding; 068 } 069 }