001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.model;
018    
019    import javax.xml.bind.annotation.XmlAccessType;
020    import javax.xml.bind.annotation.XmlAccessorType;
021    import javax.xml.bind.annotation.XmlRootElement;
022    
023    import org.apache.camel.processor.RedeliveryPolicy;
024    
025    /**
026     * Represents an XML <redeliveryPolicy/> element
027     *
028     * @version $Revision: 664624 $
029     */
030    @XmlRootElement(name = "redeliveryPolicy")
031    @XmlAccessorType(XmlAccessType.FIELD)
032    public class RedeliveryPolicyType {
033        private Integer maximumRedeliveries;
034        private Long initialRedeliveryDelay;
035        private Double backOffMultiplier;
036        private Boolean useExponentialBackOff;
037        private Double collisionAvoidanceFactor;
038        private Boolean useCollisionAvoidance;
039    
040        public RedeliveryPolicy createRedeliveryPolicy(RedeliveryPolicy parentPolicy) {
041            RedeliveryPolicy answer =  parentPolicy.copy();
042    
043            // copy across the properties - if they are set
044            if (maximumRedeliveries != null) {
045                answer.setMaximumRedeliveries(maximumRedeliveries);
046            }
047            if (initialRedeliveryDelay != null) {
048                answer.setInitialRedeliveryDelay(initialRedeliveryDelay);
049            }
050            if (backOffMultiplier != null) {
051                answer.setBackOffMultiplier(backOffMultiplier);
052            }
053            if (useExponentialBackOff != null) {
054                answer.setUseExponentialBackOff(useExponentialBackOff);
055            }
056            if (collisionAvoidanceFactor != null) {
057                answer.setCollisionAvoidanceFactor(collisionAvoidanceFactor);
058            }
059            if (useCollisionAvoidance != null) {
060                answer.setUseCollisionAvoidance(useCollisionAvoidance);
061            }
062            return answer;
063        }
064    
065        public String toString() {
066            return "RedeliveryPolicy[maxRedeliveries: " + maximumRedeliveries + "]";
067        }
068    
069        // Fluent API
070        //-------------------------------------------------------------------------
071        public RedeliveryPolicyType backOffMultiplier(double backOffMultiplier) {
072            setBackOffMultiplier(backOffMultiplier);
073            return this;
074        }
075    
076        public RedeliveryPolicyType collisionAvoidancePercent(double collisionAvoidancePercent) {
077            setCollisionAvoidanceFactor(collisionAvoidancePercent * 0.01d);
078            return this;
079        }
080    
081        public RedeliveryPolicyType collisionAvoidanceFactor(double collisionAvoidanceFactor) {
082            setCollisionAvoidanceFactor(collisionAvoidanceFactor);
083            return this;
084        }
085    
086        public RedeliveryPolicyType initialRedeliveryDelay(long initialRedeliveryDelay) {
087            setInitialRedeliveryDelay(initialRedeliveryDelay);
088            return this;
089        }
090    
091        public RedeliveryPolicyType maximumRedeliveries(int maximumRedeliveries) {
092            setMaximumRedeliveries(maximumRedeliveries);
093            return this;
094        }
095    
096        public RedeliveryPolicyType useCollisionAvoidance() {
097            setUseCollisionAvoidance(Boolean.TRUE);
098            return this;
099        }
100    
101        public RedeliveryPolicyType useExponentialBackOff() {
102            setUseExponentialBackOff(Boolean.TRUE);
103            return this;
104        }
105    
106        // Properties
107        //-------------------------------------------------------------------------
108    
109        public Double getBackOffMultiplier() {
110            return backOffMultiplier;
111        }
112    
113        public void setBackOffMultiplier(Double backOffMultiplier) {
114            this.backOffMultiplier = backOffMultiplier;
115        }
116    
117        public Double getCollisionAvoidanceFactor() {
118            return collisionAvoidanceFactor;
119        }
120    
121        public void setCollisionAvoidanceFactor(Double collisionAvoidanceFactor) {
122            this.collisionAvoidanceFactor = collisionAvoidanceFactor;
123        }
124    
125        public Long getInitialRedeliveryDelay() {
126            return initialRedeliveryDelay;
127        }
128    
129        public void setInitialRedeliveryDelay(Long initialRedeliveryDelay) {
130            this.initialRedeliveryDelay = initialRedeliveryDelay;
131        }
132    
133        public Integer getMaximumRedeliveries() {
134            return maximumRedeliveries;
135        }
136    
137        public void setMaximumRedeliveries(Integer maximumRedeliveries) {
138            this.maximumRedeliveries = maximumRedeliveries;
139        }
140    
141        public Boolean getUseCollisionAvoidance() {
142            return useCollisionAvoidance;
143        }
144    
145        public void setUseCollisionAvoidance(Boolean useCollisionAvoidance) {
146            this.useCollisionAvoidance = useCollisionAvoidance;
147        }
148    
149        public Boolean getUseExponentialBackOff() {
150            return useExponentialBackOff;
151        }
152    
153        public void setUseExponentialBackOff(Boolean useExponentialBackOff) {
154            this.useExponentialBackOff = useExponentialBackOff;
155        }
156    }