//# 0 errors, 375 messages
//#
/*
    //#ReferrerQueueManagerImpl.java:1:1: class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */

package org.apache.roller.weblogger.business.referrers;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.Weblogger;
import org.apache.roller.weblogger.business.runnable.ContinuousWorkerThread;
import org.apache.roller.weblogger.business.runnable.WorkerThread;
import org.apache.roller.weblogger.config.WebloggerConfig;


/**
 * The base implementation of the ReferrerQueueManager.
 * 
 * This class is implemented using the singleton pattern to ensure that only
 * one instance exists at any given time.
 *
 * This implementation can be configured to handle referrers in 2 ways ...
 *  1. synchronously.  referrers are processed immediately.
 *  2. asynchronously.  referrers are queued for later processing.
 *
 * Users can control the referrer queue mode via properties in the static
 * roller.properties configuration file.
 *
 * In asynchronous processing mode we start some number of worker threads which
 * run continously to process any referrers that have been queued.  Each worker
 * processes queued referrers until the queue is empty, then sleeps for a given
 * amount of time.  The number of workers used and their sleep time can be set
 * via properties of the static roller.properties file.
 *
 * @author Allen Gilliland
 */
@com.google.inject.Singleton
public class ReferrerQueueManagerImpl implements ReferrerQueueManager {
    
