Yeah, good suggestion. I just fixed this up.

On Sat, Nov 8, 2008 at 3:13 AM, Claus Ibsen <[EMAIL PROTECTED]> wrote:

> Hi Jon
>
> I think you should throw an IllegalArgumentException instead of
> RuntimeCamelException if aggregator is not configured properly. We do this
> in 5 code lines later.
>
> +                throw new RuntimeCamelException("You need to specify an
> expression or aggregation collection " +
> +                                                "for the aggregator.");
>
>
> Med venlig hilsen
>
> Claus Ibsen
> ......................................
> Silverbullet
> Skovsgårdsvænget 21
> 8362 Hørning
> Tlf. +45 2962 7576
> Web: www.silverbullet.dk
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: 7. november 2008 15:24
> To: [EMAIL PROTECTED]
> Subject: svn commit: r712133 - in /activemq/camel/trunk:
> camel-core/src/main/java/org/apache/camel/model/
> components/camel-spring/src/test/resources/org/apache/camel/spring/processor/
>
> Author: janstey
> Date: Fri Nov  7 06:23:26 2008
> New Revision: 712133
>
> URL: http://svn.apache.org/viewvc?rev=712133&view=rev
> Log:
> CAMEL-1038 - Made the expression bit optional in aggregator as you don't
> need it with an aggregation collection. Won't be moving this to 1.x.
>
> Modified:
>
>  
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java
>
>  
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
>
>  
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-collection.xml
>
>  
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-strategy.xml
>
>  
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
>
>  
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicastAggregator.xml
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java?rev=712133&r1=712132&r2=712133&view=diff
>
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java
> Fri Nov  7 06:23:26 2008
> @@ -16,12 +16,15 @@
>  */
>  package org.apache.camel.model;
>
> +import java.util.ArrayList;
>  import java.util.Collection;
> +import java.util.List;
>
>  import javax.xml.bind.annotation.XmlAccessType;
>  import javax.xml.bind.annotation.XmlAccessorType;
>  import javax.xml.bind.annotation.XmlAttribute;
>  import javax.xml.bind.annotation.XmlElement;
> +import javax.xml.bind.annotation.XmlElementRef;
>  import javax.xml.bind.annotation.XmlRootElement;
>  import javax.xml.bind.annotation.XmlTransient;
>
> @@ -31,9 +34,12 @@
>  import org.apache.camel.Predicate;
>  import org.apache.camel.Processor;
>  import org.apache.camel.Route;
> +import org.apache.camel.RuntimeCamelException;
>  import org.apache.camel.builder.ExpressionClause;
> +import org.apache.camel.builder.xml.DefaultNamespaceContext;
>  import org.apache.camel.model.language.ExpressionType;
>  import org.apache.camel.processor.Aggregator;
> +import org.apache.camel.processor.FilterProcessor;
>  import org.apache.camel.processor.aggregate.AggregationCollection;
>  import org.apache.camel.processor.aggregate.AggregationStrategy;
>  import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy;
> @@ -46,7 +52,13 @@
>  */
>  @XmlRootElement(name = "aggregator")
>  @XmlAccessorType(XmlAccessType.FIELD)
> -public class AggregatorType extends ExpressionNode {
> +public class AggregatorType extends ProcessorType<ProcessorType> {
> +    @XmlElement(name = "correlationExpression", required = false)
> +    private ExpressionSubElementType correlationExpression;
> +    @XmlTransient
> +    private ExpressionType expression;
> +    @XmlElementRef
> +    private List<ProcessorType<?>> outputs = new
> ArrayList<ProcessorType<?>>();
>     @XmlTransient
>     private AggregationStrategy aggregationStrategy;
>     @XmlTransient
> @@ -67,22 +79,31 @@
>     public AggregatorType() {
>     }
>
> +    public AggregatorType(Predicate predicate) {
> +        if (predicate != null) {
> +            setExpression(new ExpressionType(predicate));
> +        }
> +    }
> +
>     public AggregatorType(Expression correlationExpression) {
> -        super(correlationExpression);
> +        if (correlationExpression != null) {
> +            setExpression(new ExpressionType(correlationExpression));
> +        }
>     }
>
>     public AggregatorType(ExpressionType correlationExpression) {
> -        super(correlationExpression);
> +        this.expression = correlationExpression;
>     }
>
>     public AggregatorType(Expression correlationExpression,
> AggregationStrategy aggregationStrategy) {
> -        super(correlationExpression);
> +        this(correlationExpression);
>         this.aggregationStrategy = aggregationStrategy;
>     }
>
>     @Override
>     public String toString() {
> -        return "Aggregator[" + getExpression() + " -> " + getOutputs() +
> "]";
> +        String expressionString = (getExpression() != null) ?
> getExpression().getLabel() : "";
> +        return "Aggregator[" + expressionString + " -> " + getOutputs() +
> "]";
>     }
>
>     @Override
> @@ -90,6 +111,7 @@
>         return "aggregator";
>     }
>
> +
>     @SuppressWarnings("unchecked")
>     @Override
>     public void addRoutes(RouteContext routeContext, Collection<Route>
> routes) throws Exception {
> @@ -118,6 +140,12 @@
>         return aggregator;
>     }
>
> +    public ExpressionClause<AggregatorType> createAndSetExpression() {
> +        ExpressionClause<AggregatorType> clause = new
> ExpressionClause<AggregatorType>(this);
> +        this.setExpression(clause);
> +        return clause;
> +    }
> +
>     protected Aggregator createAggregator(RouteContext routeContext) throws
> Exception {
>         Endpoint from = routeContext.getEndpoint();
>         final Processor processor = routeContext.createProcessor(this);
> @@ -143,7 +171,12 @@
>             // create the aggregator using a default collection
>             AggregationStrategy strategy =
> createAggregationStrategy(routeContext);
>
> -            Expression aggregateExpression =
> getExpression().createExpression(routeContext);
> +            if (getExpression() == null) {
> +                throw new RuntimeCamelException("You need to specify an
> expression or aggregation collection " +
> +                                                "for the aggregator.");
> +            }
> +
> +            Expression aggregateExpression =
> getExpression().createExpression(routeContext);
>
>             Predicate predicate = null;
>             if (getCompletedPredicate() != null) {
> @@ -305,4 +338,48 @@
>             throw new IllegalArgumentException("There is already a
> completedPredicate defined for this aggregator: " + this);
>         }
>     }
> +
> +    public void setCorrelationExpression(ExpressionSubElementType
> correlationExpression) {
> +        this.correlationExpression = correlationExpression;
> +    }
> +
> +    public ExpressionSubElementType getCorrelationExpression() {
> +        return correlationExpression;
> +    }
> +
> +    // Section - Methods from ExpressionNode
> +    // Needed to copy methods from ExpressionNode here so that I could
> specify the
> +    // correlation expression as optional in JAXB
> +
> +    public ExpressionType getExpression() {
> +        if (expression == null && correlationExpression != null) {
> +            expression = correlationExpression.getExpressionType();
> +        }
> +        return expression;
> +    }
> +
> +    public void setExpression(ExpressionType expression) {
> +        this.expression = expression;
> +    }
> +
> +    public List<ProcessorType<?>> getOutputs() {
> +        return outputs;
> +    }
> +
> +    public void setOutputs(List<ProcessorType<?>> outputs) {
> +        this.outputs = outputs;
> +    }
> +
> +    protected FilterProcessor createFilterProcessor(RouteContext
> routeContext) throws Exception {
> +        Processor childProcessor = routeContext.createProcessor(this);
> +        return new
> FilterProcessor(getExpression().createPredicate(routeContext),
> childProcessor);
> +    }
> +
> +    @Override
> +    protected void configureChild(ProcessorType output) {
> +        super.configureChild(output);
> +        if (isInheritErrorHandler()) {
> +            output.setErrorHandlerBuilder(getErrorHandlerBuilder());
> +        }
> +    }
>  }
>
> Modified:
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java?rev=712133&r1=712132&r2=712133&view=diff
>
> ==============================================================================
> ---
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
> (original)
> +++
> activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
> Fri Nov  7 06:23:26 2008
> @@ -754,7 +754,7 @@
>         }
>         AggregatorType answer = new AggregatorType();
>         addOutput(answer);
> -        return ExpressionClause.createAndSetExpression(answer);
> +        return answer.createAndSetExpression();
>     }
>
>     /**
> @@ -781,14 +781,14 @@
>         AggregatorType answer = new AggregatorType();
>         answer.setAggregationStrategy(aggregationStrategy);
>         addOutput(answer);
> -        return ExpressionClause.createAndSetExpression(answer);
> +        return answer.createAndSetExpression();
>     }
>
>     /**
>      * Creates an <a
>      * href="http://activemq.apache.org/camel/aggregator.html
> ">Aggregator</a>
>      * pattern using a custom aggregation collection implementation. The
> aggregation collection must
> -     * be configued with the strategy and correlation expression that this
> aggregator should use.
> +     * be configured with the strategy and correlation expression that
> this aggregator should use.
>      * This avoids duplicating this configuration on both the collection
> and the aggregator itself.
>      *
>      * @param aggregationCollection the collection used to perform the
> aggregation
>
> Modified:
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-collection.xml
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-collection.xml?rev=712133&r1=712132&r2=712133&view=diff
>
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-collection.xml
> (original)
> +++
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-collection.xml
> Fri Nov  7 06:23:26 2008
> @@ -27,7 +27,6 @@
>     <route>
>       <from uri="direct:start"/>
>       <aggregator batchTimeout="500" collectionRef="aggregatorCollection">
> -        <expression/>
>         <to uri="mock:result"/>
>       </aggregator>
>     </route>
>
> Modified:
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-strategy.xml
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-strategy.xml?rev=712133&r1=712132&r2=712133&view=diff
>
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-strategy.xml
> (original)
> +++
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator-custom-strategy.xml
> Fri Nov  7 06:23:26 2008
> @@ -27,7 +27,9 @@
>     <route>
>       <from uri="direct:start"/>
>       <aggregator strategyRef="aggregatorStrategy">
> -        <simple>header.cheese</simple>
> +        <correlationExpression>
> +          <simple>header.cheese</simple>
> +        </correlationExpression>
>         <to uri="mock:result"/>
>       </aggregator>
>     </route>
>
> Modified:
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml?rev=712133&r1=712132&r2=712133&view=diff
>
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
> (original)
> +++
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
> Fri Nov  7 06:23:26 2008
> @@ -27,7 +27,9 @@
>     <route>
>       <from uri="direct:start"/>
>       <aggregator>
> -        <simple>header.cheese</simple>
> +        <correlationExpression>
> +          <simple>header.cheese</simple>
> +        </correlationExpression>
>         <to uri="mock:result"/>
>       </aggregator>
>     </route>
> @@ -41,7 +43,9 @@
>     <route>
>       <from uri="direct:temp"/>
>       <aggregator>
> -        <simple>header.cheese</simple>
> +        <correlationExpression>
> +          <simple>header.cheese</simple>
> +        </correlationExpression>
>         <to uri="mock:result"/>
>       </aggregator>
>     </route>
> @@ -49,7 +53,9 @@
>     <route>
>       <from uri="direct:predicate"/>
>       <aggregator strategyRef="myAggregatorStrategy">
> -        <simple>header.cheese</simple>
> +        <correlationExpression>
> +          <simple>header.cheese</simple>
> +        </correlationExpression>
>         <to uri="mock:result"/>
>         <completedPredicate>
>           <method bean="myAggregatorStrategy" method="isCompleted"/>
>
> Modified:
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicastAggregator.xml
> URL:
> http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicastAggregator.xml?rev=712133&r1=712132&r2=712133&view=diff
>
> ==============================================================================
> ---
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicastAggregator.xml
> (original)
> +++
> activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicastAggregator.xml
> Fri Nov  7 06:23:26 2008
> @@ -61,7 +61,9 @@
>     <route>
>        <from uri="direct:aggregater"/>
>        <aggregator strategyRef="bodyInAggregatorStrategy">
> -        <simple>header.cheese</simple>
> +        <correlationExpression>
> +          <simple>header.cheese</simple>
> +        </correlationExpression>
>         <to uri="mock:result"/>
>         <completedPredicate>
>           <method bean="bodyInAggregatorStrategy" method="isCompleted"/>
>
>
>


-- 
Cheers,
Jon

http://janstey.blogspot.com/

Reply via email to