@Override
public ResourceObservable.ResourceUpdate<ChangeNotification<Server>> reload(Set<ChangeNotification<Server>> currentSnapshot) {
if (!isUpdated()) {
return new ResourceObservable.ResourceUpdate<>(currentSnapshot, Collections.<ChangeNotification<Server>>emptySet(), sentinel);
}
try {
try (LineNumberReader reader = new LineNumberReader(new FileReader(textFile))) {
Set<ChangeNotification<Server>> newAddresses = new HashSet<>();
String line;
while ((line = reader.readLine()) != null) {
if (!(line = line.trim()).isEmpty()) {
Server server = parseLine(reader.getLineNumber(), line);
newAddresses.add(new ChangeNotification<Server>(ChangeNotification.Kind.Add, server));
}
}
return new ResourceObservable.ResourceUpdate<>(newAddresses, cancellationSet(currentSnapshot, newAddresses), sentinel);
}
} catch (IOException e) {
if (lastModified == -1) {
throw new ResourceObservable.ResourceLoaderException("Server resolver file missing on startup " + textFile, false, e);
}
throw new ResourceObservable.ResourceLoaderException("Cannot reload server resolver file " + textFile, true, e);
}
}