/** * 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. */ 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; } }