bruno 2003/08/12 08:39:15
Modified: src/blocks/woody/java/org/apache/cocoon/woody/binding
InsertNodeJXPathBindingBuilder.java
Log:
Allow template XML to be retrieved from external source.
Revision Changes Path
1.3 +29 -10
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertNodeJXPathBindingBuilder.java
Index: InsertNodeJXPathBindingBuilder.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertNodeJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InsertNodeJXPathBindingBuilder.java 24 Jul 2003 12:39:17 -0000 1.2
+++ InsertNodeJXPathBindingBuilder.java 12 Aug 2003 15:39:15 -0000 1.3
@@ -53,7 +53,12 @@
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
import org.apache.cocoon.woody.util.DomHelper;
+import org.apache.cocoon.components.source.SourceUtil;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.excalibur.source.SourceResolver;
+import org.apache.excalibur.source.Source;
/**
* InsertNodeJXPathBindingBuilder provides a helper class for the Factory
@@ -79,16 +84,30 @@
JXPathBindingManager.Assistant assistant) throws BindingException {
try {
- // TODO have src attribute to point to extermal template in stead of
- // inline definition through nested elements.
- // This will require to ask Assistant for parser
- // (from component-manager)!
- DocumentFragment domTemplate =
- bindingElm.getOwnerDocument().createDocumentFragment();
- NodeList nested = bindingElm.getChildNodes();
- int size = nested.getLength();
- for (int i = 0; i < size; i++) {
- domTemplate.appendChild(nested.item(i).cloneNode(true));
+ DocumentFragment domTemplate = null;
+
+ String src = bindingElm.getAttribute("src");
+ if (!src.equals("")) {
+ ServiceManager manager = assistant.getServiceManager();
+ SourceResolver sourceResolver =
(SourceResolver)manager.lookup(SourceResolver.ROLE);
+ Source source = null;
+ try {
+ source = sourceResolver.resolveURI(src);
+ Document document = SourceUtil.toDOM(source);
+ domTemplate = document.createDocumentFragment();
+ domTemplate.appendChild(document.getDocumentElement());
+ } finally {
+ if (source != null)
+ sourceResolver.release(source);
+ manager.release(sourceResolver);
+ }
+ } else {
+ domTemplate =
bindingElm.getOwnerDocument().createDocumentFragment();
+ NodeList nested = bindingElm.getChildNodes();
+ int size = nested.getLength();
+ for (int i = 0; i < size; i++) {
+ domTemplate.appendChild(nested.item(i).cloneNode(true));
+ }
}
return new InsertNodeJXPathBinding(domTemplate);