// Path: Visitor/src/main/java/com/heaven7/java/visitor/util/Observer.java
// public interface Observer<T, R> {
// 
// 	/**
// 	 * called on operate success.
// 	 * @param param the extra parameter
// 	 * @param r the result when success.
// 	 */
// 	void onSuccess(Object param, R r);
// 
// 	/**
// 	 * called on operate failed.
// 	 * @param param the parameter.
// 	 * @param t the element when failed.
// 	 */
// 	void onFailed(Object param, T t);
// 
// 	/**
// 	 * called on throwable during visit operation.
// 	 * @param param the parameter.
// 	 * @param t the element when throwable during visit operation.
// 	 * @param e the throwable.
// 	 */
// 	void onThrowable(Object param, T t, Throwable e);
// 
// }


import com.heaven7.java.visitor.*;
import com.heaven7.java.visitor.anno.DependOn;
import com.heaven7.java.visitor.anno.Independence;
import com.heaven7.java.visitor.anno.Nullable;
import com.heaven7.java.visitor.util.Observer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;

	@Override
	ListVisitService<T> fire(Object param, FireVisitor<T> fireVisitor, ThrowableVisitor throwVisitor);

	@Override
	ListVisitService<T> fireBatch(FireBatchVisitor<T> fireVisitor);
	@Override
	ListVisitService<T> fireBatch(FireBatchVisitor<T> fireVisitor, ThrowableVisitor throwVisitor);
	@Override
	ListVisitService<T> fireBatch(Object param, FireBatchVisitor<T> fireVisitor, ThrowableVisitor throwVisitor);

	@Override
	ListVisitService<T> save(Collection<T> out);
	@Override
	ListVisitService<T> save(SaveVisitor<T> visitor);
	@Override
	ListVisitService<T> save(Collection<T> out, boolean clearBeforeSave);

	@Override
	ListVisitService<T> addIfNotExist(T newT);
	@Override
	ListVisitService<T> addIfNotExist(T newT, Observer<T, Void> observer);

	@Override
	ListVisitService<T> removeIfExist(T newT);

	@Override
	ListVisitService<T> removeIfExist(T newT, Observer<T, Void> observer);

	@Override
// Path: Visitor/src/main/java/com/heaven7/java/visitor/util/Observer.java
// public interface Observer<T, R> {
// 
// 	/**
// 	 * called on operate success.
// 	 * @param param the extra parameter
// 	 * @param r the result when success.
// 	 */
// 	void onSuccess(Object param, R r);
// 
// 	/**
// 	 * called on operate failed.
// 	 * @param param the parameter.
// 	 * @param t the element when failed.
// 	 */
// 	void onFailed(Object param, T t);
// 
// 	/**
// 	 * called on throwable during visit operation.
// 	 * @param param the parameter.
// 	 * @param t the element when throwable during visit operation.
// 	 * @param e the throwable.
// 	 */
// 	void onThrowable(Object param, T t, Throwable e);
// 
// }


// Path: Visitor/src/main/java/com/heaven7/java/visitor/collection/ListVisitService.java
import com.heaven7.java.visitor.*;
import com.heaven7.java.visitor.anno.DependOn;
import com.heaven7.java.visitor.anno.Independence;
import com.heaven7.java.visitor.anno.Nullable;
import com.heaven7.java.visitor.util.Observer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;


	@Override
	ListVisitService<T> fire(Object param, FireVisitor<T> fireVisitor, ThrowableVisitor throwVisitor);

	@Override
	ListVisitService<T> fireBatch(FireBatchVisitor<T> fireVisitor);
	@Override
	ListVisitService<T> fireBatch(FireBatchVisitor<T> fireVisitor, ThrowableVisitor throwVisitor);
	@Override
	ListVisitService<T> fireBatch(Object param, FireBatchVisitor<T> fireVisitor, ThrowableVisitor throwVisitor);

	@Override
	ListVisitService<T> save(Collection<T> out);
	@Override
	ListVisitService<T> save(SaveVisitor<T> visitor);
	@Override
	ListVisitService<T> save(Collection<T> out, boolean clearBeforeSave);

	@Override
	ListVisitService<T> addIfNotExist(T newT);
	@Override
	ListVisitService<T> addIfNotExist(T newT, Observer<T, Void> observer);

	@Override
	ListVisitService<T> removeIfExist(T newT);

	@Override
	ListVisitService<T> removeIfExist(T newT, Observer<T, Void> observer);

	@Override
	ListVisitService<T> removeRepeat();