1 package org.kuali.common.util.execute; 2 3 import java.io.File; 4 import java.util.List; 5 6 import org.kuali.common.util.Assert; 7 import org.kuali.common.util.CollectionUtils; 8 import org.kuali.common.util.LocationUtils; 9 import org.kuali.common.util.nullify.NullUtils; 10 import org.slf4j.Logger; 11 import org.slf4j.LoggerFactory; 12 13 public class CopyLocationsToDirectoryExecutable implements Executable { 14 15 private static final Logger logger = LoggerFactory.getLogger(CopyLocationsToDirectoryExecutable.class); 16 17 boolean addSequenceToFilenames = true; 18 String locationListing; 19 File directory; 20 String encoding; 21 22 @Override 23 public void execute() { 24 if (NullUtils.isNullOrNone(locationListing)) { 25 logger.info("Skipping execution. Location listing [{}]", locationListing); 26 return; 27 } 28 Assert.notNull(locationListing); 29 Assert.notNull(directory); 30 Assert.isTrue(LocationUtils.exists(locationListing)); 31 logger.info("Copying [{}] -> [{}]", locationListing, LocationUtils.getCanonicalPath(directory)); 32 List<String> locations = LocationUtils.getLocations(locationListing, encoding); 33 List<String> filenames = LocationUtils.getFilenames(locations); 34 if (addSequenceToFilenames) { 35 filenames = CollectionUtils.getSequencedStrings(filenames); 36 } 37 List<File> files = LocationUtils.getFiles(directory, filenames); 38 copyLocationsToFiles(locations, files, encoding); 39 logger.info("Copied {} files", locations.size()); 40 } 41 42 protected void copyLocationsToFiles(List<String> locations, List<File> files, String encoding) { 43 Assert.isTrue(locations.size() == files.size()); 44 for (int i = 0; i < locations.size(); i++) { 45 String location = locations.get(i); 46 File destination = files.get(i); 47 LocationUtils.copyLocationToFile(location, destination, encoding); 48 } 49 } 50 51 public String getLocationListing() { 52 return locationListing; 53 } 54 55 public void setLocationListing(String locationListing) { 56 this.locationListing = locationListing; 57 } 58 59 public File getDirectory() { 60 return directory; 61 } 62 63 public void setDirectory(File directory) { 64 this.directory = directory; 65 } 66 67 public boolean isAddSequenceToFilenames() { 68 return addSequenceToFilenames; 69 } 70 71 public void setAddSequenceToFilenames(boolean addSequenceToFilenames) { 72 this.addSequenceToFilenames = addSequenceToFilenames; 73 } 74 75 public String getEncoding() { 76 return encoding; 77 } 78 79 public void setEncoding(String encoding) { 80 this.encoding = encoding; 81 } 82 }