package au.gov.ga.earthsci.catalog.dataset; import java.io.InputStream; import java.net.URI; import java.net.URL; import java.util.List; import au.gov.ga.earthsci.catalog.ErrorCatalogTreeNode; import au.gov.ga.earthsci.catalog.ICatalogTreeNode; import au.gov.ga.earthsci.catalog.LoadingCatalogTreeNode; import au.gov.ga.earthsci.core.retrieve.IRetrievalData; import au.gov.ga.earthsci.core.tree.ILazyTreeNodeCallback; import au.gov.ga.earthsci.core.tree.lazy.IRetrievalLazyTreeNode; import au.gov.ga.earthsci.core.tree.lazy.RetrievalLazyTreeNodeHelper; /** * An {@link ICatalogTreeNode} that represents a {@code Link} element from the * legacy {@code dataset.xml} * * @author James Navin (james.navin@ga.gov.au) * @author Michael de Hoog (michael.dehoog@ga.gov.au) */ public class DatasetLinkCatalogTreeNode extends DatasetCatalogTreeNode implements IRetrievalLazyTreeNode<ICatalogTreeNode> { private final URL linkURL; private final RetrievalLazyTreeNodeHelper<ICatalogTreeNode> helper = new RetrievalLazyTreeNodeHelper<ICatalogTreeNode>(this); public DatasetLinkCatalogTreeNode(URI nodeURI, String name, URL linkURL, URL infoURL, URL iconURL, boolean base) { super(nodeURI, name, infoURL, iconURL, base); this.linkURL = linkURL; } @Override public void load(ILazyTreeNodeCallback callback) { helper.load(callback); } @Override public boolean isLoaded() { return helper.isLoaded(); } @Override public List<ICatalogTreeNode> getDisplayChildren() { return helper.getDisplayChildren(); } @Override public URL getRetrievalURL() { return linkURL; } @Override public List<ICatalogTreeNode> handleRetrieval(IRetrievalData data, URL url) throws Exception { InputStream is = data.getInputStream(); try { ICatalogTreeNode root = DatasetReader.read(is, url); return root.getChildren(); } finally { is.close(); } } @Override public ICatalogTreeNode getLoadingNode() { return new LoadingCatalogTreeNode(); } @Override public ICatalogTreeNode getErrorNode(Throwable error) { return new ErrorCatalogTreeNode(error); } }