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: 46235 $
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        private Long maximumRedeliveryDelay;
040    
041        public RedeliveryPolicy createRedeliveryPolicy(RedeliveryPolicy parentPolicy) {
042            RedeliveryPolicy answer =  parentPolicy.copy();
043    
044            // copy across the properties - if they are set
045            if (maximumRedeliveries != null) {
046                answer.setMaximumRedeliveries(maximumRedeliveries);
047            }
048            if (initialRedeliveryDelay != null) {
049                answer.setInitialRedeliveryDelay(initialRedeliveryDelay);
050            }
051            if (backOffMultiplier != null) {
052                answer.setBackOffMultiplier(backOffMultiplier);
053            }
054            if (useExponentialBackOff != null) {
055                answer.setUseExponentialBackOff(useExponentialBackOff);
056            }
057            if (collisionAvoidanceFactor != null) {
058                answer.setCollisionAvoidanceFactor(collisionAvoidanceFactor);
059            }
060            if (useCollisionAvoidance != null) {
061                answer.setUseCollisionAvoidance(useCollisionAvoidance);
062            }
063            if (maximumRedeliveryDelay != null) {
064                answer.setMaximumRedeliveryDelay(maximumRedeliveryDelay);
065            }
066            return answer;
067        }
068    
069        public String toString() {
070            return "RedeliveryPolicy[maximumRedeliveries: " + maximumRedeliveries + "]";
071        }
072    
073        // Fluent API
074        //-------------------------------------------------------------------------
075        public RedeliveryPolicyType backOffMultiplier(double backOffMultiplier) {
076            setBackOffMultiplier(backOffMultiplier);
077            return this;
078        }
079    
080        public RedeliveryPolicyType collisionAvoidancePercent(double collisionAvoidancePercent) {
081            setCollisionAvoidanceFactor(collisionAvoidancePercent * 0.01d);
082            return this;
083        }
084    
085        public RedeliveryPolicyType collisionAvoidanceFactor(double collisionAvoidanceFactor) {
086            setCollisionAvoidanceFactor(collisionAvoidanceFactor);
087            return this;
088        }
089    
090        public RedeliveryPolicyType initialRedeliveryDelay(long initialRedeliveryDelay) {
091            setInitialRedeliveryDelay(initialRedeliveryDelay);
092            return this;
093        }
094    
095        public RedeliveryPolicyType maximumRedeliveries(int maximumRedeliveries) {
096            setMaximumRedeliveries(maximumRedeliveries);
097            return this;
098        }
099    
100        public RedeliveryPolicyType useCollisionAvoidance() {
101            setUseCollisionAvoidance(Boolean.TRUE);
102            return this;
103        }
104    
105        public RedeliveryPolicyType useExponentialBackOff() {
106            setUseExponentialBackOff(Boolean.TRUE);
107            return this;
108        }
109    
110        public RedeliveryPolicyType maximumRedeliveryDelay(long maximumRedeliveryDelay) {
111            setMaximumRedeliveryDelay(maximumRedeliveryDelay);
112            return this;
113        }
114    
115        // Properties
116        //-------------------------------------------------------------------------
117    
118        public Double getBackOffMultiplier() {
119            return backOffMultiplier;
120        }
121    
122        public void setBackOffMultiplier(Double backOffMultiplier) {
123            this.backOffMultiplier = backOffMultiplier;
124        }
125    
126        public Double getCollisionAvoidanceFactor() {
127            return collisionAvoidanceFactor;
128        }
129    
130        public void setCollisionAvoidanceFactor(Double collisionAvoidanceFactor) {
131            this.collisionAvoidanceFactor = collisionAvoidanceFactor;
132        }
133    
134        public Long getInitialRedeliveryDelay() {
135            return initialRedeliveryDelay;
136        }
137    
138        public void setInitialRedeliveryDelay(Long initialRedeliveryDelay) {
139            this.initialRedeliveryDelay = initialRedeliveryDelay;
140        }
141    
142        public Integer getMaximumRedeliveries() {
143            return maximumRedeliveries;
144        }
145    
146        public void setMaximumRedeliveries(Integer maximumRedeliveries) {
147            this.maximumRedeliveries = maximumRedeliveries;
148        }
149    
150        public Boolean getUseCollisionAvoidance() {
151            return useCollisionAvoidance;
152        }
153    
154        public void setUseCollisionAvoidance(Boolean useCollisionAvoidance) {
155            this.useCollisionAvoidance = useCollisionAvoidance;
156        }
157    
158        public Boolean getUseExponentialBackOff() {
159            return useExponentialBackOff;
160        }
161    
162        public void setUseExponentialBackOff(Boolean useExponentialBackOff) {
163            this.useExponentialBackOff = useExponentialBackOff;
164        }
165    
166        public Long getMaximumRedeliveryDelay() {
167            return maximumRedeliveryDelay;
168        }
169    
170        public void setMaximumRedeliveryDelay(Long maximumRedeliveryDelay) {
171            this.maximumRedeliveryDelay = maximumRedeliveryDelay;
172        }
173    }