//# 1 errors, 822 messages
//#
/*
    //#IndexManagerImpl.java:1:1: class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#IndexManagerImpl.java:1:1: method: org.apache.roller.weblogger.business.search.IndexManagerImpl$1.org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init
    //#IndexManagerImpl.java:1:1: class: org.apache.roller.weblogger.business.search.IndexManagerImpl
 * 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.search;

import java.io.File;
import java.io.IOException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.*;
import org.apache.roller.weblogger.business.search.operations.AddEntryOperation;
import org.apache.roller.weblogger.business.search.operations.IndexOperation;
import org.apache.roller.weblogger.business.search.operations.ReIndexEntryOperation;
import org.apache.roller.weblogger.business.search.operations.RebuildWebsiteIndexOperation;
import org.apache.roller.weblogger.business.search.operations.RemoveEntryOperation;
import org.apache.roller.weblogger.business.search.operations.RemoveWebsiteIndexOperation;
import org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.Weblog;

import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
import EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock;
import org.apache.roller.weblogger.config.WebloggerConfig;
import org.apache.commons.lang.StringUtils;


/**
 * Lucene implementation of IndexManager. This is the central entry point 
 * into the Lucene searching API.
 * @author Mindaugas Idzelis (min@idzelis.com)
 * @author mraible (formatting and making indexDir configurable)
 */
@com.google.inject.Singleton
public class IndexManagerImpl implements IndexManager {
    //~ Static fields/initializers
    // =============================================
    
    private IndexReader reader;
    private final Weblogger roller;
    
    static Log mLogger = LogFactory.getFactory().getInstance(
    //#IndexManagerImpl.java:65: method: org.apache.roller.weblogger.business.search.IndexManagerImpl.org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init
    //#IndexManagerImpl.java:65: Warning: method not available
    //#    -- call on LogFactory org.apache.commons.logging.LogFactory:getFactory()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init
    //#    unanalyzed callee: LogFactory org.apache.commons.logging.LogFactory:getFactory()
    //#IndexManagerImpl.java:65: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getInstance(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getInstance(Class)
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.addEntryIndexOperation(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.addEntryReIndexOperation(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.createIndex(Lorg/apache/lucene/store/Directory;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.executeIndexOperationNow(Lorg/apache/roller/weblogger/business/search/operations/IndexOperation;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getIndexDirectory()Lorg/apache/lucene/store/Directory;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getReadWriteLock()LEDU/oswego/cs/dl/util/concurrent/ReadWriteLock;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getSaveIndexOperation()Lorg/apache/roller/weblogger/business/search/operations/IndexOperation;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getSharedIndexReader()Lorg/apache/lucene/index/IndexReader;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.indexExists()Z
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.initialize()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.isInconsistentAtStartup()Z
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.rebuildWebsiteIndex()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.rebuildWebsiteIndex(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.release()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.removeEntryIndexOperation(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.removeWebsiteIndex(Lorg/apache/roller/weblogger/pojos/Weblog;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.resetSharedReader()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.scheduleIndexOperation(Lorg/apache/roller/weblogger/business/search/operations/IndexOperation;)V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.shutdown()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): mLogger
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): org/apache/roller/weblogger/business/search/IndexManager.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#presumption(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): org.apache.commons.logging.LogFactory:getFactory(...)@65 != null
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): org/apache/roller/weblogger/business/search/IndexManager.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.addEntryIndexOperation(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V == &addEntryIndexOperation
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.addEntryReIndexOperation(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V == &addEntryReIndexOperation
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.createIndex(Lorg/apache/lucene/store/Directory;)V == &createIndex
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.executeIndexOperationNow(Lorg/apache/roller/weblogger/business/search/operations/IndexOperation;)V == &executeIndexOperationNow
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory; == &getFSDirectory
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getIndexDirectory()Lorg/apache/lucene/store/Directory; == &getIndexDirectory
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getReadWriteLock()LEDU/oswego/cs/dl/util/concurrent/ReadWriteLock; == &getReadWriteLock
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getSaveIndexOperation()Lorg/apache/roller/weblogger/business/search/operations/IndexOperation; == &getSaveIndexOperation
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.getSharedIndexReader()Lorg/apache/lucene/index/IndexReader; == &getSharedIndexReader
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.indexExists()Z == &indexExists
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.initialize()V == &initialize
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.isInconsistentAtStartup()Z == &isInconsistentAtStartup
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.rebuildWebsiteIndex()V == &rebuildWebsiteIndex
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.rebuildWebsiteIndex(Lorg/apache/roller/weblogger/pojos/Weblog;)V == &rebuildWebsiteIndex
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.release()V == &release
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.removeEntryIndexOperation(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V == &removeEntryIndexOperation
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.removeWebsiteIndex(Lorg/apache/roller/weblogger/pojos/Weblog;)V == &removeWebsiteIndex
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.resetSharedReader()V == &resetSharedReader
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.scheduleIndexOperation(Lorg/apache/roller/weblogger/business/search/operations/IndexOperation;)V == &scheduleIndexOperation
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): __Dispatch_Table.shutdown()V == &shutdown
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init): init'ed(mLogger)
    //#IndexManagerImpl.java:65: end of method: org.apache.roller.weblogger.business.search.IndexManagerImpl.org.apache.roller.weblogger.business.search.IndexManagerImpl__static_init
            IndexManagerImpl.class);
    
    //~ Instance fields
    // ========================================================
    
    private boolean searchEnabled = true;
    
    File indexConsistencyMarker;
    
    private boolean useRAMIndex = false;
    
    private RAMDirectory fRAMindex;
    
    private String indexDir = null;
    
    private boolean inconsistentAtStartup = false;
    
    private ReadWriteLock rwl = new WriterPreferenceReadWriteLock();
    //#IndexManagerImpl.java:83: Warning: method not available
    //#    -- call on void EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)
    //#    unanalyzed callee: void EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock()
    
    //~ Constructors
    // ===========================================================
    
    /**
     * Creates a new lucene index manager. This should only be created once.
     * Creating the index manager more than once will definately result in
     * errors. The preferred way of getting an index is through the
     * RollerContext.
     *
     * @param indexDir -
     *            the path to the index directory
     */
    @com.google.inject.Inject
    protected IndexManagerImpl(Weblogger roller) {
    //#IndexManagerImpl.java:98: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): ".index-inconsistent"._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "="._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "Fetching property ["._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "]"._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "index dir: "._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "search enabled: "._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "search.enabled"._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): "search.index.dir"._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): java.io.File.separator
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): java.io.File.separator._tainted
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): java.io.File.separatorChar
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): mLogger
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.config
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.log
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): roller
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): new File(IndexManagerImpl#5) num objects
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): new WriterPreferenceReadWriteLock(IndexManagerImpl#1) num objects
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.inconsistentAtStartup
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.indexConsistencyMarker
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.indexDir
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.roller
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.rwl
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.searchEnabled
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.useRAMIndex
    //#new obj(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): new File(IndexManagerImpl#5)
    //#new obj(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): new WriterPreferenceReadWriteLock(IndexManagerImpl#1)
    //#pre[1] (void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): mLogger != null
    //#pre[2] (void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.config != null
    //#pre[3] (void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): org/apache/roller/weblogger/config/WebloggerConfig.log != null
    //#presumption(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): init'ed(java.io.File.separator)
    //#presumption(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): init'ed(java.io.File.separatorChar)
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.inconsistentAtStartup == 0
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.useRAMIndex == 0
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.indexConsistencyMarker == &new File(IndexManagerImpl#5)
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.indexDir != null
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.roller == roller
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): init'ed(this.roller)
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): this.rwl == &new WriterPreferenceReadWriteLock(IndexManagerImpl#1)
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): init'ed(this.searchEnabled)
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): new File(IndexManagerImpl#5) num objects == 1
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): new WriterPreferenceReadWriteLock(IndexManagerImpl#1) num objects == 1
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): Effects-of-calling:java.util.Properties:getProperty
    //#test_vector(void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)): java.lang.String:equalsIgnoreCase(...)@103: {0}, {1}
        this.roller = roller;

