I'm not sure what's improper in the result (I don't know what was
expected). Isn't that node preceded by white space? That would explain
it. You might rather want the previous *element*. But that will be
difficult to express on the TemplateNodeModel level, which is not
bound to XML.
One important point is that you can't add new methods to
TemplateNodeModel, as that breaks backward compatibility. It can only
be added to a new sub-interface, like TemplateNodeModelEx. But even
that won't solve getting the sibling element node.
So another approach is instead of adding a built-in, adding a new
special key that's specific to freemarker.ext.dom models, like
"@@prev" and "@@next".
--
Thanks,
Daniel Dekany
Wednesday, October 14, 2015, 9:10:25 PM, Pradeep Murugesan wrote:
> Hi Daniel,
> I tried to add a new built in & of course it DIDN'T work �.
> I did the following.
> 1. added putBI("previousSibling", new previousSiblingBI()); in
> BuiltIn.java2. added a static class in BuiltInForNodes.java static
> class previousSiblingBI extends BuiltInForNode {
>
>
>
>
>
>
>
>
> @Override
> TemplateModel calculateResult(TemplateNodeModel nodeModel,
> Environment env) throws TemplateModelException {
> return nodeModel.getPreviousSibling();
> }
> }
> 3. added a method in Interface TemplateNodeModel.java
>
>
>
>
>
>
>
> TemplateNodeModel getPreviousSibling() throws TemplateModelException;
> 4. In package freemarker.ext.dom's NodeModel added the following method
>
>
>
>
>
>
>
>
> public TemplateNodeModel getPreviousSibling() { Node
> previousSibling = node.getPreviousSibling();
>
>
>
>
>
>
>
>
> return wrap(previousSibling);}
> Once this is done I tried to access it as .node?previousSibling
> from template and it reached till the NodeModel class i defined in
> the 4th step. But the returned previousSibling is not proper. It's
> not returning the programListingNode with formDataModel instead returns
> someother node.
> I tried to log the node returned and I got the following o/p
> [docgen:transform] [#text:
>
>
>
>
>
>
>
>
> [docgen:transform] ]
> I clearly understand the implementation of getPreviousSibling is
> not proper, but I couldn't figure out where we have implemented the same.
> Please advise.
> Pradeep.
>
>
>
>
>
>
>
>