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.config; 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 import javax.xml.bind.annotation.XmlTransient; 024 025 import org.apache.camel.processor.resequencer.DefaultExchangeComparator; 026 import org.apache.camel.processor.resequencer.ExpressionResultComparator; 027 028 /** 029 * Defines the configuration parameters for the {@link org.apache.camel.processor.StreamResequencer}. 030 * Usage example: 031 * 032 * <pre> 033 * from("direct:start").resequencer(header("seqnum")).stream( 034 * StreamResequencerConfig.getDefault()).to("mock:result") 035 * </pre> 036 * 037 * is equivalent to 038 * 039 * <pre> 040 * from("direct:start").resequencer(header("seqnum")).stream().to("mock:result") 041 * </pre> 042 * 043 * Custom values for <code>capacity</code> and <code>timeout</code> can be 044 * set like in this example: 045 * 046 * <pre> 047 * from("direct:start").resequencer(header("seqnum")).stream( 048 * new StreamResequencerConfig(300, 400L)).to("mock:result") 049 * </pre> 050 * 051 * @author Martin Krasser 052 * 053 * @version $Revision: 751655 $ 054 */ 055 @XmlRootElement 056 @XmlAccessorType(XmlAccessType.FIELD) 057 public class StreamResequencerConfig { 058 059 @XmlAttribute 060 private Integer capacity; // optional XML attribute requires wrapper object 061 062 @XmlAttribute 063 private Long timeout; // optional XML attribute requires wrapper object 064 065 @XmlTransient 066 private ExpressionResultComparator comparator; 067 068 /** 069 * Creates a new {@link StreamResequencerConfig} instance using default 070 * values for <code>capacity</code> (1000) and <code>timeout</code> 071 * (1000L). Elements of the sequence are compared using the 072 * {@link DefaultExchangeComparator}. 073 */ 074 public StreamResequencerConfig() { 075 this(1000, 1000L); 076 } 077 078 /** 079 * Creates a new {@link BatchResequencerConfig} instance using the given 080 * values for <code>capacity</code> and <code>timeout</code>. Elements 081 * of the sequence are compared using the {@link DefaultExchangeComparator}. 082 * 083 * @param capacity capacity of the resequencer's inbound queue. 084 * @param timeout minimum time to wait for missing elements (messages). 085 */ 086 public StreamResequencerConfig(int capacity, long timeout) { 087 this(capacity, timeout, new DefaultExchangeComparator()); 088 } 089 090 /** 091 * Creates a new {@link BatchResequencerConfig} instance using the given 092 * values for <code>capacity</code> and <code>timeout</code>. Elements 093 * of the sequence are compared with the given 094 * {@link ExpressionResultComparator}. 095 * 096 * @param capacity capacity of the resequencer's inbound queue. 097 * @param timeout minimum time to wait for missing elements (messages). 098 * @param comparator comparator for sequence comparision 099 */ 100 public StreamResequencerConfig(int capacity, long timeout, ExpressionResultComparator comparator) { 101 this.capacity = capacity; 102 this.timeout = timeout; 103 this.comparator = comparator; 104 } 105 106 /** 107 * Returns a new {@link StreamResequencerConfig} instance using default 108 * values for <code>capacity</code> (1000) and <code>timeout</code> 109 * (1000L). Elements of the sequence are compared using the 110 * {@link DefaultExchangeComparator}. 111 * 112 * @return a default {@link StreamResequencerConfig}. 113 */ 114 public static StreamResequencerConfig getDefault() { 115 return new StreamResequencerConfig(); 116 } 117 118 public int getCapacity() { 119 return capacity; 120 } 121 122 public void setCapacity(int capacity) { 123 this.capacity = capacity; 124 } 125 126 public long getTimeout() { 127 return timeout; 128 } 129 130 public void setTimeout(long timeout) { 131 this.timeout = timeout; 132 } 133 134 public ExpressionResultComparator getComparator() { 135 return comparator; 136 } 137 138 public void setComparator(ExpressionResultComparator comparator) { 139 this.comparator = comparator; 140 } 141 142 }