nl.hsac.fitnesse.fixture.slim.FileFixture Maven / Gradle / Ivy
package nl.hsac.fitnesse.fixture.slim;
import nl.hsac.fitnesse.fixture.util.FileUtil;
import org.apache.commons.io.FilenameUtils;
import java.io.*;
import java.util.Scanner;
/**
* Utility fixture to work with files.
*/
public class FileFixture extends SlimFixtureWithMap {
private String directory = new File(filesDir, "fileFixture").getPath() + File.separator;
public void setDirectory(String aDirectory) {
if (isFilesUrl(aDirectory)) {
String url = getUrl(aDirectory);
String relativeDir = url.substring("files".length());
relativeDir = relativeDir.replace('/', File.separatorChar);
directory = filesDir + relativeDir;
} else {
directory = aDirectory;
}
if (!directory.endsWith(File.separator)) {
directory += File.separator;
}
}
public String createContaining(String filename, String content) {
String fullName = getFullName(filename);
ensureParentExists(fullName);
File f = FileUtil.writeFile(fullName, content);
return linkToFile(f);
}
public String textIn(String filename) throws IOException {
String text = "";
String fullName = getFullName(filename);
if (sizeOf(filename) > 0) {
try {
FileInputStream s = new FileInputStream(fullName);
text = FileUtil.streamToString(s, fullName);
} catch (FileNotFoundException e) {
throw new SlimFixtureException(false, "Unable to find: " + fullName);
}
}
return text;
}
public String takeFirstLineFrom(String filename) throws IOException {
String result;
String fullName = getFullName(filename);
ensureParentExists(fullName);
File file = new File(fullName);
Scanner fileScanner = new Scanner(file);
if (fileScanner.hasNextLine()) {
result = fileScanner.nextLine();
} else {
throw new IOException(fullName + " is an empty file.");
}
//Create a temporary new file, then delete the original and copy temp file to original filename
String tmpFilename = fullName + ".tmp";
File tmpFile = FileUtil.writeFromScanner(tmpFilename, fileScanner);
FileUtil.copyFile(tmpFilename, fullName);
tmpFile.delete();
return result;
}
public String contentOf(String filename) throws IOException {
String content = textIn(filename);
return getEnvironment().getHtml(content);
}
public String createUsing(String filename, String templateName) {
String content = getEnvironment().processTemplate(templateName, getCurrentValues());
return createContaining(filename, content);
}
public String copyTo(String sourceName, String targetName) throws IOException {
String fullSource = getFullName(sourceName);
// ensure file exists
getFile(fullSource);
String fullTarget = getFullName(targetName);
ensureParentExists(fullTarget);
File destFile = FileUtil.copyFile(fullSource, fullTarget);
return linkToFile(destFile);
}
public long sizeOf(String filename) {
String fullName = getFullName(filename);
File file = getFile(fullName);
return file.length();
}
public String filenameOf(String filename) {
String fullName = getFullName(filename);
return getFile(fullName).getName();
}
public String baseNameOf(String filename) {
return FilenameUtils.getBaseName(filenameOf(filename));
}
public String extensionOf(String filename) {
return FilenameUtils.getExtension(filenameOf(filename));
}
protected File getFile(String fullName) {
File file = new File(fullName);
if (!file.exists()) {
throw new SlimFixtureException(false, "Unable to find: " + file.getAbsolutePath());
}
return file;
}
protected void ensureParentExists(String fullName) {
File f = new File(fullName);
File parentFile = f.getParentFile();
parentFile.mkdirs();
}
protected String getFullName(String filename) {
String name;
if (filename.startsWith(File.separator)
|| ":\\".equals(filename.substring(1, 3))) {
name = filename;
} else if (isFilesUrl(filename)){
name = getFilePathFromWikiUrl(filename);
} else {
name = directory + filename;
}
return cleanupPath(name);
}
private boolean isFilesUrl(String filename) {
String url = getUrl(filename);
return !filename.equals(url) && url.startsWith("files/");
}
private String cleanupPath(String fullPath) {
return FilenameUtils.separatorsToSystem(fullPath);
}
protected String linkToFile(File f) {
String url = getWikiUrl(f.getAbsolutePath());
if (url == null) {
url = f.toURI().toString();
}
return String.format("%s", url, f.getName());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy