package org.embulk.spi.unit;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.embulk.spi.Exec;
import org.embulk.spi.TempFileSpace;
import org.embulk.spi.TempFileException;
public class LocalFile
{
public static LocalFile of(File path) throws IOException
{
return of(path.toPath());
}
public static LocalFile of(Path path) throws IOException
{
return new LocalFile(path, Files.readAllBytes(path));
}
public static LocalFile of(String path) throws IOException
{
return of(Paths.get(path));
}
public static LocalFile ofContent(byte[] content)
{
return new LocalFile(content);
}
public static LocalFile ofContent(String content)
{
return new LocalFile(content.getBytes(StandardCharsets.UTF_8));
}
private Path path;
private final byte[] content;
private LocalFile(Path path, byte[] content)
{
this.path = path;
this.content = content;
}
private LocalFile(byte[] content)
{
this.path = null;
this.content = content;
}
public File getFile()
{
return getPath(Exec.getTempFileSpace()).toFile();
}
public File getFile(TempFileSpace space)
{
return getPath(space).toFile();
}
public Path getPath()
{
return getPath(Exec.getTempFileSpace());
}
public synchronized Path getPath(TempFileSpace tempFileSpace)
{
if (path == null) {
Path temp = tempFileSpace.createTempFile().toPath();
try {
Files.write(temp, content);
} catch (IOException ex) {
throw new TempFileException(ex);
}
this.path = temp;
}
return path;
}
public byte[] getContent()
{
return content;
}
public String getContentAsString()
{
return new String(content);
}
public String getContentAsString(Charset charset)
{
return new String(content, charset);
}
public InputStream newContentInputStream()
{
return new ByteArrayInputStream(content);
}
}