package com.google.gwt.gwtpages.client.page.loader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import com.google.gwt.gwtpages.client.Pages;
import com.google.gwt.gwtpages.client.message.exceptions.PageNotFoundException;
import com.google.gwt.gwtpages.client.page.PageAttributes;
/**
* Page loader that can support many child loaders. They will be queried in the
* order that they are added.
*
* @author Joe Hudson
*/
public class CompositePageLoader implements PageLoader {
private ArrayList<PageLoader> pageLoaders;
private HashMap<String, PageLoader> index;
public CompositePageLoader(PageLoader... pageLoaders) {
this.pageLoaders = new ArrayList<PageLoader>();
for (PageLoader pageLoader : pageLoaders)
this.pageLoaders.add(pageLoader);
}
public CompositePageLoader(ArrayList<PageLoader> pageLoaders) {
this.pageLoaders = pageLoaders;
}
public void init(Pages settings) {
for (PageLoader loader : pageLoaders) {
loader.init(settings);
}
index = new HashMap<String, PageLoader>();
for (PageLoader loader : pageLoaders) {
Iterator<String> pageTokens = loader.getValidPageTokens();
while (pageTokens.hasNext()) {
String token = pageTokens.next();
PageLoader _l = index.get(token);
if (null == _l) {
index.put(token, loader);
}
}
}
}
public Iterator<String> getValidPageTokens() {
return index.keySet().iterator();
}
public boolean isValidPageToken(String pageToken) {
return (null != index.get(pageToken));
}
public PageAttributes getPageAttributes(String pageToken)
throws PageNotFoundException {
PageLoader loader = index.get(pageToken);
if (null == loader) return null;
else return loader.getPageAttributes(pageToken);
}
public void getPage(String pageToken, PageLoadCallback pageHandler) {
PageLoader loader = index.get(pageToken);
if (null == loader) pageHandler.onPageNotFound(pageToken);
else loader.getPage(pageToken, pageHandler);
}
}