01: /*
02: ItsNat Java Web Application Framework
03: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
04: Author: Jose Maria Arranz Santamaria
05:
06: This program is free software: you can redistribute it and/or modify
07: it under the terms of the GNU Affero General Public License as published by
08: the Free Software Foundation, either version 3 of the License, or
09: (at your option) any later version. See the GNU Affero General Public
10: License for more details. See the copy of the GNU Affero General Public License
11: included in this program. If not, see <http://www.gnu.org/licenses/>.
12: */
13:
14: package org.itsnat.impl.core.xml;
15:
16: import org.itsnat.impl.core.MarkupTemplateVersionDelegateImpl;
17: import org.itsnat.impl.core.DocFragmentTemplateVersionImpl;
18: import org.itsnat.impl.core.MarkupContainerImpl;
19: import org.w3c.dom.DocumentFragment;
20:
21: /**
22: *
23: * @author jmarranz
24: */
25: public class XMLDocFragmentTemplateVersionImpl extends
26: DocFragmentTemplateVersionImpl {
27: protected DocumentFragment templateDocFragment;
28:
29: /**
30: * Creates a new instance of XMLDocFragmentTemplateVersionImpl
31: */
32: public XMLDocFragmentTemplateVersionImpl(
33: XMLDocFragmentTemplateImpl docTemplate, long timeStamp) {
34: super (docTemplate, timeStamp);
35:
36: // El nodo padre puede ser cualquiera, por ejemplo <root>
37: // son los nodos hijos los que constituyen el fragmento
38: // Hay que recordar que tras el crear el DocumentFragment el root queda vacío.
39: this .templateDocFragment = extractChildrenToDocFragment(templateDoc
40: .getDocumentElement());
41:
42: this .templateDoc = null; // Para que no se vuelva a usar
43: }
44:
45: protected void doCacheDocument() {
46: // Cacheamos los elementos hijos del <root> para evitar
47: // que en el caso de ser cacheados quede con único nodo hijo
48: // de text. El problema es que al que al obtener el DocumentFragment
49: // quedaría como un simple nodo de texto en donde el padre (el <root>)
50: // se han perdido, y en el cacheado es importante que el
51: // elemento contenedor verdadero sea el padre el contenido cacheado.
52: // De todas formas yo creo que en XML es irrelevante esto, pero así
53: // evitamos un DocumentFragment de template como un simple nodo texto
54:
55: inspectChildNodesToCache(templateDoc.getDocumentElement());
56: }
57:
58: public DocumentFragment loadDocumentFragment(
59: MarkupContainerImpl target) {
60: return loadDocumentFragment(templateDocFragment, target);
61: }
62:
63: protected MarkupTemplateVersionDelegateImpl createMarkupTemplateVersionDelegate() {
64: return new XMLTemplateVersionDelegateImpl(this);
65: }
66:
67: }
|