/*
* Copyright 2001-2013 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
*/
package com.uwyn.rife.resources;
import com.uwyn.rife.resources.exceptions.CantOpenResourceStreamException;
import com.uwyn.rife.resources.exceptions.ResourceFinderErrorException;
import com.uwyn.rife.tools.InputStreamUser;
import java.net.URL;
import java.util.ArrayList;
/**
* Allows a group of resource finders to acts as if they are one single
* resource finders. They will be consecutively used in their order of addition
* to the group.
*
* @author Geert Bevin (gbevin[remove] at uwyn dot com)
* @see com.uwyn.rife.resources.ResourceFinder
* @since 1.0
*/
public class ResourceFinderGroup extends AbstractResourceFinder
{
private ArrayList<ResourceFinder> resourceFinders = new ArrayList<>();
public ResourceFinderGroup add(ResourceFinder resourceFinder)
{
resourceFinders.add(resourceFinder);
return this;
}
public URL getResource(String name)
{
URL result;
for (ResourceFinder resource_finder : resourceFinders)
{
result = resource_finder.getResource(name);
if (result != null)
{
return result;
}
}
return null;
}
public <ResultType> ResultType useStream(URL resource, InputStreamUser user)
throws ResourceFinderErrorException
{
ResultType result;
for (ResourceFinder resource_finder : resourceFinders)
{
try
{
result = (ResultType)resource_finder.useStream(resource, user);
}
catch (CantOpenResourceStreamException e)
{
continue;
}
return result;
}
throw new CantOpenResourceStreamException(resource, null);
}
public String getContent(URL resource, String encoding)
throws ResourceFinderErrorException
{
String result;
for (ResourceFinder resource_finder : resourceFinders)
{
result = resource_finder.getContent(resource, encoding);
if (result != null)
{
return result;
}
}
return null;
}
public long getModificationTime(URL resource)
throws ResourceFinderErrorException
{
long result;
for (ResourceFinder resource_finder : resourceFinders)
{
result = resource_finder.getModificationTime(resource);
if (result != -1)
{
return result;
}
}
return -1;
}
}