class PersistLoadProcessor extends PersistOnlineProcessor {
    @SuppressWarnings("unused")
    private static final long serialVersionUID = -1917169316015093131L;
    private static final Logger logger =
        Logger.getLogger(PersistLoadProcessor.class.getName());

    // class description: "PersistLoadProcessor. Loads CrawlURI attributes " +
    // "from a previous crawl for current consultation."

    /**
     * A source (either log file or BDB directory) from which to copy history
     * information into the current store at startup. (Whenever possible, it
     * would be better to ensure the original history DB is in its own
     * independent BDB environment, and then copy and reuse that environment in
     * the followup crawl(s).) Only one of {link @preloadSource} and
     * {link @preloadSourceUrl} may be specified.
     */
    protected ConfigPath preloadSource = 
        new ConfigFile("preload source","");
    public ConfigPath getPreloadSource() {
        return preloadSource;
    }
    public void setPreloadSource(ConfigPath preloadSource) {
        this.preloadSource = preloadSource;
    }
    public PersistLoadProcessor() {
    }

    /**
     * A log file source url from which to copy history information into the
     * current store at startup. (Whenever possible, it would be better to
     * ensure the original history DB is in its own independent BDB environment,
     * and then copy and reuse that environment in the followup crawl(s).)
     * Only one of {@link preloadSource} and {@link preloadSourceUrl} may be specified.
     */
    protected String preloadSourceUrl = "";
    public String getPreloadSourceUrl() {
        return preloadSourceUrl;
    }
    public void setPreloadSourceUrl(String preloadSourceUrl) {
        this.preloadSourceUrl = preloadSourceUrl;
    }
    
    @Override
    protected void innerProcess(CrawlURI curi) throws InterruptedException {
        String pkey = persistKeyFor(curi);
        @SuppressWarnings("unchecked")
        Map<String, Object> prior = 
        	(Map<String,Object>) store.get(pkey);
        if(prior!=null) {
            // merge in keys
            prior.keySet().removeAll(curi.getData().keySet());
            curi.getData().putAll(prior); 
        }
    }

    @Override
    protected boolean shouldProcess(CrawlURI uri) {
        return shouldLoad(uri);
    }

    @Override
    public void start() {<FILL_FUNCTION_BODY>}
}

        if (isRunning()) {
            return;
        }
        super.start();
        if (StringUtils.isNotBlank(getPreloadSourceUrl()) && StringUtils.isNotBlank(getPreloadSource().getPath())) {
            logger.log(Level.SEVERE, "Both preloadSource and preloadSourceUrl are set - using preloadSource " + getPreloadSource().getFile());
        }
        String source = null;
        Integer count = null;
        try {
            if (StringUtils.isNotBlank(getPreloadSource().getPath())) {
                source = preloadSource.getPath();
                count = PersistProcessor.copyPersistSourceToHistoryMap(preloadSource.getFile(), store);
            } else if (StringUtils.isNotBlank(getPreloadSourceUrl())) {
                source = getPreloadSourceUrl();
                count = PersistProcessor.copyPersistSourceToHistoryMap(new URL(source), store);
            }

            if (count != null) {
                logger.info("Loaded deduplication information for " + count + " previously fetched urls from " + source);
            }
        } catch (IOException ioe) {
            logger.log(Level.SEVERE, "Problem loading " + source + ", proceeding without deduplication. " + ioe);
        } catch(DatabaseException de) {
            logger.log(Level.SEVERE, "Problem loading " + source + ", proceeding without deduplication. " + de);
        } catch(IllegalArgumentException iae) {
            logger.log(Level.SEVERE, "Problem loading " + source + ", proceeding without deduplication. " + iae);
        }
    
<methods>public void <init>() ,public java.lang.String getHistoryDbName() ,public boolean isRunning() ,public void setBdbModule(org.archive.bdb.BdbModule) ,public void setHistoryDbName(java.lang.String) ,public void start() ,public void stop() <variables>protected org.archive.bdb.BdbModule bdb,protected Database historyDb,protected java.lang.String historyDbName,private static final long serialVersionUID,protected StoredSortedMap<java.lang.String,Map#RAW> store