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 }