blob: 4b2027eca97693267c0c2eeca561ff62960790d2 [file] [log] [blame]
/**
* 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.processor.resequencer;
/**
* A container for objects to be resequenced. This container can be scheduled
* for timing out. Non-scheduled objects or already timed-out objects are ready
* for being released by the {@link ResequencerEngine}.
*/
class Element<E> implements TimeoutHandler {
/**
* The contained object.
*/
private E object;
/**
* Not <code>null</code> if this element is currently beeing scheduled for
* timing out.
*/
private Timeout timeout;
/**
* Creates a new container instance.
*
* @param object contained object.
*/
public Element(E object) {
this.object = object;
}
/**
* Returns the contained object.
*
* @return the contained object.
*/
public E getObject() {
return object;
}
/**
* Returns <code>true</code> if this element is currently scheduled for
* timing out.
*
* @return <code>true</code> if scheduled or <code>false</code> if not
* scheduled or already timed-out.
*/
public synchronized boolean scheduled() {
return timeout != null;
}
/**
* Schedules the given timeout task. Before this methods calls the
* {@link Timeout#schedule()} method it sets this element as timeout
* listener.
*
* @param t a timeout task.
*/
public synchronized void schedule(Timeout t) {
this.timeout = t;
this.timeout.setTimeoutHandler(this);
this.timeout.schedule();
}
/**
* Cancels the scheduled timeout for this element. If this element is not
* scheduled or has already timed-out this method has no effect.
*/
public synchronized void cancel() {
if (timeout != null) {
timeout.cancel();
}
timeout(null);
}
/**
* Marks this element as timed-out.
*
* @param t timeout task that caused the notification.
*/
public synchronized void timeout(Timeout t) {
this.timeout = null;
}
}