/** * DataCleaner (community edition) * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.datacleaner.api; import org.apache.metamodel.util.HasName; import org.apache.metamodel.util.Ref; /** * Represents an {@link AnalyzerResult} that is still being produced. * * Usually {@link AnalyzerResult}s are produced immediately by the * {@link Analyzer#getResult()} method, but in cases where this may take a long * time, an {@link Analyzer} can instead return a result of this type and * thereby indicate that some process is still going on, but the rest of the job * is ready to return. * * @param <R> * the wrapped {@link AnalyzerResult} type. */ public interface AnalyzerResultFuture<R extends AnalyzerResult> extends AnalyzerResult, HasName, Ref<R> { /** * Listener interface for objects that want to be notified when the wrapped * {@link AnalyzerResult} is ready. * * @param <R> */ interface Listener<R extends AnalyzerResult> { void onSuccess(R result); void onError(RuntimeException error); } /** * Gets the name of the {@link AnalyzerResult} that is being waited on. This * is useful for presenting to the user what he is waiting for. * * @return the name of the result being waited for */ @Override String getName(); /** * Adds a {@link Listener} to this {@link AnalyzerResultFuture}. * * @param listener */ void addListener(Listener<? super R> listener); /** * Removes a {@link Listener} from this {@link AnalyzerResultFuture}. * * @param listener */ void removeListener(Listener<R> listener); /** * Determines if the wrapped {@link AnalyzerResult} is ready or if * processing is still going on to produce it. * * Once ready, call {@link #get()} to get it. * * @return true if the wrapped {@link AnalyzerResult} is ready or false if * it is not. */ boolean isReady(); /** * Gets (and awaits the processing in a blocking fashion if necesary) the * wrapped {@link AnalyzerResult}. * * @return the wrapped {@link AnalyzerResult} */ @Override R get(); }