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.XmlAttribute; 022 import javax.xml.bind.annotation.XmlRootElement; 023 024 import org.apache.camel.processor.RedeliveryPolicy; 025 026 /** 027 * Represents an XML <redeliveryPolicy/> element 028 * 029 * @version $Revision: 61064 $ 030 */ 031 @XmlRootElement(name = "redeliveryPolicy") 032 @XmlAccessorType(XmlAccessType.FIELD) 033 public class RedeliveryPolicyType { 034 @XmlAttribute 035 private Integer maximumRedeliveries; 036 @XmlAttribute 037 private Long initialRedeliveryDelay; 038 @XmlAttribute 039 private Double backOffMultiplier; 040 @XmlAttribute 041 private Boolean useExponentialBackOff; 042 @XmlAttribute 043 private Double collisionAvoidanceFactor; 044 @XmlAttribute 045 private Boolean useCollisionAvoidance; 046 @XmlAttribute 047 private Long maximumRedeliveryDelay; 048 @XmlAttribute 049 private LoggingLevel retriesExhaustedLogLevel; 050 @XmlAttribute 051 private LoggingLevel retryAttemptedLogLevel; 052 053 public RedeliveryPolicy createRedeliveryPolicy(RedeliveryPolicy parentPolicy) { 054 RedeliveryPolicy answer = parentPolicy.copy(); 055 056 // copy across the properties - if they are set 057 if (maximumRedeliveries != null) { 058 answer.setMaximumRedeliveries(maximumRedeliveries); 059 } 060 if (initialRedeliveryDelay != null) { 061 answer.setDelay(initialRedeliveryDelay); 062 } 063 if (retriesExhaustedLogLevel != null) { 064 answer.setRetriesExhaustedLogLevel(retriesExhaustedLogLevel); 065 } 066 if (retryAttemptedLogLevel != null) { 067 answer.setRetryAttemptedLogLevel(retryAttemptedLogLevel); 068 } 069 if (backOffMultiplier != null) { 070 answer.setBackOffMultiplier(backOffMultiplier); 071 } 072 if (useExponentialBackOff != null) { 073 answer.setUseExponentialBackOff(useExponentialBackOff); 074 } 075 if (collisionAvoidanceFactor != null) { 076 answer.setCollisionAvoidanceFactor(collisionAvoidanceFactor); 077 } 078 if (useCollisionAvoidance != null) { 079 answer.setUseCollisionAvoidance(useCollisionAvoidance); 080 } 081 if (maximumRedeliveryDelay != null) { 082 answer.setMaximumRedeliveryDelay(maximumRedeliveryDelay); 083 } 084 return answer; 085 } 086 087 public String toString() { 088 return "RedeliveryPolicy[maximumRedeliveries: " + maximumRedeliveries + "]"; 089 } 090 091 // Fluent API 092 //------------------------------------------------------------------------- 093 public RedeliveryPolicyType backOffMultiplier(double backOffMultiplier) { 094 setBackOffMultiplier(backOffMultiplier); 095 return this; 096 } 097 098 public RedeliveryPolicyType collisionAvoidancePercent(double collisionAvoidancePercent) { 099 setCollisionAvoidanceFactor(collisionAvoidancePercent * 0.01d); 100 return this; 101 } 102 103 public RedeliveryPolicyType collisionAvoidanceFactor(double collisionAvoidanceFactor) { 104 setCollisionAvoidanceFactor(collisionAvoidanceFactor); 105 return this; 106 } 107 108 public RedeliveryPolicyType initialRedeliveryDelay(long initialRedeliveryDelay) { 109 setInitialRedeliveryDelay(initialRedeliveryDelay); 110 return this; 111 } 112 113 public RedeliveryPolicyType retriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) { 114 setRetriesExhaustedLogLevel(retriesExhaustedLogLevel); 115 return this; 116 } 117 118 public RedeliveryPolicyType retryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) { 119 setRetryAttemptedLogLevel(retryAttemptedLogLevel); 120 return this; 121 } 122 123 public RedeliveryPolicyType maximumRedeliveries(int maximumRedeliveries) { 124 setMaximumRedeliveries(maximumRedeliveries); 125 return this; 126 } 127 128 public RedeliveryPolicyType useCollisionAvoidance() { 129 setUseCollisionAvoidance(Boolean.TRUE); 130 return this; 131 } 132 133 public RedeliveryPolicyType useExponentialBackOff() { 134 setUseExponentialBackOff(Boolean.TRUE); 135 return this; 136 } 137 138 public RedeliveryPolicyType maximumRedeliveryDelay(long maximumRedeliveryDelay) { 139 setMaximumRedeliveryDelay(maximumRedeliveryDelay); 140 return this; 141 } 142 143 // Properties 144 //------------------------------------------------------------------------- 145 146 public Double getBackOffMultiplier() { 147 return backOffMultiplier; 148 } 149 150 public void setBackOffMultiplier(Double backOffMultiplier) { 151 this.backOffMultiplier = backOffMultiplier; 152 } 153 154 public Double getCollisionAvoidanceFactor() { 155 return collisionAvoidanceFactor; 156 } 157 158 public void setCollisionAvoidanceFactor(Double collisionAvoidanceFactor) { 159 this.collisionAvoidanceFactor = collisionAvoidanceFactor; 160 } 161 162 public Long getInitialRedeliveryDelay() { 163 return initialRedeliveryDelay; 164 } 165 166 public void setInitialRedeliveryDelay(Long initialRedeliveryDelay) { 167 this.initialRedeliveryDelay = initialRedeliveryDelay; 168 } 169 170 public Integer getMaximumRedeliveries() { 171 return maximumRedeliveries; 172 } 173 174 public void setMaximumRedeliveries(Integer maximumRedeliveries) { 175 this.maximumRedeliveries = maximumRedeliveries; 176 } 177 178 public Boolean getUseCollisionAvoidance() { 179 return useCollisionAvoidance; 180 } 181 182 public void setUseCollisionAvoidance(Boolean useCollisionAvoidance) { 183 this.useCollisionAvoidance = useCollisionAvoidance; 184 } 185 186 public Boolean getUseExponentialBackOff() { 187 return useExponentialBackOff; 188 } 189 190 public void setUseExponentialBackOff(Boolean useExponentialBackOff) { 191 this.useExponentialBackOff = useExponentialBackOff; 192 } 193 194 public Long getMaximumRedeliveryDelay() { 195 return maximumRedeliveryDelay; 196 } 197 198 public void setMaximumRedeliveryDelay(Long maximumRedeliveryDelay) { 199 this.maximumRedeliveryDelay = maximumRedeliveryDelay; 200 } 201 202 private void setRetriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) { 203 this.retriesExhaustedLogLevel = retriesExhaustedLogLevel; 204 } 205 206 private LoggingLevel getRetriesExhaustedLogLevel() { 207 return retriesExhaustedLogLevel; 208 } 209 210 private void setRetryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) { 211 this.retryAttemptedLogLevel = retryAttemptedLogLevel; 212 } 213 214 private LoggingLevel getRetryAttemptedLogLevel() { 215 return retryAttemptedLogLevel; 216 } 217 218 }