001    /**
002     *
003     * Licensed to the Apache Software Foundation (ASF) under one or more
004     * contributor license agreements.  See the NOTICE file distributed with
005     * this work for additional information regarding copyright ownership.
006     * The ASF licenses this file to You under the Apache License, Version 2.0
007     * (the "License"); you may not use this file except in compliance with
008     * the License.  You may obtain a copy of the License at
009     *
010     * http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.camel.model;
019    
020    import org.apache.camel.processor.RedeliveryPolicy;
021    
022    import javax.xml.bind.annotation.XmlAccessType;
023    import javax.xml.bind.annotation.XmlAccessorType;
024    import javax.xml.bind.annotation.XmlRootElement;
025    
026    /**
027     * @version $Revision: 1.1 $
028     */
029    @XmlRootElement(name = "redeliveryPolicy")
030    @XmlAccessorType(XmlAccessType.FIELD)
031    public class RedeliveryPolicyType {
032        private Integer maximumRedeliveries;
033        private Long initialRedeliveryDelay;
034        private Double backOffMultiplier;
035        private Boolean useExponentialBackOff;
036        private Double collisionAvoidanceFactor;
037        private Boolean useCollisionAvoidance;
038    
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(true);
098            return this;
099        }
100    
101        public RedeliveryPolicyType useExponentialBackOff() {
102            setUseExponentialBackOff(true);
103            return this;
104        }
105    
106    
107    
108    
109        // Properties
110        //-------------------------------------------------------------------------
111    
112        public Double getBackOffMultiplier() {
113            return backOffMultiplier;
114        }
115    
116        public void setBackOffMultiplier(Double backOffMultiplier) {
117            this.backOffMultiplier = backOffMultiplier;
118        }
119    
120        public Double getCollisionAvoidanceFactor() {
121            return collisionAvoidanceFactor;
122        }
123    
124        public void setCollisionAvoidanceFactor(Double collisionAvoidanceFactor) {
125            this.collisionAvoidanceFactor = collisionAvoidanceFactor;
126        }
127    
128        public Long getInitialRedeliveryDelay() {
129            return initialRedeliveryDelay;
130        }
131    
132        public void setInitialRedeliveryDelay(Long initialRedeliveryDelay) {
133            this.initialRedeliveryDelay = initialRedeliveryDelay;
134        }
135    
136        public Integer getMaximumRedeliveries() {
137            return maximumRedeliveries;
138        }
139    
140        public void setMaximumRedeliveries(Integer maximumRedeliveries) {
141            this.maximumRedeliveries = maximumRedeliveries;
142        }
143    
144        public Boolean getUseCollisionAvoidance() {
145            return useCollisionAvoidance;
146        }
147    
148        public void setUseCollisionAvoidance(Boolean useCollisionAvoidance) {
149            this.useCollisionAvoidance = useCollisionAvoidance;
150        }
151    
152        public Boolean getUseExponentialBackOff() {
153            return useExponentialBackOff;
154        }
155    
156        public void setUseExponentialBackOff(Boolean useExponentialBackOff) {
157            this.useExponentialBackOff = useExponentialBackOff;
158        }
159    }