        // check config to see if the internal search is enabled
        String enabled = WebloggerConfig.getProperty("search.enabled");
        if("false".equalsIgnoreCase(enabled))
            this.searchEnabled = false;
        
        // we also need to know what our index directory is
        // Note: system property expansion is now handled by WebloggerConfig
        String searchIndexDir = WebloggerConfig.getProperty("search.index.dir");
        this.indexDir = searchIndexDir.replace('/', File.separatorChar);
    //#IndexManagerImpl.java:109: ?null dereference
    //#    searchIndexDir != null
    //#    severity: MEDIUM
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)
    //#    basic block: bb_3
    //#    assertion: searchIndexDir != null
    //#    VN: getProperty(...)
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
        
        // a little debugging
        mLogger.info("search enabled: " + this.searchEnabled);
    //#IndexManagerImpl.java:112: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        mLogger.info("index dir: " + this.indexDir);
    //#IndexManagerImpl.java:113: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
        
        String test = indexDir + File.separator + ".index-inconsistent";
        indexConsistencyMarker = new File(test);
    }
    //#IndexManagerImpl.java:117: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.org.apache.roller.weblogger.business.search.IndexManagerImpl(Weblogger)
    
    
    /**
     * @inheritDoc
     */
    public void initialize() throws InitializationException {
        
        // only initialize the index if search is enabled
        if (this.searchEnabled) {
    //#IndexManagerImpl.java:126: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.initialize()
    //#IndexManagerImpl.java:126: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    suspicious precondition index: [9]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:126: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    suspicious precondition index: [11]
    //#    Attribs:  Soft
    //#input(void initialize()): "Starting scheduled index operation: "._tainted
    //#input(void initialize()): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(void initialize()): __Descendant_Table[others]
    //#input(void initialize()): __Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#input(void initialize()): __Dispatch_Table.isInconsistentAtStartup()Z
    //#input(void initialize()): __Dispatch_Table.rebuildWebsiteIndex()V
    //#input(void initialize()): mLogger
    //#input(void initialize()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void initialize()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void initialize()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void initialize()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void initialize()): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void initialize()): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void initialize()): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void initialize()): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void initialize()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void initialize()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void initialize()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void initialize()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void initialize()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void initialize()): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void initialize()): this
    //#input(void initialize()): this.__Tag
    //#input(void initialize()): this.inconsistentAtStartup
    //#input(void initialize()): this.indexConsistencyMarker
    //#input(void initialize()): this.indexDir
    //#input(void initialize()): this.roller
    //#input(void initialize()): this.roller.__Tag
    //#input(void initialize()): this.roller.threadManager
    //#input(void initialize()): this.roller.threadManager.__Tag
    //#input(void initialize()): this.roller.threadManager.serviceScheduler
    //#input(void initialize()): this.searchEnabled
    //#input(void initialize()): this.useRAMIndex
    //#output(void initialize()): new RAMDirectory(initialize#2) num objects
    //#output(void initialize()): new RAMDirectory(initialize#3) num objects
    //#output(void initialize()): this.fRAMindex
    //#output(void initialize()): this.inconsistentAtStartup
    //#new obj(void initialize()): new RAMDirectory(initialize#2)
    //#new obj(void initialize()): new RAMDirectory(initialize#3)
    //#pre[13] (void initialize()): init'ed(this.searchEnabled)
    //#pre[1] (void initialize()): (soft) mLogger != null
    //#pre[3] (void initialize()): (soft) init'ed(this.inconsistentAtStartup)
    //#pre[5] (void initialize()): (soft) this.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[6] (void initialize()): (soft) this.indexConsistencyMarker != null
    //#pre[7] (void initialize()): (soft) init'ed(this.indexDir)
    //#pre[8] (void initialize()): (soft) this.roller != null
    //#pre[9] (void initialize()): (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[10] (void initialize()): (soft) this.roller.threadManager != null
    //#pre[11] (void initialize()): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[12] (void initialize()): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[14] (void initialize()): (soft) init'ed(this.useRAMIndex)
    //#post(void initialize()): this.fRAMindex == One-of{old this.fRAMindex, &new RAMDirectory(initialize#2), &new RAMDirectory(initialize#3)}
    //#post(void initialize()): (soft) init'ed(this.inconsistentAtStartup)
    //#post(void initialize()): new RAMDirectory(initialize#2) num objects <= 1
    //#post(void initialize()): new RAMDirectory(initialize#3) num objects <= 1
    //#unanalyzed(void initialize()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void initialize()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void initialize()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.lucene.index.IndexReader:indexExists
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.lucene.analysis.standard.StandardAnalyzer
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.lucene.index.IndexWriter
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.lucene.index.IndexWriter:close
    //#unanalyzed(void initialize()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.lucene.store.FSDirectory:getDirectory
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void initialize()): Effects-of-calling:scheduleIndexOperation
    //#unanalyzed(void initialize()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void initialize()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void initialize()): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void initialize()): Effects-of-calling:getThreadManager
    //#unanalyzed(void initialize()): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void initialize()): Effects-of-calling:executeInBackground
    //#test_vector(void initialize()): this.searchEnabled: {0}, {1}
    //#test_vector(void initialize()): this.useRAMIndex: {0}, {1}
    //#test_vector(void initialize()): java.io.File:exists(...)@133: {0}, {1}
    //#test_vector(void initialize()): java.io.File:exists(...)@139: {1}, {0}
    //#test_vector(void initialize()): org.apache.lucene.index.IndexReader:indexExists(...)@288: {0}, {1}
            
            // 1. If inconsistency marker exists.
            //     Delete index
            // 2. if we're using RAM index
            //     load ram index wrapper around index
            //
            if (indexConsistencyMarker.exists()) {
                getFSDirectory(true);
                inconsistentAtStartup = true;
            } else {
                try {
                    File makeIndexDir = new File(indexDir);
                    if (!makeIndexDir.exists()) {
                        makeIndexDir.mkdirs();
                        inconsistentAtStartup = true;
                    }
                    indexConsistencyMarker.createNewFile();
                } catch (IOException e) {
                    mLogger.error(e);
    //#IndexManagerImpl.java:145: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
                }
            }
            
            if (indexExists()) {
                if (useRAMIndex) {
                    Directory filesystem = getFSDirectory(false);
                    
                    try {
                        fRAMindex = new RAMDirectory(filesystem);
    //#IndexManagerImpl.java:154: Warning: method not available
    //#    -- call on void org.apache.lucene.store.RAMDirectory(Directory)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    unanalyzed callee: void org.apache.lucene.store.RAMDirectory(Directory)
                    } catch (IOException e) {
                        mLogger.error("Error creating in-memory index", e);
    //#IndexManagerImpl.java:156: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
                    }
                }
            } else {
                if (useRAMIndex) {
                    fRAMindex = new RAMDirectory();
    //#IndexManagerImpl.java:161: Warning: method not available
    //#    -- call on void org.apache.lucene.store.RAMDirectory()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    unanalyzed callee: void org.apache.lucene.store.RAMDirectory()
                    createIndex(fRAMindex);
                } else {
                    createIndex(getFSDirectory(true));
                }
            }
            
            if (isInconsistentAtStartup()) {
                mLogger.info(
    //#IndexManagerImpl.java:169: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:info(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:info(Object)
                        "Index was inconsistent. Rebuilding index in the background...");
                try {
                    rebuildWebsiteIndex();
                } catch (WebloggerException e) {
                    mLogger.error("ERROR: scheduling re-index operation");
    //#IndexManagerImpl.java:174: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void initialize()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
                }
            }
        }
        
    }
    //#IndexManagerImpl.java:179: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.initialize()
    
    
    //~ Methods
    // ================================================================
    
    public void rebuildWebsiteIndex() throws WebloggerException {
        scheduleIndexOperation(
    //#IndexManagerImpl.java:186: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.rebuildWebsiteIndex()
    //#IndexManagerImpl.java:186: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void rebuildWebsiteIndex()
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:186: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void rebuildWebsiteIndex()
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(void rebuildWebsiteIndex()): "Starting scheduled index operation: "._tainted
    //#input(void rebuildWebsiteIndex()): mLogger
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void rebuildWebsiteIndex()): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void rebuildWebsiteIndex()): this
    //#input(void rebuildWebsiteIndex()): this.roller
    //#input(void rebuildWebsiteIndex()): this.roller.__Tag
    //#input(void rebuildWebsiteIndex()): this.roller.threadManager
    //#input(void rebuildWebsiteIndex()): this.roller.threadManager.__Tag
    //#input(void rebuildWebsiteIndex()): this.roller.threadManager.serviceScheduler
    //#input(void rebuildWebsiteIndex()): this.searchEnabled
    //#pre[1] (void rebuildWebsiteIndex()): (soft) mLogger != null
    //#pre[3] (void rebuildWebsiteIndex()): (soft) this.roller != null
    //#pre[4] (void rebuildWebsiteIndex()): (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[5] (void rebuildWebsiteIndex()): (soft) this.roller.threadManager != null
    //#pre[6] (void rebuildWebsiteIndex()): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[7] (void rebuildWebsiteIndex()): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[8] (void rebuildWebsiteIndex()): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:getThreadManager
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void rebuildWebsiteIndex()): Effects-of-calling:executeInBackground
                new RebuildWebsiteIndexOperation(roller, this, null));
    }
    //#IndexManagerImpl.java:188: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.rebuildWebsiteIndex()
    
    public void rebuildWebsiteIndex(Weblog website) throws WebloggerException {
        scheduleIndexOperation(
    //#IndexManagerImpl.java:191: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.rebuildWebsiteIndex(Weblog)
    //#IndexManagerImpl.java:191: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void rebuildWebsiteIndex(Weblog)
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:191: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void rebuildWebsiteIndex(Weblog)
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(void rebuildWebsiteIndex(Weblog)): "Starting scheduled index operation: "._tainted
    //#input(void rebuildWebsiteIndex(Weblog)): mLogger
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void rebuildWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void rebuildWebsiteIndex(Weblog)): this
    //#input(void rebuildWebsiteIndex(Weblog)): this.roller
    //#input(void rebuildWebsiteIndex(Weblog)): this.roller.__Tag
    //#input(void rebuildWebsiteIndex(Weblog)): this.roller.threadManager
    //#input(void rebuildWebsiteIndex(Weblog)): this.roller.threadManager.__Tag
    //#input(void rebuildWebsiteIndex(Weblog)): this.roller.threadManager.serviceScheduler
    //#input(void rebuildWebsiteIndex(Weblog)): this.searchEnabled
    //#input(void rebuildWebsiteIndex(Weblog)): website
    //#pre[1] (void rebuildWebsiteIndex(Weblog)): (soft) mLogger != null
    //#pre[3] (void rebuildWebsiteIndex(Weblog)): (soft) this.roller != null
    //#pre[4] (void rebuildWebsiteIndex(Weblog)): (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[5] (void rebuildWebsiteIndex(Weblog)): (soft) this.roller.threadManager != null
    //#pre[6] (void rebuildWebsiteIndex(Weblog)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[7] (void rebuildWebsiteIndex(Weblog)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[8] (void rebuildWebsiteIndex(Weblog)): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:getThreadManager
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void rebuildWebsiteIndex(Weblog)): Effects-of-calling:executeInBackground
                new RebuildWebsiteIndexOperation(roller, this, website));
    }
    //#IndexManagerImpl.java:193: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.rebuildWebsiteIndex(Weblog)
    
    public void removeWebsiteIndex(Weblog website) throws WebloggerException {
        scheduleIndexOperation(
    //#IndexManagerImpl.java:196: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.removeWebsiteIndex(Weblog)
    //#IndexManagerImpl.java:196: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void removeWebsiteIndex(Weblog)
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:196: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void removeWebsiteIndex(Weblog)
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(void removeWebsiteIndex(Weblog)): "Starting scheduled index operation: "._tainted
    //#input(void removeWebsiteIndex(Weblog)): mLogger
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void removeWebsiteIndex(Weblog)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void removeWebsiteIndex(Weblog)): this
    //#input(void removeWebsiteIndex(Weblog)): this.roller
    //#input(void removeWebsiteIndex(Weblog)): this.roller.__Tag
    //#input(void removeWebsiteIndex(Weblog)): this.roller.threadManager
    //#input(void removeWebsiteIndex(Weblog)): this.roller.threadManager.__Tag
    //#input(void removeWebsiteIndex(Weblog)): this.roller.threadManager.serviceScheduler
    //#input(void removeWebsiteIndex(Weblog)): this.searchEnabled
    //#input(void removeWebsiteIndex(Weblog)): website
    //#pre[1] (void removeWebsiteIndex(Weblog)): (soft) mLogger != null
    //#pre[3] (void removeWebsiteIndex(Weblog)): (soft) this.roller != null
    //#pre[4] (void removeWebsiteIndex(Weblog)): (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[5] (void removeWebsiteIndex(Weblog)): (soft) this.roller.threadManager != null
    //#pre[6] (void removeWebsiteIndex(Weblog)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[7] (void removeWebsiteIndex(Weblog)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[8] (void removeWebsiteIndex(Weblog)): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:getThreadManager
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void removeWebsiteIndex(Weblog)): Effects-of-calling:executeInBackground
                new RemoveWebsiteIndexOperation(roller, this, website));
    }
    //#IndexManagerImpl.java:198: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.removeWebsiteIndex(Weblog)
    
    public void addEntryIndexOperation(WeblogEntry entry) throws WebloggerException {
        AddEntryOperation addEntry = new AddEntryOperation(roller, this, entry);
    //#IndexManagerImpl.java:201: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.addEntryIndexOperation(WeblogEntry)
    //#IndexManagerImpl.java:201: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void addEntryIndexOperation(WeblogEntry)
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:201: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void addEntryIndexOperation(WeblogEntry)
    //#    suspicious precondition index: [7]
    //#    Attribs:  Soft
    //#input(void addEntryIndexOperation(WeblogEntry)): "Starting scheduled index operation: "._tainted
    //#input(void addEntryIndexOperation(WeblogEntry)): entry
    //#input(void addEntryIndexOperation(WeblogEntry)): mLogger
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void addEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void addEntryIndexOperation(WeblogEntry)): this
    //#input(void addEntryIndexOperation(WeblogEntry)): this.roller
    //#input(void addEntryIndexOperation(WeblogEntry)): this.roller.__Tag
    //#input(void addEntryIndexOperation(WeblogEntry)): this.roller.threadManager
    //#input(void addEntryIndexOperation(WeblogEntry)): this.roller.threadManager.__Tag
    //#input(void addEntryIndexOperation(WeblogEntry)): this.roller.threadManager.serviceScheduler
    //#input(void addEntryIndexOperation(WeblogEntry)): this.searchEnabled
    //#pre[2] (void addEntryIndexOperation(WeblogEntry)): (soft) mLogger != null
    //#pre[4] (void addEntryIndexOperation(WeblogEntry)): (soft) this.roller != null
    //#pre[5] (void addEntryIndexOperation(WeblogEntry)): (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[6] (void addEntryIndexOperation(WeblogEntry)): (soft) this.roller.threadManager != null
    //#pre[7] (void addEntryIndexOperation(WeblogEntry)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[8] (void addEntryIndexOperation(WeblogEntry)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[9] (void addEntryIndexOperation(WeblogEntry)): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:getThreadManager
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void addEntryIndexOperation(WeblogEntry)): Effects-of-calling:executeInBackground
        scheduleIndexOperation(addEntry);
    }
    //#IndexManagerImpl.java:203: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.addEntryIndexOperation(WeblogEntry)
    
    public void addEntryReIndexOperation(WeblogEntry entry) throws WebloggerException {
        ReIndexEntryOperation reindex = new ReIndexEntryOperation(roller, this, entry);
    //#IndexManagerImpl.java:206: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.addEntryReIndexOperation(WeblogEntry)
    //#IndexManagerImpl.java:206: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void addEntryReIndexOperation(WeblogEntry)
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:206: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void addEntryReIndexOperation(WeblogEntry)
    //#    suspicious precondition index: [7]
    //#    Attribs:  Soft
    //#input(void addEntryReIndexOperation(WeblogEntry)): "Starting scheduled index operation: "._tainted
    //#input(void addEntryReIndexOperation(WeblogEntry)): entry
    //#input(void addEntryReIndexOperation(WeblogEntry)): mLogger
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void addEntryReIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void addEntryReIndexOperation(WeblogEntry)): this
    //#input(void addEntryReIndexOperation(WeblogEntry)): this.roller
    //#input(void addEntryReIndexOperation(WeblogEntry)): this.roller.__Tag
    //#input(void addEntryReIndexOperation(WeblogEntry)): this.roller.threadManager
    //#input(void addEntryReIndexOperation(WeblogEntry)): this.roller.threadManager.__Tag
    //#input(void addEntryReIndexOperation(WeblogEntry)): this.roller.threadManager.serviceScheduler
    //#input(void addEntryReIndexOperation(WeblogEntry)): this.searchEnabled
    //#pre[2] (void addEntryReIndexOperation(WeblogEntry)): (soft) mLogger != null
    //#pre[4] (void addEntryReIndexOperation(WeblogEntry)): (soft) this.roller != null
    //#pre[5] (void addEntryReIndexOperation(WeblogEntry)): (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[6] (void addEntryReIndexOperation(WeblogEntry)): (soft) this.roller.threadManager != null
    //#pre[7] (void addEntryReIndexOperation(WeblogEntry)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[8] (void addEntryReIndexOperation(WeblogEntry)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[9] (void addEntryReIndexOperation(WeblogEntry)): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:getThreadManager
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void addEntryReIndexOperation(WeblogEntry)): Effects-of-calling:executeInBackground
        scheduleIndexOperation(reindex);
    }
    //#IndexManagerImpl.java:208: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.addEntryReIndexOperation(WeblogEntry)
    
    public void removeEntryIndexOperation(WeblogEntry entry) throws WebloggerException {
        RemoveEntryOperation removeOp = new RemoveEntryOperation(roller, this, entry);
    //#IndexManagerImpl.java:211: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.removeEntryIndexOperation(WeblogEntry)
    //#IndexManagerImpl.java:211: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void removeEntryIndexOperation(WeblogEntry)
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:211: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void removeEntryIndexOperation(WeblogEntry)
    //#    suspicious precondition index: [8]
    //#    Attribs:  Soft
    //#input(void removeEntryIndexOperation(WeblogEntry)): "Executing index operation now: "._tainted
    //#input(void removeEntryIndexOperation(WeblogEntry)): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(void removeEntryIndexOperation(WeblogEntry)): __Descendant_Table[others]
    //#input(void removeEntryIndexOperation(WeblogEntry)): __Dispatch_Table.executeIndexOperationNow(Lorg/apache/roller/weblogger/business/search/operations/IndexOperation;)V
    //#input(void removeEntryIndexOperation(WeblogEntry)): entry
    //#input(void removeEntryIndexOperation(WeblogEntry)): mLogger
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInForeground(Ljava/lang/Runnable;)V
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInForeground(Ljava/lang/Runnable;)V
    //#input(void removeEntryIndexOperation(WeblogEntry)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInForeground(Ljava/lang/Runnable;)V
    //#input(void removeEntryIndexOperation(WeblogEntry)): this
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.__Tag
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.roller
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.roller.__Tag
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.roller.threadManager
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.roller.threadManager.__Tag
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.roller.threadManager.serviceScheduler
    //#input(void removeEntryIndexOperation(WeblogEntry)): this.searchEnabled
    //#pre[4] (void removeEntryIndexOperation(WeblogEntry)): this.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[2] (void removeEntryIndexOperation(WeblogEntry)): (soft) mLogger != null
    //#pre[5] (void removeEntryIndexOperation(WeblogEntry)): (soft) this.roller != null
    //#pre[6] (void removeEntryIndexOperation(WeblogEntry)): (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[7] (void removeEntryIndexOperation(WeblogEntry)): (soft) this.roller.threadManager != null
    //#pre[8] (void removeEntryIndexOperation(WeblogEntry)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[9] (void removeEntryIndexOperation(WeblogEntry)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[10] (void removeEntryIndexOperation(WeblogEntry)): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.WriteToIndexOperation
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:getThreadManager
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.util.concurrent.Future:isDone
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:java.lang.Thread:sleep
    //#unanalyzed(void removeEntryIndexOperation(WeblogEntry)): Effects-of-calling:executeInForeground
        executeIndexOperationNow(removeOp);
    }
    //#IndexManagerImpl.java:213: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.removeEntryIndexOperation(WeblogEntry)
    
    public ReadWriteLock getReadWriteLock() {
        return rwl;
    //#IndexManagerImpl.java:216: method: ReadWriteLock org.apache.roller.weblogger.business.search.IndexManagerImpl.getReadWriteLock()
    //#input(ReadWriteLock getReadWriteLock()): this
    //#input(ReadWriteLock getReadWriteLock()): this.rwl
    //#output(ReadWriteLock getReadWriteLock()): return_value
    //#pre[2] (ReadWriteLock getReadWriteLock()): init'ed(this.rwl)
    //#post(ReadWriteLock getReadWriteLock()): return_value == this.rwl
    //#post(ReadWriteLock getReadWriteLock()): init'ed(return_value)
    //#IndexManagerImpl.java:216: end of method: ReadWriteLock org.apache.roller.weblogger.business.search.IndexManagerImpl.getReadWriteLock()
    }
    
    public boolean isInconsistentAtStartup() {
        return inconsistentAtStartup;
    //#IndexManagerImpl.java:220: method: bool org.apache.roller.weblogger.business.search.IndexManagerImpl.isInconsistentAtStartup()
    //#input(bool isInconsistentAtStartup()): this
    //#input(bool isInconsistentAtStartup()): this.inconsistentAtStartup
    //#output(bool isInconsistentAtStartup()): return_value
    //#pre[2] (bool isInconsistentAtStartup()): init'ed(this.inconsistentAtStartup)
    //#post(bool isInconsistentAtStartup()): return_value == this.inconsistentAtStartup
    //#post(bool isInconsistentAtStartup()): init'ed(return_value)
    //#IndexManagerImpl.java:220: end of method: bool org.apache.roller.weblogger.business.search.IndexManagerImpl.isInconsistentAtStartup()
    }
    
    /**
     * This is the analyzer that will be used to tokenize comment text.
     *
     * @return Analyzer to be used in manipulating the database.
     */
    public static final Analyzer getAnalyzer() {
        return new StandardAnalyzer();
    //#IndexManagerImpl.java:229: method: Analyzer org.apache.roller.weblogger.business.search.IndexManagerImpl.getAnalyzer()
    //#IndexManagerImpl.java:229: Warning: method not available
    //#    -- call on void org.apache.lucene.analysis.standard.StandardAnalyzer()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: Analyzer getAnalyzer()
    //#    unanalyzed callee: void org.apache.lucene.analysis.standard.StandardAnalyzer()
    //#output(Analyzer getAnalyzer()): new StandardAnalyzer(getAnalyzer#1) num objects
    //#output(Analyzer getAnalyzer()): return_value
    //#new obj(Analyzer getAnalyzer()): new StandardAnalyzer(getAnalyzer#1)
    //#post(Analyzer getAnalyzer()): return_value == &new StandardAnalyzer(getAnalyzer#1)
    //#post(Analyzer getAnalyzer()): new StandardAnalyzer(getAnalyzer#1) num objects == 1
    //#IndexManagerImpl.java:229: end of method: Analyzer org.apache.roller.weblogger.business.search.IndexManagerImpl.getAnalyzer()
    }
    
    private void scheduleIndexOperation(final IndexOperation op) {
        try {
            // only if search is enabled
            if(this.searchEnabled) {
    //#IndexManagerImpl.java:235: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.scheduleIndexOperation(IndexOperation)
    //#IndexManagerImpl.java:235: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void scheduleIndexOperation(IndexOperation)
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:235: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void scheduleIndexOperation(IndexOperation)
    //#    suspicious precondition index: [7]
    //#    Attribs:  Soft
    //#input(void scheduleIndexOperation(IndexOperation)): "Starting scheduled index operation: "._tainted
    //#input(void scheduleIndexOperation(IndexOperation)): mLogger
    //#input(void scheduleIndexOperation(IndexOperation)): op
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void scheduleIndexOperation(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void scheduleIndexOperation(IndexOperation)): this
    //#input(void scheduleIndexOperation(IndexOperation)): this.roller
    //#input(void scheduleIndexOperation(IndexOperation)): this.roller.__Tag
    //#input(void scheduleIndexOperation(IndexOperation)): this.roller.threadManager
    //#input(void scheduleIndexOperation(IndexOperation)): this.roller.threadManager.__Tag
    //#input(void scheduleIndexOperation(IndexOperation)): this.roller.threadManager.serviceScheduler
    //#input(void scheduleIndexOperation(IndexOperation)): this.searchEnabled
    //#pre[1] (void scheduleIndexOperation(IndexOperation)): (soft) mLogger != null
    //#pre[2] (void scheduleIndexOperation(IndexOperation)): (soft) op != null
    //#pre[4] (void scheduleIndexOperation(IndexOperation)): (soft) this.roller != null
    //#pre[5] (void scheduleIndexOperation(IndexOperation)): (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[6] (void scheduleIndexOperation(IndexOperation)): (soft) this.roller.threadManager != null
    //#pre[7] (void scheduleIndexOperation(IndexOperation)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[8] (void scheduleIndexOperation(IndexOperation)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[9] (void scheduleIndexOperation(IndexOperation)): (soft) init'ed(this.searchEnabled)
    //#presumption(void scheduleIndexOperation(IndexOperation)): java.lang.Object:getClass(...)@236 != null
    //#unanalyzed(void scheduleIndexOperation(IndexOperation)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#test_vector(void scheduleIndexOperation(IndexOperation)): this.searchEnabled: {0}, {1}
                mLogger.debug("Starting scheduled index operation: "+op.getClass().getName());
    //#IndexManagerImpl.java:236: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void scheduleIndexOperation(IndexOperation)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                roller.getThreadManager().executeInBackground(op);
            }
        } catch (InterruptedException e) {
            mLogger.error("Error executing operation", e);
    //#IndexManagerImpl.java:240: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void scheduleIndexOperation(IndexOperation)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        }
    }
    //#IndexManagerImpl.java:242: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.scheduleIndexOperation(IndexOperation)
    
    /**
     * @param search
     */
    public void executeIndexOperationNow(final IndexOperation op) {
        try {
            // only if search is enabled
            if(this.searchEnabled) {
    //#IndexManagerImpl.java:250: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.executeIndexOperationNow(IndexOperation)
    //#IndexManagerImpl.java:250: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void executeIndexOperationNow(IndexOperation)
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:250: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void executeIndexOperationNow(IndexOperation)
    //#    suspicious precondition index: [7]
    //#    Attribs:  Soft
    //#input(void executeIndexOperationNow(IndexOperation)): "Executing index operation now: "._tainted
    //#input(void executeIndexOperationNow(IndexOperation)): mLogger
    //#input(void executeIndexOperationNow(IndexOperation)): op
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInForeground(Ljava/lang/Runnable;)V
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInForeground(Ljava/lang/Runnable;)V
    //#input(void executeIndexOperationNow(IndexOperation)): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInForeground(Ljava/lang/Runnable;)V
    //#input(void executeIndexOperationNow(IndexOperation)): this
    //#input(void executeIndexOperationNow(IndexOperation)): this.roller
    //#input(void executeIndexOperationNow(IndexOperation)): this.roller.__Tag
    //#input(void executeIndexOperationNow(IndexOperation)): this.roller.threadManager
    //#input(void executeIndexOperationNow(IndexOperation)): this.roller.threadManager.__Tag
    //#input(void executeIndexOperationNow(IndexOperation)): this.roller.threadManager.serviceScheduler
    //#input(void executeIndexOperationNow(IndexOperation)): this.searchEnabled
    //#pre[1] (void executeIndexOperationNow(IndexOperation)): (soft) mLogger != null
    //#pre[2] (void executeIndexOperationNow(IndexOperation)): (soft) op != null
    //#pre[4] (void executeIndexOperationNow(IndexOperation)): (soft) this.roller != null
    //#pre[5] (void executeIndexOperationNow(IndexOperation)): (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[6] (void executeIndexOperationNow(IndexOperation)): (soft) this.roller.threadManager != null
    //#pre[7] (void executeIndexOperationNow(IndexOperation)): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[8] (void executeIndexOperationNow(IndexOperation)): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[9] (void executeIndexOperationNow(IndexOperation)): (soft) init'ed(this.searchEnabled)
    //#presumption(void executeIndexOperationNow(IndexOperation)): java.lang.Object:getClass(...)@251 != null
    //#unanalyzed(void executeIndexOperationNow(IndexOperation)): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void executeIndexOperationNow(IndexOperation)): Effects-of-calling:java.util.concurrent.Future:isDone
    //#unanalyzed(void executeIndexOperationNow(IndexOperation)): Effects-of-calling:java.lang.Thread:sleep
    //#test_vector(void executeIndexOperationNow(IndexOperation)): this.searchEnabled: {0}, {1}
                mLogger.debug("Executing index operation now: "+op.getClass().getName());
    //#IndexManagerImpl.java:251: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void executeIndexOperationNow(IndexOperation)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                roller.getThreadManager().executeInForeground(op);
            }
        } catch (InterruptedException e) {
            mLogger.error("Error executing operation", e);
    //#IndexManagerImpl.java:255: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void executeIndexOperationNow(IndexOperation)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        }
    }
    //#IndexManagerImpl.java:257: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.executeIndexOperationNow(IndexOperation)
    
    public synchronized void resetSharedReader() {
        reader = null;
    //#IndexManagerImpl.java:260: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.resetSharedReader()
    //#input(void resetSharedReader()): this
    //#output(void resetSharedReader()): this.reader
    //#post(void resetSharedReader()): this.reader == null
    }
    //#IndexManagerImpl.java:261: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.resetSharedReader()
    public synchronized IndexReader getSharedIndexReader() {
        if (reader == null) {
    //#IndexManagerImpl.java:263: method: IndexReader org.apache.roller.weblogger.business.search.IndexManagerImpl.getSharedIndexReader()
    //#input(IndexReader getSharedIndexReader()): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(IndexReader getSharedIndexReader()): __Descendant_Table[others]
    //#input(IndexReader getSharedIndexReader()): __Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#input(IndexReader getSharedIndexReader()): __Dispatch_Table.getIndexDirectory()Lorg/apache/lucene/store/Directory;
    //#input(IndexReader getSharedIndexReader()): mLogger
    //#input(IndexReader getSharedIndexReader()): this
    //#input(IndexReader getSharedIndexReader()): this.__Tag
    //#input(IndexReader getSharedIndexReader()): this.fRAMindex
    //#input(IndexReader getSharedIndexReader()): this.indexDir
    //#input(IndexReader getSharedIndexReader()): this.reader
    //#input(IndexReader getSharedIndexReader()): this.useRAMIndex
    //#output(IndexReader getSharedIndexReader()): return_value
    //#output(IndexReader getSharedIndexReader()): this.reader
    //#pre[2] (IndexReader getSharedIndexReader()): init'ed(this.reader)
    //#pre[1] (IndexReader getSharedIndexReader()): (soft) mLogger != null
    //#pre[4] (IndexReader getSharedIndexReader()): (soft) this.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[5] (IndexReader getSharedIndexReader()): (soft) init'ed(this.fRAMindex)
    //#pre[6] (IndexReader getSharedIndexReader()): (soft) init'ed(this.indexDir)
    //#pre[7] (IndexReader getSharedIndexReader()): (soft) init'ed(this.useRAMIndex)
    //#post(IndexReader getSharedIndexReader()): init'ed(return_value)
    //#post(IndexReader getSharedIndexReader()): this.reader == return_value
    //#unanalyzed(IndexReader getSharedIndexReader()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(IndexReader getSharedIndexReader()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(IndexReader getSharedIndexReader()): Effects-of-calling:org.apache.lucene.store.FSDirectory:getDirectory
    //#test_vector(IndexReader getSharedIndexReader()): this.reader: Inverse{null}, Addr_Set{null}
            try {
                reader = IndexReader.open(getIndexDirectory());
    //#IndexManagerImpl.java:265: Warning: method not available
    //#    -- call on IndexReader org.apache.lucene.index.IndexReader:open(Directory)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: IndexReader getSharedIndexReader()
    //#    unanalyzed callee: IndexReader org.apache.lucene.index.IndexReader:open(Directory)
            } catch (IOException e) {
            }
        }
        return reader;
    //#IndexManagerImpl.java:269: end of method: IndexReader org.apache.roller.weblogger.business.search.IndexManagerImpl.getSharedIndexReader()
    }
    
    /**
     * Get the directory that is used by the lucene index. This method will
     * return null if there is no index at the directory location. If we are
     * using a RAM index, the directory will be a ram directory.
     *
     * @return Directory The directory containing the index, or null if error.
     */
    public Directory getIndexDirectory() {
        if (useRAMIndex) {
    //#IndexManagerImpl.java:280: method: Directory org.apache.roller.weblogger.business.search.IndexManagerImpl.getIndexDirectory()
    //#input(Directory getIndexDirectory()): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(Directory getIndexDirectory()): __Descendant_Table[others]
    //#input(Directory getIndexDirectory()): __Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#input(Directory getIndexDirectory()): mLogger
    //#input(Directory getIndexDirectory()): this
    //#input(Directory getIndexDirectory()): this.__Tag
    //#input(Directory getIndexDirectory()): this.fRAMindex
    //#input(Directory getIndexDirectory()): this.indexDir
    //#input(Directory getIndexDirectory()): this.useRAMIndex
    //#output(Directory getIndexDirectory()): return_value
    //#pre[6] (Directory getIndexDirectory()): init'ed(this.useRAMIndex)
    //#pre[1] (Directory getIndexDirectory()): (soft) mLogger != null
    //#pre[3] (Directory getIndexDirectory()): (soft) this.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[4] (Directory getIndexDirectory()): (soft) init'ed(this.fRAMindex)
    //#pre[5] (Directory getIndexDirectory()): (soft) init'ed(this.indexDir)
    //#post(Directory getIndexDirectory()): init'ed(return_value)
    //#unanalyzed(Directory getIndexDirectory()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(Directory getIndexDirectory()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(Directory getIndexDirectory()): Effects-of-calling:org.apache.lucene.store.FSDirectory:getDirectory
    //#test_vector(Directory getIndexDirectory()): this.useRAMIndex: {0}, {1}
            return fRAMindex;
        } else {
            return getFSDirectory(false);
    //#IndexManagerImpl.java:283: end of method: Directory org.apache.roller.weblogger.business.search.IndexManagerImpl.getIndexDirectory()
        }
    }
    
    private boolean indexExists() {
        return IndexReader.indexExists(indexDir);
    //#IndexManagerImpl.java:288: method: bool org.apache.roller.weblogger.business.search.IndexManagerImpl.indexExists()
    //#IndexManagerImpl.java:288: Warning: method not available
    //#    -- call on bool org.apache.lucene.index.IndexReader:indexExists(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: bool indexExists()
    //#    unanalyzed callee: bool org.apache.lucene.index.IndexReader:indexExists(String)
    //#input(bool indexExists()): this
    //#input(bool indexExists()): this.indexDir
    //#output(bool indexExists()): return_value
    //#pre[2] (bool indexExists()): init'ed(this.indexDir)
    //#post(bool indexExists()): init'ed(return_value)
    //#IndexManagerImpl.java:288: end of method: bool org.apache.roller.weblogger.business.search.IndexManagerImpl.indexExists()
    }
    
    Directory getFSDirectory(boolean delete) {
        Directory directory = null;
    //#IndexManagerImpl.java:292: method: Directory org.apache.roller.weblogger.business.search.IndexManagerImpl.getFSDirectory(bool)
    //#input(Directory getFSDirectory(bool)): delete
    //#input(Directory getFSDirectory(bool)): mLogger
    //#input(Directory getFSDirectory(bool)): this
    //#input(Directory getFSDirectory(bool)): this.indexDir
    //#output(Directory getFSDirectory(bool)): return_value
    //#pre[2] (Directory getFSDirectory(bool)): (soft) mLogger != null
    //#pre[4] (Directory getFSDirectory(bool)): (soft) init'ed(this.indexDir)
    //#post(Directory getFSDirectory(bool)): init'ed(return_value)
        
        try {
            directory = FSDirectory.getDirectory(indexDir, delete);
    //#IndexManagerImpl.java:295: Warning: method not available
    //#    -- call on FSDirectory org.apache.lucene.store.FSDirectory:getDirectory(String, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: Directory getFSDirectory(bool)
    //#    unanalyzed callee: FSDirectory org.apache.lucene.store.FSDirectory:getDirectory(String, bool)
        } catch (IOException e) {
            mLogger.error("Problem accessing index directory", e);
    //#IndexManagerImpl.java:297: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: Directory getFSDirectory(bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        }
        
        return directory;
    //#IndexManagerImpl.java:300: end of method: Directory org.apache.roller.weblogger.business.search.IndexManagerImpl.getFSDirectory(bool)
    }
    
    private void createIndex(Directory dir) {
        IndexWriter writer = null;
    //#IndexManagerImpl.java:304: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.createIndex(Directory)
    //#input(void createIndex(Directory)): dir
    //#input(void createIndex(Directory)): mLogger
    //#pre[2] (void createIndex(Directory)): (soft) mLogger != null
    //#unanalyzed(void createIndex(Directory)): Effects-of-calling:org.apache.lucene.analysis.standard.StandardAnalyzer
        
        try {
            writer = new IndexWriter(dir, IndexManagerImpl.getAnalyzer(), true);
    //#IndexManagerImpl.java:307: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter(Directory, Analyzer, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void createIndex(Directory)
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter(Directory, Analyzer, bool)
        } catch (IOException e) {
            mLogger.error("Error creating index", e);
    //#IndexManagerImpl.java:309: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void createIndex(Directory)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        } finally {
            try {
                if (writer != null) {
                    writer.close();
    //#IndexManagerImpl.java:313: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter:close()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void createIndex(Directory)
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter:close()
                }
            } catch (IOException e) {
            }
        }
    }
    //#IndexManagerImpl.java:318: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.createIndex(Directory)
    
    private IndexOperation getSaveIndexOperation() {
        return new WriteToIndexOperation(this) {
    //#IndexManagerImpl.java:321: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl$1.org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): Param_1
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): this
    //#input(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): x0
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): this.manager
    //#output(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): this.this$0
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): this.manager == x0
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): init'ed(this.manager)
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): this.this$0 == Param_1
    //#post(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): init'ed(this.this$0)
    //#unanalyzed(void org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#IndexManagerImpl.java:321: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl$1.org.apache.roller.weblogger.business.search.IndexManagerImpl$1(IndexManagerImpl, IndexManagerImpl)
    //#IndexManagerImpl.java:321: method: IndexOperation org.apache.roller.weblogger.business.search.IndexManagerImpl.getSaveIndexOperation()
    //#input(IndexOperation getSaveIndexOperation()): this
    //#output(IndexOperation getSaveIndexOperation()): new IndexManagerImpl$1(getSaveIndexOperation#1) num objects
    //#output(IndexOperation getSaveIndexOperation()): return_value.__Tag
    //#output(IndexOperation getSaveIndexOperation()): return_value.manager
    //#output(IndexOperation getSaveIndexOperation()): return_value.this$0
    //#output(IndexOperation getSaveIndexOperation()): return_value
    //#new obj(IndexOperation getSaveIndexOperation()): new IndexManagerImpl$1(getSaveIndexOperation#1)
    //#post(IndexOperation getSaveIndexOperation()): return_value == &new IndexManagerImpl$1(getSaveIndexOperation#1)
    //#post(IndexOperation getSaveIndexOperation()): new IndexManagerImpl$1(getSaveIndexOperation#1) num objects == 1
    //#post(IndexOperation getSaveIndexOperation()): return_value.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl$1
    //#post(IndexOperation getSaveIndexOperation()): return_value.manager == this
    //#post(IndexOperation getSaveIndexOperation()): return_value.manager != null
    //#post(IndexOperation getSaveIndexOperation()): return_value.this$0 == return_value.manager
    //#unanalyzed(IndexOperation getSaveIndexOperation()): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#IndexManagerImpl.java:321: end of method: IndexOperation org.apache.roller.weblogger.business.search.IndexManagerImpl.getSaveIndexOperation()
            public void doRun() {
                Directory dir = getIndexDirectory();
    //#IndexManagerImpl.java:323: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl$1.doRun()
    //#input(void doRun()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(void doRun()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Descendant_Table[others]
    //#input(void doRun()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#input(void doRun()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Dispatch_Table.getIndexDirectory()Lorg/apache/lucene/store/Directory;
    //#input(void doRun()): org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger
    //#input(void doRun()): this
    //#input(void doRun()): this.this$0
    //#input(void doRun()): this.this$0.__Tag
    //#input(void doRun()): this.this$0.fRAMindex
    //#input(void doRun()): this.this$0.indexConsistencyMarker
    //#input(void doRun()): this.this$0.indexDir
    //#input(void doRun()): this.this$0.useRAMIndex
    //#pre[3] (void doRun()): this.this$0 != null
    //#pre[4] (void doRun()): this.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[8] (void doRun()): init'ed(this.useRAMIndex)
    //#pre[1] (void doRun()): (soft) org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger != null
    //#pre[5] (void doRun()): (soft) init'ed(this.fRAMindex)
    //#pre[6] (void doRun()): (soft) this.indexConsistencyMarker != null
    //#pre[7] (void doRun()): (soft) init'ed(this.indexDir)
    //#unanalyzed(void doRun()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doRun()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void doRun()): Effects-of-calling:org.apache.lucene.store.FSDirectory:getDirectory
    //#unanalyzed(void doRun()): Effects-of-calling:org.apache.lucene.analysis.standard.StandardAnalyzer
                Directory fsdir = getFSDirectory(true);
                
                IndexWriter writer = null;
                
                try {
                    writer = new IndexWriter(fsdir, IndexManagerImpl
    //#IndexManagerImpl.java:329: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter(Directory, Analyzer, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#    method: void doRun()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter(Directory, Analyzer, bool)
                            .getAnalyzer(), true);
                    
                    writer.addIndexes(new Directory[] { dir });
    //#IndexManagerImpl.java:332: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter:addIndexes(Directory[])
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#    method: void doRun()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter:addIndexes(Directory[])
                    indexConsistencyMarker.delete();
                } catch (IOException e) {
                    mLogger.error("Problem saving index to disk", e);
    //#IndexManagerImpl.java:335: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#    method: void doRun()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
                    
                    // Delete the directory, since there was a problem saving
                    // the RAM contents
                    getFSDirectory(true);
                } finally {
                    try {
                        if (writer != null)
                            writer.close();
    //#IndexManagerImpl.java:343: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter:close()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#    method: void doRun()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter:close()
                    } catch (IOException e1) {
                        mLogger.warn("Unable to close IndexWriter.");
    //#IndexManagerImpl.java:345: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:warn(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#    method: void doRun()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:warn(Object)
                    }
                }
                
            }
    //#IndexManagerImpl.java:349: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl$1.doRun()
        };
    }
    
    public void release() {
        // no-op
    }
    //#IndexManagerImpl.java:355: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.release()
    //#IndexManagerImpl.java:355: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.release()
    
    public void shutdown() {
        if (useRAMIndex) {
    //#IndexManagerImpl.java:358: method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.shutdown()
    //#IndexManagerImpl.java:358: Warning: suspicious precondition
    //#    the precondition for this.roller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void shutdown()
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#IndexManagerImpl.java:358: Warning: suspicious precondition
    //#    the precondition for this.roller.threadManager.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void shutdown()
    //#    suspicious precondition index: [8]
    //#    Attribs:  Soft
    //#input(void shutdown()): "Starting scheduled index operation: "._tainted
    //#input(void shutdown()): mLogger
    //#input(void shutdown()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/WebloggerImpl]
    //#input(void shutdown()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/Weblogger]
    //#input(void shutdown()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl]
    //#input(void shutdown()): org/apache/roller/weblogger/business/Weblogger.__Descendant_Table[others]
    //#input(void shutdown()): org/apache/roller/weblogger/business/Weblogger.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void shutdown()): org/apache/roller/weblogger/business/WebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void shutdown()): org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void shutdown()): org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.__Dispatch_Table.getThreadManager()Lorg/apache/roller/weblogger/business/runnable/ThreadManager;
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl]
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManagerImpl]
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[org/apache/roller/weblogger/business/runnable/ThreadManager]
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Descendant_Table[others]
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/ThreadManager.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void shutdown()): org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.__Dispatch_Table.executeInBackground(Ljava/lang/Runnable;)V
    //#input(void shutdown()): this
    //#input(void shutdown()): this.indexConsistencyMarker
    //#input(void shutdown()): this.reader
    //#input(void shutdown()): this.roller
    //#input(void shutdown()): this.roller.__Tag
    //#input(void shutdown()): this.roller.threadManager
    //#input(void shutdown()): this.roller.threadManager.__Tag
    //#input(void shutdown()): this.roller.threadManager.serviceScheduler
    //#input(void shutdown()): this.searchEnabled
    //#input(void shutdown()): this.useRAMIndex
    //#pre[11] (void shutdown()): init'ed(this.useRAMIndex)
    //#pre[1] (void shutdown()): (soft) mLogger != null
    //#pre[3] (void shutdown()): (soft) this.indexConsistencyMarker != null
    //#pre[4] (void shutdown()): (soft) init'ed(this.reader)
    //#pre[5] (void shutdown()): (soft) this.roller != null
    //#pre[6] (void shutdown()): (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[7] (void shutdown()): (soft) this.roller.threadManager != null
    //#pre[8] (void shutdown()): (soft) this.roller.threadManager.__Tag in {org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl, org/apache/roller/weblogger/business/runnable/ThreadManager, org/apache/roller/weblogger/business/runnable/ThreadManagerImpl}
    //#pre[9] (void shutdown()): (soft) this.roller.threadManager.serviceScheduler != null
    //#pre[10] (void shutdown()): (soft) init'ed(this.searchEnabled)
    //#unanalyzed(void shutdown()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void shutdown()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void shutdown()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void shutdown()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void shutdown()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void shutdown()): Effects-of-calling:org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#unanalyzed(void shutdown()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void shutdown()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void shutdown()): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(void shutdown()): Effects-of-calling:getThreadManager
    //#unanalyzed(void shutdown()): Effects-of-calling:java.util.concurrent.ExecutorService:submit
    //#unanalyzed(void shutdown()): Effects-of-calling:executeInBackground
    //#test_vector(void shutdown()): this.reader: Addr_Set{null}, Inverse{null}
    //#test_vector(void shutdown()): this.useRAMIndex: {0}, {1}
            scheduleIndexOperation(getSaveIndexOperation());
        } else {
            indexConsistencyMarker.delete();
        }
        
        try {
            if (reader != null)
                reader.close();
    //#IndexManagerImpl.java:366: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexReader:close()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.IndexManagerImpl
    //#    method: void shutdown()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexReader:close()
        } catch (IOException e) {
            // won't happen, since it was
        }
    }
    //#IndexManagerImpl.java:370: end of method: void org.apache.roller.weblogger.business.search.IndexManagerImpl.shutdown()

}
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1]
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.beginDeleting()Lorg/apache/lucene/index/IndexReader;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.beginWriting()Lorg/apache/lucene/index/IndexWriter;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.doRun()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.endDeleting()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.endWriting()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.getDocument(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)Lorg/apache/lucene/document/Document;
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.run()V
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): org/apache/roller/weblogger/business/search/operations/IndexOperation.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1]
    //#output(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1]
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): org/apache/roller/weblogger/business/search/operations/IndexOperation.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.beginDeleting()Lorg/apache/lucene/index/IndexReader; == &org/apache/roller/weblogger/business/search/operations/IndexOperation.beginDeleting
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.beginWriting()Lorg/apache/lucene/index/IndexWriter; == &org/apache/roller/weblogger/business/search/operations/IndexOperation.beginWriting
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.doRun()V == &doRun
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.endDeleting()V == &org/apache/roller/weblogger/business/search/operations/IndexOperation.endDeleting
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.endWriting()V == &org/apache/roller/weblogger/business/search/operations/IndexOperation.endWriting
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.getDocument(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)Lorg/apache/lucene/document/Document; == &org/apache/roller/weblogger/business/search/operations/IndexOperation.getDocument
    //#post(org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init): __Dispatch_Table.run()V == &org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.run
    //#IndexManagerImpl.java:: end of method: org.apache.roller.weblogger.business.search.IndexManagerImpl$1.org.apache.roller.weblogger.business.search.IndexManagerImpl$1__static_init
    //#IndexManagerImpl.java:: end of class: org.apache.roller.weblogger.business.search.IndexManagerImpl$1
    //#IndexManagerImpl.java:: end of class: org.apache.roller.weblogger.business.search.IndexManagerImpl
