package com.dragome.commons.compiler;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;;
public class CopyUtils
{
// public static void copyJarFile(JarFile jarFile, JarOutputStream jos, ClasspathFileFilter classpathEntryFilter) throws IOException
// {
// Enumeration<JarEntry> entries= jarFile.entries();
//
// while (entries.hasMoreElements())
// {
// JarEntry entry= entries.nextElement();
// String entryName= entry.getName();
// ClasspathFile classpathFile= null;
// if (classpathEntryFilter.accept(classpathFile))
// {
// InputStream is= jarFile.getInputStream(entry);
// addEntryToJar(jos, is, entryName);
// }
// }
// }
public static void addEntryToJar(JarOutputStream jos, InputStream is, String entryName)
{
try
{
jos.putNextEntry(new JarEntry(entryName));
byte[] buffer= new byte[4096];
int bytesRead= 0;
while ((bytesRead= is.read(buffer)) != -1)
{
jos.write(buffer, 0, bytesRead);
}
}
catch (Exception e)
{
// e.printStackTrace();
}
finally
{
try
{
is.close();
jos.flush();
jos.closeEntry();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
}
// public static void copyClassToJarFile(final File fileClassPathEntry, final JarOutputStream jos, final ClasspathFileFilter classpathEntryFilter) throws Exception
// {
// if (fileClassPathEntry != null && fileClassPathEntry.exists())
// Files.walkFileTree(fileClassPathEntry.toPath(), new SimpleFileVisitor<Path>()
// {
// public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
// {
// String string= fileClassPathEntry.toPath().relativize(file).toString();
//
// if (classpathEntryFilter.keepTheClass(string))
// {
// InputStream inputStream= Files.newInputStream(file);
// addEntryToJar(jos, inputStream, string);
// }
//
// return FileVisitResult.CONTINUE;
// }
//
// });
// }
public static void copyFilesOfFolder(final File fileClassPathEntry, final File targetFolder) throws Exception
{
if (fileClassPathEntry != null && fileClassPathEntry.exists())
Files.walkFileTree(fileClassPathEntry.toPath(), new SimpleFileVisitor<Path>()
{
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
File file2= new File(targetFolder.getParentFile(), fileClassPathEntry.toPath().relativize(file).toString());
Files.copy(file, file2.toPath(), StandardCopyOption.REPLACE_EXISTING);
return FileVisitResult.CONTINUE;
}
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException
{
if (dir.toString().contains("compiled-js") || dir.toString().contains("WEB-INF"))
{
return FileVisitResult.SKIP_SUBTREE;
}
else
{
File file2= new File(targetFolder.getParentFile(), fileClassPathEntry.toPath().relativize(dir).toString());
file2.mkdirs();
return FileVisitResult.CONTINUE;
}
}
});
}
}