    private static Log mLogger = LogFactory.getLog(ReferrerQueueManagerImpl.class);
    //#ReferrerQueueManagerImpl.java:59: method: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init
    //#ReferrerQueueManagerImpl.java:59: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Descendant_Table[org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl]
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.dequeue()Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer;
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.enqueue(Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer;)V
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.processReferrer(Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer;)V
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.shutdown()V
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): mLogger
    //#output(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): org/apache/roller/weblogger/business/referrers/ReferrerQueueManager.__Descendant_Table[org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl]
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Descendant_Table[org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): org/apache/roller/weblogger/business/referrers/ReferrerQueueManager.__Descendant_Table[org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.dequeue()Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer; == &dequeue
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.enqueue(Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer;)V == &enqueue
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.processReferrer(Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer;)V == &processReferrer
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): __Dispatch_Table.shutdown()V == &shutdown
    //#post(org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init): init'ed(mLogger)
    //#ReferrerQueueManagerImpl.java:59: end of method: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl__static_init
    
    private final Weblogger roller;
    
    private boolean asyncMode = false;
    private int numWorkers = 1;
    private int sleepTime = 10000;
    private List workers = null;
    private List referrerQueue = null;

    
    // private because we are a singleton
    @com.google.inject.Inject
    protected ReferrerQueueManagerImpl(Weblogger roller) {
    //#ReferrerQueueManagerImpl.java:72: method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "="._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "Asynchronous referrer processing = "._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "Fetching property ["._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "Invalid num workers ["._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "Invalid sleep time ["._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "ReferrerWorker"._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "]"._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "], using default"._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "referrers.asyncProcessing.enabled"._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "referrers.queue.numWorkers"._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): "referrers.queue.sleepTime"._tainted
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): mLogger
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.config
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.log
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): roller
    //#input(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): new ArrayList(ReferrerQueueManagerImpl#5) num objects
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.asyncMode
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.numWorkers
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.referrerQueue
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.roller
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.sleepTime
    //#output(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.workers
    //#new obj(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): new ArrayList(ReferrerQueueManagerImpl#5)
    //#pre[1] (void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): mLogger != null
    //#pre[2] (void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.config != null
    //#pre[3] (void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.log != null
    //#presumption(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): java.lang.Integer:parseInt(...)@101 in -2_147_483..4_294_967
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): init'ed(this.asyncMode)
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.numWorkers >= 1
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): init'ed(this.referrerQueue)
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.roller == roller
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): init'ed(this.roller)
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.sleepTime in -2_147_483_000..4_294_967_000
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): this.workers in Addr_Set{null,&new ArrayList(ReferrerQueueManagerImpl#5)}
    //#post(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): new ArrayList(ReferrerQueueManagerImpl#5) num objects <= 1
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.Boolean
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): Effects-of-calling:java.lang.Thread
    //#test_vector(void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)): java.lang.Integer:parseInt(...)@90: {1..4_294_967_295}, {-2_147_483_648..0}
        
        mLogger.info("Instantiating Referrer Queue Manager");
    //#ReferrerQueueManagerImpl.java:74: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        
        this.roller = roller;

        // lookup config options
        this.asyncMode = WebloggerConfig.getBooleanProperty("referrers.asyncProcessing.enabled");
        
        mLogger.info("Asynchronous referrer processing = "+this.asyncMode);
    //#ReferrerQueueManagerImpl.java:81: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        
        if(this.asyncMode) {
            
            
            String num = WebloggerConfig.getProperty("referrers.queue.numWorkers");
            String sleep = WebloggerConfig.getProperty("referrers.queue.sleepTime");
            
            try {
                this.numWorkers = Integer.parseInt(num);
                
                if(numWorkers < 1)
                    this.numWorkers = 1;
                
            } catch(NumberFormatException nfe) {
                mLogger.warn("Invalid num workers ["+num+"], using default");
    //#ReferrerQueueManagerImpl.java:96: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
            }
            
            try {
                // multiply by 1000 because we expect input in seconds
                this.sleepTime = Integer.parseInt(sleep) * 1000;
            } catch(NumberFormatException nfe) {
                mLogger.warn("Invalid sleep time ["+sleep+"], using default");
    //#ReferrerQueueManagerImpl.java:103: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
            }
            
            // create the processing queue
            this.referrerQueue = Collections.synchronizedList(new ArrayList());
            
            // start up workers
            this.workers = new ArrayList();
            ContinuousWorkerThread worker = null;
            QueuedReferrerProcessingJob job = null;
            for(int i=0; i < this.numWorkers; i++) {
                job = new QueuedReferrerProcessingJob();
                worker = new ContinuousWorkerThread("ReferrerWorker"+i, job, this.sleepTime);
                workers.add(worker);
                worker.start();
    //#ReferrerQueueManagerImpl.java:117: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.runnable.ContinuousWorkerThread:start()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.runnable.ContinuousWorkerThread:start()
            }
        }
    }
    //#ReferrerQueueManagerImpl.java:120: end of method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl(Weblogger)
    
    
    /**
     * Process an incoming referrer.
     *
     * If we are doing asynchronous referrer processing then the referrer will
     * just go into the queue for later processing.  If not then we process it
     * now.
     */
    public void processReferrer(IncomingReferrer referrer) {
        
        if(this.asyncMode) {
    //#ReferrerQueueManagerImpl.java:132: method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.processReferrer(IncomingReferrer)
    //#ReferrerQueueManagerImpl.java:132: Warning: suspicious precondition
    //#    the precondition for org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void processReferrer(IncomingReferrer)
    //#    suspicious precondition index: [3]
    //#    Attribs:  Soft
    //#ReferrerQueueManagerImpl.java:132: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void processReferrer(IncomingReferrer)
    //#    suspicious precondition index: [55]
    //#    Attribs:  Soft
    //#input(void processReferrer(IncomingReferrer)): "."._tainted
    //#input(void processReferrer(IncomingReferrer)): ":"._tainted
    //#input(void processReferrer(IncomingReferrer)): "="._tainted
    //#input(void processReferrer(IncomingReferrer)): "Incrementing hit count on existing referer: "._tainted
    //#input(void processReferrer(IncomingReferrer)): "PROCESSING: "._tainted
    //#input(void processReferrer(IncomingReferrer)): "QUEUING: "._tainted
    //#input(void processReferrer(IncomingReferrer)): "Referrer queue is rather full. queued="._tainted
    //#input(void processReferrer(IncomingReferrer)): "Trouble accessing property: "._tainted
    //#input(void processReferrer(IncomingReferrer)): "] accessing ["._tainted
    //#input(void processReferrer(IncomingReferrer)): "]"._tainted
    //#input(void processReferrer(IncomingReferrer)): "direct"._tainted
    //#input(void processReferrer(IncomingReferrer)): "entryAnchorToIdMap CACHE HIT - "._tainted
    //#input(void processReferrer(IncomingReferrer)): "entryAnchorToIdMap CACHE MISS - "._tainted
    //#input(void processReferrer(IncomingReferrer)): "fetched property ["._tainted
    //#input(void processReferrer(IncomingReferrer)): "http:.."._tainted
    //#input(void processReferrer(IncomingReferrer)): "http:..www"._tainted
    //#input(void processReferrer(IncomingReferrer)): "newReferer="._tainted
    //#input(void processReferrer(IncomingReferrer)): "processing referrer ["._tainted
    //#input(void processReferrer(IncomingReferrer)): "site.linkbacks.enabled"._tainted
    //#input(void processReferrer(IncomingReferrer)): "weblogHandleToId CACHE HIT - "._tainted
    //#input(void processReferrer(IncomingReferrer)): "weblogHandleToId CACHE MISS - "._tainted
    //#input(void processReferrer(IncomingReferrer)): __Descendant_Table[org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): __Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): __Dispatch_Table.enqueue(Lorg/apache/roller/weblogger/business/referrers/IncomingReferrer;)V
    //#input(void processReferrer(IncomingReferrer)): mLogger
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/GuiceWebloggerProvider.__Dispatch_Table.getWeblogger()Lorg/apache/roller/weblogger/business/Weblogger;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/PropertiesManager.__Descendant_Table[org/apache/roller/weblogger/business/PropertiesManager]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/PropertiesManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAPropertiesManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/PropertiesManager.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/PropertiesManager.__Dispatch_Table.getProperty(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/RuntimeConfigProperty;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/UserManager.__Descendant_Table[org/apache/roller/weblogger/business/UserManager]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/UserManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/UserManager.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/UserManager.__Dispatch_Table.getWebsiteByHandle(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WeblogManager.__Descendant_Table[org/apache/roller/weblogger/business/WeblogManager]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WeblogManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WeblogManager.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WeblogManager.__Dispatch_Table.getWeblogEntryByAnchor(Lorg/apache/roller/weblogger/pojos/Weblog;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.flush()V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getPropertiesManager()Lorg/apache/roller/weblogger/business/PropertiesManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getRefererManager()Lorg/apache/roller/weblogger/business/referrers/RefererManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getUserManager()Lorg/apache/roller/weblogger/business/UserManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getWeblogManager()Lorg/apache/roller/weblogger/business/WeblogManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...threadManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...threadManager.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...threadManager.serviceScheduler
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...userManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...userManager.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...userManager.strategy
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...userManager.strategy.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...userManager.strategy.threadLocalEntityManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...weblogManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...weblogManager.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...weblogManager.strategy
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...weblogManager.strategy.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance...weblogManager.strategy.threadLocalEntityManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.propertiesManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.propertiesManager.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.propertiesManager.strategy
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.propertiesManager.strategy.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.propertiesManager.strategy.threadLocalEntityManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.refererManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.refererManager.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.refererManager.roller
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.refererManager.strategy
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.refererManager.strategy.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.refererManager.strategy.threadLocalEntityManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.strategy
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.strategy.__Tag
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance.strategy.threadLocalEntityManager
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.flush()V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getPropertiesManager()Lorg/apache/roller/weblogger/business/PropertiesManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getRefererManager()Lorg/apache/roller/weblogger/business/referrers/RefererManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getUserManager()Lorg/apache/roller/weblogger/business/UserManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getWeblogManager()Lorg/apache/roller/weblogger/business/WeblogManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerProvider.__Descendant_Table[org/apache/roller/weblogger/business/GuiceWebloggerProvider]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerProvider.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerProvider]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerProvider.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/WebloggerProvider.__Dispatch_Table.getWeblogger()Lorg/apache/roller/weblogger/business/Weblogger;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.__Dispatch_Table.flush()V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.__Dispatch_Table.getNamedQuery(Ljava/lang/String;)Ljavax/persistence/Query;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.__Dispatch_Table.load(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.__Dispatch_Table.store(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.javax.persistence.FlushModeType.COMMIT
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAPropertiesManagerImpl.__Dispatch_Table.getProperty(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/RuntimeConfigProperty;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.__Dispatch_Table.getMatchingReferers(Lorg/apache/roller/weblogger/pojos/Weblog;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.__Dispatch_Table.getReferersToWebsite(Lorg/apache/roller/weblogger/pojos/Weblog;Ljava/lang/String;)Ljava/util/List;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.__Dispatch_Table.processReferrer(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.__Dispatch_Table.saveReferer(Lorg/apache/roller/weblogger/pojos/WeblogReferrer;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.java.lang.Boolean.FALSE
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.log
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.__Dispatch_Table.getWebsite(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.__Dispatch_Table.getWebsiteByHandle(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.__Dispatch_Table.getWebsiteByHandle(Ljava/lang/String;Ljava/lang/Boolean;)Lorg/apache/roller/weblogger/pojos/Weblog;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java.lang.Boolean.TRUE
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.log
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.__Dispatch_Table.getWeblogEntry(Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.__Dispatch_Table.getWeblogEntryByAnchor(Lorg/apache/roller/weblogger/pojos/Weblog;Ljava/lang/String;)Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.log
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.flush()V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getPropertiesManager()Lorg/apache/roller/weblogger/business/PropertiesManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getRefererManager()Lorg/apache/roller/weblogger/business/referrers/RefererManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getUserManager()Lorg/apache/roller/weblogger/business/UserManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getWeblogManager()Lorg/apache/roller/weblogger/business/WeblogManager;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Descendant_Table[org/apache/roller/weblogger/business/referrers/IncomingReferrer]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Dispatch_Table.getReferrerUrl()Ljava/lang/String;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Dispatch_Table.getRequestUrl()Ljava/lang/String;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Dispatch_Table.getWeblogAnchor()Ljava/lang/String;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Dispatch_Table.getWeblogDateString()Ljava/lang/String;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Dispatch_Table.getWeblogHandle()Ljava/lang/String;
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/RefererManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/RefererManager.__Descendant_Table[org/apache/roller/weblogger/business/referrers/RefererManager]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/RefererManager.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/RefererManager.__Dispatch_Table.processReferrer(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/ReferrerProcessingJob.__Descendant_Table[org/apache/roller/weblogger/business/referrers/ReferrerProcessingJob]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/ReferrerProcessingJob.__Dispatch_Table.execute()V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/ReferrerProcessingJob.__Dispatch_Table.input(Ljava/util/Map;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/referrers/ReferrerProcessingJob.mLogger
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void processReferrer(IncomingReferrer)): org/apache/roller/weblogger/config/WebloggerRuntimeConfig.log
    //#input(void processReferrer(IncomingReferrer)): referrer
    //#input(void processReferrer(IncomingReferrer)): referrer.__Tag
    //#input(void processReferrer(IncomingReferrer)): referrer.requestUrl
    //#input(void processReferrer(IncomingReferrer)): referrer.requestUrl._tainted
    //#input(void processReferrer(IncomingReferrer)): this
    //#input(void processReferrer(IncomingReferrer)): this.__Tag
    //#input(void processReferrer(IncomingReferrer)): this.asyncMode
    //#input(void processReferrer(IncomingReferrer)): this.referrerQueue
    //#input(void processReferrer(IncomingReferrer)): this.roller
    //#input(void processReferrer(IncomingReferrer)): this.roller.__Tag
    //#input(void processReferrer(IncomingReferrer)): this.roller.strategy
    //#input(void processReferrer(IncomingReferrer)): this.roller.strategy.__Tag
    //#input(void processReferrer(IncomingReferrer)): this.roller.strategy.emf
    //#input(void processReferrer(IncomingReferrer)): this.roller.strategy.threadLocalEntityManager
    //#pre[52] (void processReferrer(IncomingReferrer)): init'ed(this.asyncMode)
    //#pre[1] (void processReferrer(IncomingReferrer)): (soft) mLogger != null
    //#pre[2] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider != null
    //#pre[3] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.__Tag in {org/apache/roller/weblogger/business/GuiceWebloggerProvider, org/apache/roller/weblogger/business/WebloggerProvider}
    //#pre[4] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/WebloggerFactory.webloggerProvider.webloggerInstance != null
    //#pre[41] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.log != null
    //#pre[42] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.log != null
    //#pre[43] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.log != null
    //#pre[44] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/business/referrers/ReferrerProcessingJob.mLogger != null
    //#pre[45] (void processReferrer(IncomingReferrer)): (soft) org/apache/roller/weblogger/config/WebloggerRuntimeConfig.log != null
    //#pre[46] (void processReferrer(IncomingReferrer)): (soft) referrer != null
    //#pre[47] (void processReferrer(IncomingReferrer)): (soft) referrer.__Tag == org/apache/roller/weblogger/business/referrers/IncomingReferrer
    //#pre[48] (void processReferrer(IncomingReferrer)): (soft) init'ed(referrer.requestUrl)
    //#pre[51] (void processReferrer(IncomingReferrer)): (soft) this.__Tag == org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl
    //#pre[53] (void processReferrer(IncomingReferrer)): (soft) this.referrerQueue != null
    //#pre[54] (void processReferrer(IncomingReferrer)): (soft) this.roller != null
    //#pre[55] (void processReferrer(IncomingReferrer)): (soft) this.roller.__Tag in {org/apache/roller/weblogger/business/Weblogger, org/apache/roller/weblogger/business/WebloggerImpl, org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl}
    //#pre[56] (void processReferrer(IncomingReferrer)): (soft) this.roller.strategy != null
    //#pre[57] (void processReferrer(IncomingReferrer)): (soft) this.roller.strategy.__Tag == org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy
    //#pre[58] (void processReferrer(IncomingReferrer)): (soft) this.roller.strategy.emf != null
    //#pre[59] (void processReferrer(IncomingReferrer)): (soft) this.roller.strategy.threadLocalEntityManager != null
    //#presumption(void processReferrer(IncomingReferrer)): java.util.Map:get(...)@87.__Tag == org/apache/roller/weblogger/business/referrers/IncomingReferrer
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.commons.logging.Log:warn
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getWeblogger
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getRefererManager
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:processReferrer
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:flush
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.ThreadLocal:get
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityManagerFactory:createEntityManager
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.ThreadLocal:set
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityManager:getTransaction
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityTransaction:isActive
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityTransaction:begin
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityManager:createNamedQuery
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.Query:setFlushMode
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.Query:setParameter
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.Query:getResultList
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getUserManager
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getWebsiteByHandle
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getWeblogManager
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getWeblogEntryByAnchor
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getReferersToWebsite
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:stripJsessionId
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogReferrer:getDayHits
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.Integer
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogReferrer:setDayHits
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogReferrer:getTotalHits
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogReferrer:setTotalHits
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:saveReferer
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogReferrer
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.commons.logging.Log:isDebugEnabled
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogReferrer:getRefererUrl
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getBooleanProperty
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getThreadManager
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:executeInBackground
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityManager:contains
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityManager:persist
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityTransaction:commit
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.RollerException
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.EntityManager:find
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getPropertiesManager
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:getProperty
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.RuntimeConfigProperty:getValue
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:javax.persistence.Query:getSingleResult
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Map:remove
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.Boolean:equals
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getEnabled
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getId
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Hashtable:remove
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Hashtable:containsKey
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Hashtable:get
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getId
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.Hashtable:put
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.Boolean
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void processReferrer(IncomingReferrer)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#test_vector(void processReferrer(IncomingReferrer)): this.asyncMode: {0}, {1}
            mLogger.debug("QUEUING: "+referrer.getRequestUrl());
    //#ReferrerQueueManagerImpl.java:133: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void processReferrer(IncomingReferrer)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            
            // add to queue
            this.enqueue(referrer);
        } else {
            // process now
            ReferrerProcessingJob job = new ReferrerProcessingJob();
            
            // setup input
            HashMap inputs = new HashMap();
            inputs.put("referrer", referrer);
            job.input(inputs);
            
            // execute
            job.execute();
            
            try {
                // flush changes
                roller.flush();
            } catch (WebloggerException ex) {
                mLogger.error("ERROR commiting referrer", ex);
    //#ReferrerQueueManagerImpl.java:153: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void processReferrer(IncomingReferrer)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            }
        }
        
    }
    //#ReferrerQueueManagerImpl.java:157: end of method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.processReferrer(IncomingReferrer)
    
    
    /**
     * Place a referrer in the queue.
     */
    public void enqueue(IncomingReferrer referrer) {
        this.referrerQueue.add(referrer);
    //#ReferrerQueueManagerImpl.java:164: method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.enqueue(IncomingReferrer)
    //#input(void enqueue(IncomingReferrer)): "Referrer queue is rather full. queued="._tainted
    //#input(void enqueue(IncomingReferrer)): mLogger
    //#input(void enqueue(IncomingReferrer)): referrer
    //#input(void enqueue(IncomingReferrer)): this
    //#input(void enqueue(IncomingReferrer)): this.referrerQueue
    //#pre[4] (void enqueue(IncomingReferrer)): this.referrerQueue != null
    //#pre[1] (void enqueue(IncomingReferrer)): (soft) mLogger != null
    //#test_vector(void enqueue(IncomingReferrer)): java.util.List:size(...)@166: {-2_147_483_648..250}, {251..4_294_967_295}
        
        if(this.referrerQueue.size() > 250) {
            mLogger.warn("Referrer queue is rather full. queued="+this.referrerQueue.size());
    //#ReferrerQueueManagerImpl.java:167: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void enqueue(IncomingReferrer)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
        }
    }
    //#ReferrerQueueManagerImpl.java:169: end of method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.enqueue(IncomingReferrer)
    
    
    /**
     * Retrieve the next referrer in the queue.
     */
    public synchronized IncomingReferrer dequeue() {
        
        if(!this.referrerQueue.isEmpty()) {
    //#ReferrerQueueManagerImpl.java:177: method: IncomingReferrer org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.dequeue()
    //#input(IncomingReferrer dequeue()): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Descendant_Table[org/apache/roller/weblogger/business/referrers/IncomingReferrer]
    //#input(IncomingReferrer dequeue()): org/apache/roller/weblogger/business/referrers/IncomingReferrer.__Descendant_Table[others]
    //#input(IncomingReferrer dequeue()): this
    //#input(IncomingReferrer dequeue()): this.referrerQueue
    //#output(IncomingReferrer dequeue()): return_value
    //#pre[2] (IncomingReferrer dequeue()): this.referrerQueue != null
    //#presumption(IncomingReferrer dequeue()): java.util.List:remove(...).__Tag@178 == org/apache/roller/weblogger/business/referrers/IncomingReferrer
    //#post(IncomingReferrer dequeue()): init'ed(return_value)
    //#test_vector(IncomingReferrer dequeue()): java.util.List:isEmpty(...)@177: {1}, {0}
            return (IncomingReferrer) this.referrerQueue.remove(0);
        }
        
        return null;
    //#ReferrerQueueManagerImpl.java:181: end of method: IncomingReferrer org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.dequeue()
    }
    
    
    /**
     * clean up.
     */
    public void shutdown() {
        
        if(this.workers != null && this.workers.size() > 0) {
    //#ReferrerQueueManagerImpl.java:190: method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.shutdown()
    //#input(void shutdown()): mLogger
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/WorkerThread.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ContinuousWorkerThread]
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/WorkerThread.__Descendant_Table[org/apache/roller/weblogger/business/runnable/WorkerThread]
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/WorkerThread.__Descendant_Table[others]
    //#input(void shutdown()): this
    //#input(void shutdown()): this.workers
    //#pre[3] (void shutdown()): init'ed(this.workers)
    //#pre[1] (void shutdown()): (soft) mLogger != null
    //#presumption(void shutdown()): java.util.Iterator:next(...).__Tag@197 in {org/apache/roller/weblogger/business/runnable/ContinuousWorkerThread, org/apache/roller/weblogger/business/runnable/WorkerThread}
    //#presumption(void shutdown()): java.util.Iterator:next(...)@197 != null
    //#test_vector(void shutdown()): this.workers: Addr_Set{null}, Inverse{null}
    //#test_vector(void shutdown()): java.util.Iterator:hasNext(...)@196: {0}, {1}
    //#test_vector(void shutdown()): java.util.List:size(...)@190: {-2_147_483_648..0}, {1..4_294_967_295}
            mLogger.info("stopping all ReferrerQueue worker threads");
    //#ReferrerQueueManagerImpl.java:191: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void shutdown()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
            
            // kill all of our threads
            WorkerThread worker = null;
    //#ReferrerQueueManagerImpl.java:194: Warning: unused assignment
    //#    unused assignment into worker
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void shutdown()
    //#    Attribs:  Uncertain
            Iterator it = this.workers.iterator();
            while(it.hasNext()) {
                worker = (WorkerThread) it.next();
                worker.interrupt();
    //#ReferrerQueueManagerImpl.java:198: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.runnable.WorkerThread:interrupt()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
    //#    method: void shutdown()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.runnable.WorkerThread:interrupt()
            }
        }
        
    }
    //#ReferrerQueueManagerImpl.java:202: end of method: void org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl.shutdown()
    
}
    //#ReferrerQueueManagerImpl.java:: end of class: org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl
