HI Daniel,
 Its not preceeded by white spaces but "\n" is taken as sibling.
In book.xml <programlisting role="formDataModel">dsadsd fdfsdfdsf 
dfds</programlisting>
<programlisting role="template">&lt;#if cargo.weight &lt; 
<emphasis>100</emphasis>&gt;Light cargo&lt;/#if&gt;</programlisting>
I am trying to get the programlisting with role formDataModel as 
previousSibling. But the "\n" is returned as the sibling. To confirm the same I 
just checked it with node.previousSibling().previousSibling() and I am able to 
get to formDataModel.
What should we need to do for this here ? 
I have also added a key with @@prev in ElementModel and that works fine. 
Pradeep.
> Date: Wed, 14 Oct 2015 22:32:40 +0200
> From: [email protected]
> To: [email protected]
> Subject: Re: Adding a new BuiltIn - previousSibling
> 
> 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.
> >
> >
> >
> >
> >
> >
> >
> >                                           
> 
                                          

Reply via email to