/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.model.config; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.processor.resequencer.DefaultExchangeComparator; import org.apache.camel.processor.resequencer.ExpressionResultComparator; import org.apache.camel.spi.Metadata; /** * Configures stream-processing resequence eip. */ @Metadata(label = "eip,routing,resequence") @XmlRootElement(name = "stream-config") @XmlAccessorType(XmlAccessType.FIELD) public class StreamResequencerConfig extends ResequencerConfig { @XmlAttribute @Metadata(defaultValue = "100") private Integer capacity; @XmlAttribute @Metadata(defaultValue = "1000") private Long timeout; @XmlAttribute private Boolean ignoreInvalidExchanges; @XmlTransient private ExpressionResultComparator comparator; @XmlAttribute private String comparatorRef; @XmlAttribute private Boolean rejectOld; /** * Creates a new {@link StreamResequencerConfig} instance using default * values for <code>capacity</code> (1000) and <code>timeout</code> * (1000L). Elements of the sequence are compared using the * {@link DefaultExchangeComparator}. */ public StreamResequencerConfig() { this(1000, 1000L); } /** * Creates a new {@link StreamResequencerConfig} instance using the given * values for <code>capacity</code> and <code>timeout</code>. Elements * of the sequence are compared using the {@link DefaultExchangeComparator}. * * @param capacity capacity of the resequencer's inbound queue. * @param timeout minimum time to wait for missing elements (messages). */ public StreamResequencerConfig(int capacity, long timeout) { this(capacity, timeout, new DefaultExchangeComparator()); } /** * Creates a new {@link StreamResequencerConfig} instance using the given * values for <code>capacity</code> and <code>timeout</code>. Elements * of the sequence are compared with the given * {@link ExpressionResultComparator}. * * @param capacity capacity of the resequencer's inbound queue. * @param timeout minimum time to wait for missing elements (messages). * @param comparator comparator for sequence comparision */ public StreamResequencerConfig(int capacity, long timeout, ExpressionResultComparator comparator) { this.capacity = capacity; this.timeout = timeout; this.comparator = comparator; } /** * Creates a new {@link StreamResequencerConfig} instance using the given * values for <code>capacity</code> and <code>timeout</code>. Elements * of the sequence are compared using the {@link DefaultExchangeComparator}. * * @param capacity capacity of the resequencer's inbound queue. * @param timeout minimum time to wait for missing elements (messages). * @param rejectOld if true, throws an exception when messages older than the last delivered message are processed */ public StreamResequencerConfig(int capacity, long timeout, Boolean rejectOld) { this(capacity, timeout, rejectOld, new DefaultExchangeComparator()); } /** * Creates a new {@link StreamResequencerConfig} instance using the given * values for <code>capacity</code> and <code>timeout</code>. Elements * of the sequence are compared with the given {@link ExpressionResultComparator}. * * @param capacity capacity of the resequencer's inbound queue. * @param timeout minimum time to wait for missing elements (messages). * @param rejectOld if true, throws an exception when messages older than the last delivered message are processed * @param comparator comparator for sequence comparision */ public StreamResequencerConfig(int capacity, long timeout, Boolean rejectOld, ExpressionResultComparator comparator) { this.capacity = capacity; this.timeout = timeout; this.rejectOld = rejectOld; this.comparator = comparator; } /** * Returns a new {@link StreamResequencerConfig} instance using default * values for <code>capacity</code> (1000) and <code>timeout</code> * (1000L). Elements of the sequence are compared using the * {@link DefaultExchangeComparator}. * * @return a default {@link StreamResequencerConfig}. */ public static StreamResequencerConfig getDefault() { return new StreamResequencerConfig(); } public int getCapacity() { return capacity; } /** * Sets the capacity of the resequencer's inbound queue. */ public void setCapacity(int capacity) { this.capacity = capacity; } public long getTimeout() { return timeout; } /** * Sets minimum time to wait for missing elements (messages). */ public void setTimeout(long timeout) { this.timeout = timeout; } public Boolean getIgnoreInvalidExchanges() { return ignoreInvalidExchanges; } /** * Whether to ignore invalid exchanges */ public void setIgnoreInvalidExchanges(Boolean ignoreInvalidExchanges) { this.ignoreInvalidExchanges = ignoreInvalidExchanges; } public ExpressionResultComparator getComparator() { return comparator; } /** * To use a custom comparator */ public void setComparator(ExpressionResultComparator comparator) { this.comparator = comparator; } public String getComparatorRef() { return comparatorRef; } /** * To use a custom comparator */ public void setComparatorRef(String comparatorRef) { this.comparatorRef = comparatorRef; } /** * If true, throws an exception when messages older than the last delivered message are processed */ public void setRejectOld(boolean value) { this.rejectOld = value; } public Boolean getRejectOld() { return rejectOld; } }