package com.adobe.dp.epub.opf;
import java.util.Hashtable;
import com.adobe.dp.epub.ops.Element;
import com.adobe.dp.epub.ops.OPSDocument;
import com.adobe.dp.epub.ops.XRef;
public class ResourceRef {
Hashtable unresolvedXRefMap;
ResourceRef(Publication epub, String name) {
this.epub = epub;
this.name = name;
}
private Publication epub;
String name;
public Resource getResource() {
return epub.getResourceByName(name);
}
public String getResourceName() {
return name;
}
public XRef getXRef(String id) {
Resource r = getResource();
if( r == null )
return null;
if (r instanceof OPSResource) {
OPSDocument ops = ((OPSResource) r).getDocument();
if (id == null)
return ops.getRootXRef();
Element e = ops.getElementById(id);
if (e != null)
return e.getSelfRef();
}
XRef ref;
if (unresolvedXRefMap == null || (ref = (XRef) unresolvedXRefMap.get(id)) == null) {
if (unresolvedXRefMap == null)
unresolvedXRefMap = new Hashtable();
ref = new XRef(r, id);
unresolvedXRefMap.put((id == null ? "" : id), ref);
}
return ref;
}
public XRef takeOverUnresolvedXRef(String id) {
if (unresolvedXRefMap == null)
return null;
return (XRef) unresolvedXRefMap.remove(id == null ? "" : id);
}
}