package com.guokr.protocol.xcf;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;
public class XcfFileConnection extends XcfConnection {
public XcfFileConnection(URL base, URL url) {
super(base, url);
}
@Override
public List<InputStream> list(URL base, String find, String pattern) throws IOException {
String basepath = base.getPath();
String path = basepath + find.substring(1);
String abspath = new File(path).getAbsolutePath();
String parpath = new File(abspath).getParent();
String name = abspath.substring(parpath.length()).substring(1);
StringBuilder regex = new StringBuilder("^");
regex.append(name);
if (pattern != null) {
regex.append("\\.part.");
for (int i = 0; i < pattern.length(); i++) {
regex.append("\\d");
}
}
regex.append("$");
final Pattern pat = Pattern.compile(regex.toString());
File[] files = new File(parpath).listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return pat.matcher(name).find();
}
});
List<InputStream> inputs = new ArrayList<InputStream>();
if (files != null) {
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
String path1 = o1.getAbsolutePath();
String path2 = o2.getAbsolutePath();
return path1.compareTo(path2);
}
});
if (files.length == 1) {
inputs.add(new FileInputStream(files[0]));
} else {
for (int i = 0; i < files.length; i++) {
inputs.add(new GZIPInputStream(new FileInputStream(files[i])));
}
}
}
return inputs;
}
}