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 15:24:51 GMT
I've just committed a change so that the mount-table matcher now gets 
its file from the build.properties file (or local.build.properties).

The only bit I wasn't satisfied with is the process of locating where to 
patch. I would rather put a <map:match type="mount-table"> node into the 
sitemap, and replace that, but there isn't an option in the xconf task 
to replace a node, so I simply put it after the pattern="api/**" 
matcher. Not ideal, but it works.

Please feel free to tidy up anything I got wrong.

Regards, Upayavira

Upayavira wrote:

> After this bit of code turned up, I couldn't resist giving it a go.
>
> I now have a XConfToolTask that will replace properties if 
> replace-properties in the top level element is set to true.
>
> All I've now got to do is work out how to get the task to act on the 
> root sitemap in all circumstances. So, some digging into the build 
> process is required.
>
> Regards, Upayavira
>
> Upayavira wrote:
>
>> 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