cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Upayavira ...@upaya.co.uk>
Subject Re: MountTableMatcher
Date Mon, 17 Nov 2003 12:01:42 GMT
Just had an offer of the following code over at ant-dev, which should do 
it nicely (came with an 'untested' disclaimer though).

  public void replaceProperties(Node n) throws DOMException {
    switch (n.getNodeType()) {
      case Node.ATTR_NODE:
      case Node.CDATA_SECTION_NODE:
      case Node.TEXT_NODE: {
        n.setValue(getProject().replaceProperties(n.getNodeValue()));
        break;
      }
      case Node.DOCUMENT_NODE:
      case Node.DOCUMENT_FRAGMENT_NODE:
      case Node.ELEMENT_NODE: {
        Node child = n.getFirstChild();
        while (child != null) {
          replaceProperties(child);
          child = child.getNextSibling();
        }
        break;
      }
      default: {
        // ignore all other node types
      }
    }
  }

Regards, Upayavira

Upayavira wrote:

> Geoff Howard wrote:
>
>>>> No, XPatch doesn't handle properties expansion now.  I looked 
>>>> briefly at how to add support for this and didn't get it worked 
>>>> out.  I don't know Ant internals much at all - maybe someone more 
>>>> familiar would know better.
>>>
>>>
>>> I've just asked on ant-dev, and was told:
>>>
>>> String org.apache.tools.ant.Project.replaceProperties(String value)
>>
>>
>> Ok, I tried the other option which looked cleaner - they have a 
>> subclass of Reader which replaces properties on the way in.  I tried 
>> it again the other night and found that it throws an NPE when the 
>> task runs.  Unfortunately for some reason the line number of the NPE 
>> isn't preserved in the stack trace. 
>
>
> 'The other solution?'
>
>>> So, from looking at the xpatch task, we would have to use this 
>>> replaceProperties method on each attribute and text value of each 
>>> node in the patch file.
>>
>>
>> Hmm, I'll look at that solution.  I was thinking of slurping the 
>> whole patch file into a string, running replaceProperties on it, and 
>> creating an InputStream from the string to pass to builder.parse().   
>
>
> That's what Jan Materne on ant-dev suggested too. He's also just 
> recommended org.apache.tools.ant.util.DOMElementWriter, which might help.
>
>>> We could add a 'replace-properties' top level element, which says 
>>> whether this should be done.
>>>
>>>> I haven't followed the specific context here but would love to see 
>>>> it added too.
>>>
>>>
>>> I'm a bit busy here, any chance you could look into it, Geoff?
>>>
>>> It would be really cool, it would mean that you can mount your site 
>>> without having to touch the root sitemap at all.
>>
>>
>> I can't look into it more now but can pick it up in the next few days.
>
>
> Great. Lets play a 'who gets there first' game.
>
> Regards, Upayavira
>
>
>



Mime
View raw message