// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.updates;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
public class FileUpdate implements Update {
protected final File destination;
protected final String source;
protected final String filename;
public FileUpdate(String source, File destination) {
this.destination = destination;
this.source = source;
filename = new File(source).getName();
}
@Override
public void doUpdate() throws IOException {
makeSureDirectoriesExist();
copyResource();
}
private void makeSureDirectoriesExist() {
destination.mkdirs();
}
private void copyResource() throws IOException {
URL url = getResource(source);
if (url != null) {
InputStream input = null;
OutputStream output = null;
try {
input = url.openStream();
output = new FileOutputStream(destinationFile());
int b;
while ((b = input.read()) != -1)
output.write(b);
} finally {
if (input != null)
input.close();
if (output != null)
output.close();
}
} else
throw new FileNotFoundException("Could not load resource: " + source);
}
protected URL getResource(String resource) {
return getClass().getClassLoader().getResource(resource);
}
@Override
public String getMessage() {
return ".";
}
protected File destinationFile() {
return new File(destination, filename);
}
@Override
public String getName() {
return "FileUpdate(" + filename + ")";
}
@Override
public boolean shouldBeApplied() throws IOException {
return !destinationFile().exists();
}
}