cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leszek Gawron <lgaw...@mobilebox.pl>
Subject Re: svn commit: r154841 - in cocoon/trunk/src: blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
Date Wed, 23 Feb 2005 13:52:46 GMT
Daniel Fagerstrom wrote:
> Leszek Gawron wrote:
> 
>> Daniel Fagerstrom wrote:
>>
>>> The main thing left to do in the invoker is to get rid of the code 
>>> for handling macros in the StartElement part of execute. My idea 
>>> there is to create a class that implements StartInstruction and 
>>> contains all the macro creation and execution code. So it is such 
>>> classes that is stored in the definition map, if a element name is 
>>> found in the definition map one need just call the execution method 
>>> on it. By doing like this we get rid of all the refernces to tags 
>>> from the invoker. Concerning the parser I think we allready have 
>>> discussed how it can work, check the archive (marc.theaimsgroup.com 
>>> seem to be down so I can't give anty detailed refernces right now).
>>
>>
>>
>> For starters: what do you say if every Event had an execute method and 
>> we got rid of
>>
>> } else if (ev instanceof EndCDATA) {
>>     consumer.endCDATA();
>> } else if (ev instanceof EndDTD) {
>>     consumer.endDTD();
>> } else if (ev instanceof EndEntity) {
>>     consumer.endEntity(((EndEntity) ev).getName());
>> } else if (ev instanceof StartCDATA) {
>>     consumer.startCDATA();
>> } else if (ev instanceof StartDTD) {
>>     StartDTD startDTD = (StartDTD) ev;
>>     consumer.startDTD(startDTD.getName(), startDTD.getPublicId(),
>>                       startDTD.getSystemId());
>> } else if (ev instanceof StartEntity) {
>>     consumer.startEntity(((StartEntity) ev).getName());
>>
>>     // Instructions
>> }
>>
>> ?
> 
> 
> Sure, what interface do you have in mind?
I mean just add:
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext,
                          ExecutionContext executionContext,
                          StartElement macroCall, Event startEvent, 
Event endEvent)
         throws SAXException {
         return getNext();
     }

to Event class and then move sax generating code to appropriate classes 
like:

public class SkippedEntity extends Event {
     public SkippedEntity(Locator location, String name) {
         super(location);
         this.name = name;
     }

     final String name;

     public String getName() {
         return name;
     }

     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
             ExecutionContext executionContext, StartElement macroCall,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.skippedEntity(getName());
         return getNext();
     }
}

A cosmetic change but:
1. gives better encapsulation and Event based classes do not look that 
stupid anymore (some of them were totally empty just to be matched by 
instanceof)

2. Invoker looks much cleaner

The only thing that might be against is that instead of if else if else 
if we have method invocations which might (or not?) be less efficient.

-- 
Leszek Gawron                                      lgawron@mobilebox.pl
Project Manager                                    MobileBox sp. z o.o.
+48 (61) 855 06 67                              http://www.mobilebox.pl
mobile: +48 (501) 720 812                       fax: +48 (61) 853 29 65

Mime
View raw message