class AbstractMapper <T, R> extends AbstractRequester implements
        Function<T, R>,
        CookieProcessor {


    protected abstract R mapLogic(T t) throws Exception;


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

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

    @Override
    public R apply(T t) {<FILL_FUNCTION_BODY>}


}


        if (t != null)
            System.out.println(getClass().getSimpleName() + " mapping -> " + t.getClass().getSimpleName());

        R res = null;
        int retryTime = this.strategy.retryTimes();

        try {

            int loopTime = 1;
            boolean needRMI = true;

            if(t != null) //noinspection unchecked
                t = t instanceof DeepCopy ? ((DeepCopy<T>) t).copy() : t;

            while (retryTime > loopTime) {
                try {
                    res = mapLogic(t);
                    needRMI = false;
                    break;
                } catch (Exception e) {
                    if (!(e instanceof IOException)) throw e;
                    System.out.println("Mapper: Network busy Retrying -> " + loopTime + " times" + "  " + this.getClass().getSimpleName());
                    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