package org.fitchfamily.android.gsmlocation.data;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public final class Source {
public static final int UNKNOWN = -1;
private final List<String> urls;
private final Compression compression;
private final int expectedRecords;
public Source(List<String> urls, Compression compression, int expectedRecords) {
if (urls == null || urls.isEmpty() || compression == null) {
throw new NullPointerException();
}
this.urls = Collections.unmodifiableList(urls);
this.compression = compression;
this.expectedRecords = expectedRecords;
}
public Source(List<String> urls, Compression compression) {
this(urls, compression, UNKNOWN);
}
public Source(String url, Compression compression, int expectedRecords) {
this(Arrays.asList(url), compression, expectedRecords);
}
public Source(String url, Compression compression) {
this(url, compression, UNKNOWN);
}
public Compression compression() {
return compression;
}
public List<String> urls() {
return urls;
}
public int expectedRecords() {
return expectedRecords;
}
public SourceConnection connect() throws IOException {
return new SourceConnection(this);
}
@Override
public String toString() {
return urls() + " (" + compression().name() + ")";
}
public enum Compression {
gzip, none
}
public static long expectedRecords(List<Source> sources) {
long expectedRecords = 0;
for(Source source : sources) {
if(source.expectedRecords() == UNKNOWN) {
return UNKNOWN;
} else {
expectedRecords += source.expectedRecords();
}
}
return expectedRecords;
}
}