package org.qrone.r7.resolver;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CascadeResolver implements URIResolver{
private List<URIResolver> list = new ArrayList<URIResolver>();
public void add(URIResolver r){
list.add(r);
}
public void add(int index, URIResolver r){
list.add(index, r);
}
public List<URIResolver> asList(){
return list;
}
@Override
public boolean exist(String uri) {
for (Iterator<URIResolver> i = list.iterator(); i
.hasNext();) {
URIResolver r = i.next();
if(r.exist(uri)) return true;
}
return false;
}
@Override
public boolean existPath(String uri) {
for (Iterator<URIResolver> i = list.iterator(); i
.hasNext();) {
URIResolver r = i.next();
if(r.existPath(uri)) return true;
}
return false;
}
@Override
public InputStream getInputStream(URI uri) throws IOException {
for (Iterator<URIResolver> i = list.iterator(); i
.hasNext();) {
URIResolver r = i.next();
InputStream in = r.getInputStream(uri);
if(in != null) return in;
}
return null;
}
@Override
public OutputStream getOutputStream(URI uri) throws IOException {
for (Iterator<URIResolver> i = list.iterator(); i.hasNext();) {
URIResolver r = i.next();
OutputStream out = r.getOutputStream(uri);
if(out != null) return out;
}
return null;
}
@Override
public boolean remove(URI uri) {
for (Iterator<URIResolver> i = list.iterator(); i.hasNext();) {
URIResolver r = i.next();
if(r.remove(uri)) return true;
}
return false;
}
@Override
public void addUpdateListener(Listener l) {
for (Iterator<URIResolver> i = list.iterator(); i.hasNext();) {
i.next().addUpdateListener(l);
}
}
}