mmidy 00/10/04 11:46:26
Modified: java/src/org/apache/xpath SourceTreeManager.java
Log:
Make sure we use resolved URI when looking for documents
Revision Changes Path
1.5 +34 -45
xml-xalan/java/src/org/apache/xpath/SourceTreeManager.java
Index: SourceTreeManager.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/SourceTreeManager.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SourceTreeManager.java 2000/08/11 23:55:00 1.4
+++ SourceTreeManager.java 2000/10/04 18:46:25 1.5
@@ -60,6 +60,7 @@
import java.io.File;
import java.io.IOException;
import java.util.StringTokenizer;
+import java.util.Vector;
import org.w3c.dom.Node;
import org.w3c.dom.Document;
@@ -88,9 +89,7 @@
*/
public class SourceTreeManager
{
- public static int CACHESIZE = 4;
- private int m_size = 0;
- private SourceTree m_sourceTree[] = new SourceTree[CACHESIZE];
+ private Vector m_sourceTree = new Vector();
URIResolver m_uriResolver;
@@ -125,13 +124,13 @@
if(null == root)
root = owner;
String url = null;
- int n = m_size;
+ int n = m_sourceTree.size();
for(int i = 0; i < n; i++)
{
- SourceTree ass = m_sourceTree[i];
- if(root == ass.m_root)
+ SourceTree sTree = (SourceTree)m_sourceTree.elementAt(i);
+ if(root == sTree.m_root)
{
- url = ass.m_url;
+ url = sTree.m_url;
break;
}
}
@@ -153,14 +152,7 @@
String uri;
try
{
- if(urlString.startsWith("../"))
- {
- // urlString = "file:/"+urlString;
- }
- // System.out.println("Calling getAbsoluteURI urlString: "+urlString +
", base: "+base);
-
uri = SystemIDResolver.getAbsoluteURI(urlString, base);
- // System.out.println("Returned from getAbsoluteURI: "+uri);
}
catch(SAXException se)
{
@@ -203,46 +195,43 @@
*/
public void putDocumentInCache(Node n, InputSource source)
{
- if(m_size < CACHESIZE)
- {
- // TODO: What to do if the SystemID isn't specified?
- if(null != source.getSystemId())
- {
- m_sourceTree[m_size] = new SourceTree(n, source.getSystemId());
- m_size++;
- }
- }
- else
+ if(null != source.getSystemId())
{
- // TODO: Implement a smart cache algorithm (read: pain)
- if(null != source.getSystemId())
- {
- // For now, always cache on the last, on the theory that we're
- // probably in some sort of loop.
- m_sourceTree[m_size-1] = new SourceTree(n, source.getSystemId());
- }
- }
-
+ m_sourceTree.addElement(new SourceTree(n, source.getSystemId()));
+ }
}
+
+
/**
- * Given a document, find the URL associated with that document.
- * @param owner Document that was previously processed by this liaison.
+ * Given a URL, find the node associated with that document.
+ * @param url
*/
- public Node findNodeFromURL(String url)
+ public Node findNodeFromURL(String base, String url)
+ throws TransformException
{
- Node node = null;
- int n = m_size;
- for(int i = 0; i < n; i++)
+ try
{
- SourceTree ass = m_sourceTree[i];
- if(url == ass.m_url)
+ InputSource source = this.resolveURI(base, url);
+ if(null != source.getSystemId())
+ url = source.getSystemId();
+ Node node = null;
+ int n = m_sourceTree.size();;
+ for(int i = 0; i < n; i++)
{
- node = ass.m_root;
- break;
+ SourceTree sTree = (SourceTree)m_sourceTree.elementAt(i);
+ if(url.equals(sTree.m_url))
+ {
+ node = sTree.m_root;
+ break;
+ }
}
+ return node;
+ }
+ catch(IOException ioe)
+ {
+ throw new TransformException(ioe);
}
- return node;
}
/**
@@ -273,7 +262,7 @@
// systemID.
if(null != source.getSystemId())
{
- Node n = findNodeFromURL(source.getSystemId());
+ Node n = findNodeFromURL(null, source.getSystemId());
if(null != n)
return n;
}