package fitnesse.wiki.fs;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import fitnesse.wiki.VersionInfo;
public class SimpleFileVersionsController implements VersionsController {
private final FileSystem fileSystem;
public SimpleFileVersionsController(FileSystem fileSystem) {
this.fileSystem = fileSystem;
}
public SimpleFileVersionsController() {
this(new DiskFileSystem());
}
@Override
public FileVersion[] getRevisionData(String label, File... files) {
FileVersion[] versions = new FileVersion[files.length];
int counter = 0;
for (File file : files) {
if (fileSystem.exists(file))
versions[counter++] = new RevisionFileVersion(file, "");
}
return versions;
}
private class RevisionFileVersion implements FileVersion {
private final File file;
private final String author;
private RevisionFileVersion(File file, String author) {
this.file = file;
this.author = author;
}
@Override
public File getFile() {
return file;
}
@Override
public InputStream getContent() throws IOException {
return new BufferedInputStream(fileSystem.getInputStream(file));
}
@Override
public String getAuthor() {
return author;
}
@Override
public Date getLastModificationTime() {
return new Date(fileSystem.lastModified(file));
}
}
@Override
public Collection<VersionInfo> history(File... files) {
return Collections.emptyList();
}
@Override
public VersionInfo makeVersion(FileVersion... fileVersions) throws IOException {
for (FileVersion fileVersion : fileVersions) {
addDirectory(fileVersion.getFile().getParentFile());
try (InputStream content = fileVersion.getContent()) {
fileSystem.makeFile(fileVersion.getFile(), content);
}
}
return VersionInfo.makeVersionInfo(fileVersions[0].getAuthor(), fileVersions[0].getLastModificationTime());
}
@Override
public void delete(File... files) throws IOException {
for (File file : files) {
fileSystem.delete(file);
}
}
@Override
public VersionInfo addDirectory(final FileVersion dir) throws IOException {
final File filePath = dir.getFile();
addDirectory(filePath);
return VersionInfo.makeVersionInfo(dir.getAuthor(), new Date(fileSystem.lastModified(filePath)));
}
private void addDirectory(final File filePath) throws IOException {
if (!fileSystem.exists(filePath)) {
fileSystem.makeDirectory(filePath);
}
}
@Override
public void rename(FileVersion fileVersion, File oldFile) throws IOException {
fileSystem.rename(fileVersion.getFile(), oldFile);
}
}