class AbstractFilter<T> extends AbstractRequester implements
        Predicate<T>,
        CookieProcessor {


    protected abstract boolean filterLogic(T t) throws Exception;


    public AbstractFilter(TimeWaitingStrategy strategy) {
        this(strategy, URLMapper.MAIN_PAGE.toString());
    }

    public AbstractFilter(TimeWaitingStrategy strategy, String webSite) {
        super(strategy, webSite);
    }


    @Override
    public boolean test(T t) {<FILL_FUNCTION_BODY>}

}


        System.out.println(getClass().getSimpleName() + " filtering...");


        boolean res = false;
        int retryTime = this.strategy.retryTimes();

        try {
            int loopTime = 1;
            boolean needRMI = true;

            while (retryTime > loopTime) {
                try {
                    res = filterLogic(t);
                    break;
                } catch (Exception e) {
                    if(!(e instanceof IOException)) throw e;
                    System.out.println("Filter: Network busy Retrying -> " + loopTime + " times");
                    updateCookie(webSite);
                    this.strategy.waiting(loopTime++);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;

    
<methods>public void <init>(org.decaywood.timeWaitingStrategy.TimeWaitingStrategy, java.lang.String) <variables>protected ObjectMapper mapper,protected org.decaywood.timeWaitingStrategy.TimeWaitingStrategy strategy,protected java.lang.String webSite