01: /*
02: * Copyright 1999-2004 The Apache Software Foundation.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: /*
17: * $Id: FuncDoclocation.java,v 1.9 2004/08/17 19:25:36 jycli Exp $
18: */
19: package org.apache.xpath.functions;
20:
21: import org.apache.xml.dtm.DTM;
22: import org.apache.xpath.XPathContext;
23: import org.apache.xpath.objects.XObject;
24: import org.apache.xpath.objects.XString;
25:
26: /**
27: * Execute the proprietary document-location() function, which returns
28: * a node set of documents.
29: * @xsl.usage advanced
30: */
31: public class FuncDoclocation extends FunctionDef1Arg {
32: static final long serialVersionUID = 7469213946343568769L;
33:
34: /**
35: * Execute the function. The function must return
36: * a valid object.
37: * @param xctxt The current execution context.
38: * @return A valid XObject.
39: *
40: * @throws javax.xml.transform.TransformerException
41: */
42: public XObject execute(XPathContext xctxt)
43: throws javax.xml.transform.TransformerException {
44:
45: int whereNode = getArg0AsNode(xctxt);
46: String fileLocation = null;
47:
48: if (DTM.NULL != whereNode) {
49: DTM dtm = xctxt.getDTM(whereNode);
50:
51: // %REVIEW%
52: if (DTM.DOCUMENT_FRAGMENT_NODE == dtm
53: .getNodeType(whereNode)) {
54: whereNode = dtm.getFirstChild(whereNode);
55: }
56:
57: if (DTM.NULL != whereNode) {
58: fileLocation = dtm.getDocumentBaseURI();
59: // int owner = dtm.getDocument();
60: // fileLocation = xctxt.getSourceTreeManager().findURIFromDoc(owner);
61: }
62: }
63:
64: return new XString((null != fileLocation) ? fileLocation : "");
65: }
66: }
|