org.archive.resource.gzip.GZIPResourceContainer Maven / Gradle / Ivy
package org.archive.resource.gzip;
import java.io.IOException;
import org.archive.format.gzip.GZIPMemberSeries;
import org.archive.format.gzip.GZIPSeriesMember;
import org.archive.resource.MetaData;
import org.archive.resource.Resource;
import org.archive.resource.ResourceContainer;
import org.archive.resource.ResourceParseException;
import org.archive.resource.ResourceProducer;
public class GZIPResourceContainer implements ResourceContainer, ResourceProducer {
private static long UNLIMITED = -1;
private long endOffset;
private GZIPMemberSeries series;
public GZIPResourceContainer(GZIPMemberSeries series) {
this(series,UNLIMITED);
}
public GZIPResourceContainer(GZIPMemberSeries series, long endOffset) {
this.series = series;
this.endOffset = endOffset;
}
public String getName() {
return series.getStreamContext();
}
public boolean isCompressed() {
return true;
}
public Resource getNext() throws ResourceParseException, IOException {
if(series.gotEOF()) return null;
if(endOffset != UNLIMITED) {
if(series.getOffset() > endOffset) {
// System.err.format("At end of region off(%d) - startoff(%d) end(%d)\n",
// series.getOffset(),
// series.getCurrentMemberStartOffset(), endOffset);
return null;
}
}
GZIPSeriesMember member = series.getNextMember();
if(member == null) {
return null;
}
MetaData top = new MetaData();
return new GZIPResource(top,this,member);
}
public void close() throws IOException {
series.close();
}
public String getContext() {
return String.format("Context(%s)(%d)", series.getStreamContext(), series.getCurrentMemberStartOffset());
}
}