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    }