//# 0 errors, 235 messages
//#
/*
    //#IndexOperation.java:1:1: class: org.apache.roller.weblogger.business.search.operations.IndexOperation
* 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.
*/
/* Created on Jul 16, 2003 */
package org.apache.roller.weblogger.business.search.operations;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.roller.weblogger.business.search.IndexManagerImpl;
import org.apache.roller.weblogger.business.search.FieldConstants;
import org.apache.roller.weblogger.pojos.WeblogEntryComment;
import org.apache.roller.weblogger.pojos.WeblogCategory;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.util.Utilities;
import org.apache.roller.weblogger.config.WebloggerConfig;

/**
 * This is the base class for all index operation. 
 * These operations include:<br>
 *    SearchOperation<br>
 *    AddWeblogOperation<br>
 *    RemoveWeblogOperation<br>
 *    RebuildUserIndexOperation
 *
 * @author Mindaugas Idzelis (min@idzelis.com)
 */
public abstract class IndexOperation implements Runnable {
    private static Log mLogger = LogFactory.getFactory().getInstance(IndexOperation.class);
    //#IndexOperation.java:50: method: org.apache.roller.weblogger.business.search.operations.IndexOperation.org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init
    //#IndexOperation.java:50: Warning: method not available
    //#    -- call on LogFactory org.apache.commons.logging.LogFactory:getFactory()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init
    //#    unanalyzed callee: LogFactory org.apache.commons.logging.LogFactory:getFactory()
    //#IndexOperation.java:50: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getInstance(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getInstance(Class)
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/IndexOperation]
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.beginDeleting()Lorg/apache/lucene/index/IndexReader;
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.beginWriting()Lorg/apache/lucene/index/IndexWriter;
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.doRun()V
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.endDeleting()V
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.endWriting()V
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.getDocument(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)Lorg/apache/lucene/document/Document;
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.run()V
    //#output(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): mLogger
    //#presumption(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): org.apache.commons.logging.LogFactory:getFactory(...)@50 != null
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/IndexOperation] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.beginDeleting()Lorg/apache/lucene/index/IndexReader; == &beginDeleting
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.beginWriting()Lorg/apache/lucene/index/IndexWriter; == &beginWriting
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.doRun()V == &doRun
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.endDeleting()V == &endDeleting
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.endWriting()V == &endWriting
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.getDocument(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)Lorg/apache/lucene/document/Document; == &getDocument
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): __Dispatch_Table.run()V == &run
    //#post(org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init): init'ed(mLogger)
    //#IndexOperation.java:50: end of method: org.apache.roller.weblogger.business.search.operations.IndexOperation.org.apache.roller.weblogger.business.search.operations.IndexOperation__static_init

    //~ Instance fields
    // ========================================================
    protected IndexManagerImpl manager;

    private IndexReader reader;

    private IndexWriter writer;

    //~ Constructors
    // ===========================================================

    public IndexOperation(IndexManagerImpl manager) {
    //#IndexOperation.java:63: method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)
    //#input(void org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)): manager
    //#input(void org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)): this
    //#output(void org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)): this.manager
    //#post(void org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)): this.manager == manager
    //#post(void org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)): init'ed(this.manager)
        this.manager = manager;
    }
    //#IndexOperation.java:65: end of method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.org.apache.roller.weblogger.business.search.operations.IndexOperation(IndexManagerImpl)

    //~ Methods
    // ================================================================

    protected Document getDocument(WeblogEntry data) {

        // Actual comment content is indexed only if search.index.comments
        // is true or absent from the (static) configuration properties.
        // If false in the configuration, comments are treated as if empty.
        boolean indexComments = WebloggerConfig.getBooleanProperty("search.index.comments", true);
    //#IndexOperation.java:75: method: Document org.apache.roller.weblogger.business.search.operations.IndexOperation.getDocument(WeblogEntry)
    //#input(Document getDocument(WeblogEntry)): ","._tainted
    //#input(Document getDocument(WeblogEntry)): "="._tainted
    //#input(Document getDocument(WeblogEntry)): "Fetching property ["._tainted
    //#input(Document getDocument(WeblogEntry)): "]"._tainted
    //#input(Document getDocument(WeblogEntry)): "search.index.comments"._tainted
    //#input(Document getDocument(WeblogEntry)): data
    //#input(Document getDocument(WeblogEntry)): org/apache/roller/weblogger/config/WebloggerConfig.config
    //#input(Document getDocument(WeblogEntry)): org/apache/roller/weblogger/config/WebloggerConfig.log
    //#output(Document getDocument(WeblogEntry)): new Document(getDocument#4) num objects
    //#output(Document getDocument(WeblogEntry)): return_value
    //#new obj(Document getDocument(WeblogEntry)): new Document(getDocument#4)
    //#pre[1] (Document getDocument(WeblogEntry)): data != null
    //#pre[2] (Document getDocument(WeblogEntry)): org/apache/roller/weblogger/config/WebloggerConfig.config != null
    //#pre[3] (Document getDocument(WeblogEntry)): org/apache/roller/weblogger/config/WebloggerConfig.log != null
    //#presumption(Document getDocument(WeblogEntry)): java.util.Iterator:next(...)@87 != null
    //#presumption(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntry:getCreator(...)@114 != null
    //#presumption(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime(...)@126 != null
    //#presumption(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntry:getUpdateTime(...)@124 != null
    //#presumption(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite(...)@111 != null
    //#post(Document getDocument(WeblogEntry)): return_value == &new Document(getDocument#4)
    //#post(Document getDocument(WeblogEntry)): new Document(getDocument#4) num objects == 1
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:org.apache.commons.logging.Log:debug
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.lang.Boolean
    //#unanalyzed(Document getDocument(WeblogEntry)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#test_vector(Document getDocument(WeblogEntry)): java.util.Iterator:hasNext(...)@86: {0}, {1}
    //#test_vector(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntry:getCategory(...)@137: Inverse{null}, Addr_Set{null}
    //#test_vector(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntry:getComments(...)@81: Addr_Set{null}, Inverse{null}
    //#test_vector(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntryComment:getContent(...)@88: Addr_Set{null}, Inverse{null}
    //#test_vector(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntryComment:getEmail(...)@92: Addr_Set{null}, Inverse{null}
    //#test_vector(Document getDocument(WeblogEntry)): org.apache.roller.weblogger.pojos.WeblogEntryComment:getName(...)@96: Addr_Set{null}, Inverse{null}

        String commentContent = "";
        String commentEmail = "";
        String commentName = "";
        if (indexComments) {
            List comments = data.getComments();
    //#IndexOperation.java:81: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.pojos.WeblogEntry:getComments()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: List org.apache.roller.weblogger.pojos.WeblogEntry:getComments()
            if (comments != null) {
                StringBuffer commentEmailBuf = new StringBuffer();
                StringBuffer commentContentBuf = new StringBuffer();
                StringBuffer commentNameBuf = new StringBuffer();
                for (Iterator cItr = comments.iterator(); cItr.hasNext();) {
                    WeblogEntryComment comment = (WeblogEntryComment) cItr.next();
                    if (comment.getContent() != null) {
    //#IndexOperation.java:88: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getContent()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getContent()
                        commentContentBuf.append(comment.getContent());
    //#IndexOperation.java:89: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getContent()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getContent()
                        commentContentBuf.append(",");
                    }
                    if (comment.getEmail() != null) {
    //#IndexOperation.java:92: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getEmail()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getEmail()
                        commentEmailBuf.append(comment.getEmail());
    //#IndexOperation.java:93: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getEmail()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getEmail()
                        commentEmailBuf.append(",");
                    }
                    if (comment.getName() != null) {
    //#IndexOperation.java:96: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getName()
                        commentNameBuf.append(comment.getName());
    //#IndexOperation.java:97: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getName()
                        commentNameBuf.append(",");
                    }
                }
                commentEmail = commentEmailBuf.toString();
                commentContent = commentContentBuf.toString();
                commentName = commentNameBuf.toString();
            }
        }

        Document doc = new Document();
    //#IndexOperation.java:107: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document()

        doc.add(Field.Keyword(FieldConstants.ID, data.getId()));
    //#IndexOperation.java:109: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getId()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getId()
    //#IndexOperation.java:109: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Keyword(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Keyword(String, String)
    //#IndexOperation.java:109: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        doc.add(Field.Keyword(FieldConstants.WEBSITE_HANDLE, data.getWebsite().getHandle()));
    //#IndexOperation.java:111: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#IndexOperation.java:111: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#IndexOperation.java:111: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Keyword(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Keyword(String, String)
    //#IndexOperation.java:111: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        doc.add(Field.UnIndexed(FieldConstants.ANCHOR, data.getAnchor()));
    //#IndexOperation.java:113: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getAnchor()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getAnchor()
    //#IndexOperation.java:113: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnIndexed(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnIndexed(String, String)
    //#IndexOperation.java:113: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
        doc.add(Field.Text(FieldConstants.USERNAME, data.getCreator().getUserName()));
    //#IndexOperation.java:114: Warning: method not available
    //#    -- call on User org.apache.roller.weblogger.pojos.WeblogEntry:getCreator()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: User org.apache.roller.weblogger.pojos.WeblogEntry:getCreator()
    //#IndexOperation.java:114: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.User:getUserName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.User:getUserName()
    //#IndexOperation.java:114: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Text(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Text(String, String)
    //#IndexOperation.java:114: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
        doc.add(Field.Text(FieldConstants.TITLE, data.getTitle()));
    //#IndexOperation.java:115: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getTitle()
    //#IndexOperation.java:115: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Text(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Text(String, String)
    //#IndexOperation.java:115: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        // index the entry text, but don't store it - moved to end of block
        doc.add(Field.UnStored(FieldConstants.CONTENT, data.getText()));
    //#IndexOperation.java:118: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getText()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getText()
    //#IndexOperation.java:118: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnStored(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnStored(String, String)
    //#IndexOperation.java:118: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        // store an abbreviated version of the entry text, but don't index
        doc.add(Field.UnIndexed(FieldConstants.CONTENT_STORED, 
    //#IndexOperation.java:121: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntry:getText()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntry:getText()
    //#IndexOperation.java:121: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.util.Utilities:removeHTML(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.util.Utilities:removeHTML(String)
    //#IndexOperation.java:121: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.util.Utilities:truncateNicely(String, int, int, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.util.Utilities:truncateNicely(String, int, int, String)
    //#IndexOperation.java:121: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnIndexed(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnIndexed(String, String)
    //#IndexOperation.java:121: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
            Utilities.truncateNicely(Utilities.removeHTML(data.getText()), 240, 260, "...")));

        doc.add(Field.Keyword(FieldConstants.UPDATED, data.getUpdateTime()
    //#IndexOperation.java:124: Warning: method not available
    //#    -- call on Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getUpdateTime()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getUpdateTime()
    //#IndexOperation.java:124: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Keyword(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Keyword(String, String)
    //#IndexOperation.java:124: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
                .toString()));
        doc.add(Field.Keyword(FieldConstants.PUBLISHED, data.getPubTime()
    //#IndexOperation.java:126: Warning: method not available
    //#    -- call on Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#IndexOperation.java:126: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Keyword(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Keyword(String, String)
    //#IndexOperation.java:126: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
                .toString()));

        // index Comments
        doc.add(Field.UnStored(FieldConstants.C_CONTENT, commentContent));
    //#IndexOperation.java:130: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnStored(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnStored(String, String)
    //#IndexOperation.java:130: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
        doc.add(Field.UnStored(FieldConstants.C_EMAIL, commentEmail));
    //#IndexOperation.java:131: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnStored(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnStored(String, String)
    //#IndexOperation.java:131: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)
        doc.add(Field.UnStored(FieldConstants.C_NAME, commentName));
    //#IndexOperation.java:132: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnStored(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnStored(String, String)
    //#IndexOperation.java:132: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        doc.add(Field.UnStored(FieldConstants.CONSTANT, FieldConstants.CONSTANT_V));
    //#IndexOperation.java:134: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnStored(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnStored(String, String)
    //#IndexOperation.java:134: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        // index Category
        WeblogCategory categorydata = data.getCategory();
    //#IndexOperation.java:137: Warning: method not available
    //#    -- call on WeblogCategory org.apache.roller.weblogger.pojos.WeblogEntry:getCategory()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: WeblogCategory org.apache.roller.weblogger.pojos.WeblogEntry:getCategory()
        Field category = (categorydata == null) 
    //#IndexOperation.java:138: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogCategory:getName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogCategory:getName()
    //#IndexOperation.java:138: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:Text(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:Text(String, String)
    //#IndexOperation.java:138: Warning: method not available
    //#    -- call on Field org.apache.lucene.document.Field:UnStored(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: Field org.apache.lucene.document.Field:UnStored(String, String)
           ? Field.UnStored(FieldConstants.CATEGORY, "") 
           : Field.Text(FieldConstants.CATEGORY, categorydata.getName());
        doc.add(category);
    //#IndexOperation.java:141: Warning: method not available
    //#    -- call on void org.apache.lucene.document.Document:add(Field)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: Document getDocument(WeblogEntry)
    //#    unanalyzed callee: void org.apache.lucene.document.Document:add(Field)

        return doc;
    //#IndexOperation.java:143: end of method: Document org.apache.roller.weblogger.business.search.operations.IndexOperation.getDocument(WeblogEntry)
    }

    protected IndexReader beginDeleting() {
        try {
            reader = IndexReader.open(manager.getIndexDirectory());
    //#IndexOperation.java:148: method: IndexReader org.apache.roller.weblogger.business.search.operations.IndexOperation.beginDeleting()
    //#IndexOperation.java:148: Warning: method not available
    //#    -- call on IndexReader org.apache.lucene.index.IndexReader:open(Directory)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: IndexReader beginDeleting()
    //#    unanalyzed callee: IndexReader org.apache.lucene.index.IndexReader:open(Directory)
    //#input(IndexReader beginDeleting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(IndexReader beginDeleting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Descendant_Table[others]
    //#input(IndexReader beginDeleting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#input(IndexReader beginDeleting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Dispatch_Table.getIndexDirectory()Lorg/apache/lucene/store/Directory;
    //#input(IndexReader beginDeleting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger
    //#input(IndexReader beginDeleting()): this
    //#input(IndexReader beginDeleting()): this.manager
    //#input(IndexReader beginDeleting()): this.manager.__Tag
    //#input(IndexReader beginDeleting()): this.manager.fRAMindex
    //#input(IndexReader beginDeleting()): this.manager.indexDir
    //#input(IndexReader beginDeleting()): this.manager.useRAMIndex
    //#input(IndexReader beginDeleting()): this.reader
    //#output(IndexReader beginDeleting()): return_value
    //#output(IndexReader beginDeleting()): this.reader
    //#pre[1] (IndexReader beginDeleting()): (soft) init'ed(this.reader)
    //#pre[2] (IndexReader beginDeleting()): (soft) org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger != null
    //#pre[4] (IndexReader beginDeleting()): (soft) this.manager != null
    //#pre[5] (IndexReader beginDeleting()): (soft) this.manager.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[6] (IndexReader beginDeleting()): (soft) init'ed(this.manager.fRAMindex)
    //#pre[7] (IndexReader beginDeleting()): (soft) init'ed(this.manager.indexDir)
    //#pre[8] (IndexReader beginDeleting()): (soft) init'ed(this.manager.useRAMIndex)
    //#post(IndexReader beginDeleting()): init'ed(return_value)
    //#post(IndexReader beginDeleting()): this.reader == return_value
    //#unanalyzed(IndexReader beginDeleting()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(IndexReader beginDeleting()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(IndexReader beginDeleting()): Effects-of-calling:org.apache.lucene.store.FSDirectory:getDirectory
        } catch (IOException e) {
        }

        return reader;
    //#IndexOperation.java:152: end of method: IndexReader org.apache.roller.weblogger.business.search.operations.IndexOperation.beginDeleting()
    }

    protected void endDeleting() {
        if (reader != null) {
    //#IndexOperation.java:156: method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.endDeleting()
    //#input(void endDeleting()): mLogger
    //#input(void endDeleting()): this
    //#input(void endDeleting()): this.reader
    //#pre[3] (void endDeleting()): init'ed(this.reader)
    //#pre[1] (void endDeleting()): (soft) mLogger != null
    //#test_vector(void endDeleting()): this.reader: Addr_Set{null}, Inverse{null}
            try {
                reader.close();
    //#IndexOperation.java:158: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexReader:close()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: void endDeleting()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexReader:close()
            } catch (IOException e) {
                mLogger.error("ERROR closing reader");
    //#IndexOperation.java:160: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: void endDeleting()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
            }
        }
    }
    //#IndexOperation.java:163: end of method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.endDeleting()

    protected IndexWriter beginWriting() {
        try {
            writer = new IndexWriter(manager.getIndexDirectory(), IndexManagerImpl.getAnalyzer(), false);
    //#IndexOperation.java:167: method: IndexWriter org.apache.roller.weblogger.business.search.operations.IndexOperation.beginWriting()
    //#IndexOperation.java:167: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter(Directory, Analyzer, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: IndexWriter beginWriting()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter(Directory, Analyzer, bool)
    //#input(IndexWriter beginWriting()): mLogger
    //#input(IndexWriter beginWriting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl]
    //#input(IndexWriter beginWriting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Descendant_Table[others]
    //#input(IndexWriter beginWriting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Dispatch_Table.getFSDirectory(Z)Lorg/apache/lucene/store/Directory;
    //#input(IndexWriter beginWriting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.__Dispatch_Table.getIndexDirectory()Lorg/apache/lucene/store/Directory;
    //#input(IndexWriter beginWriting()): org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger
    //#input(IndexWriter beginWriting()): this
    //#input(IndexWriter beginWriting()): this.manager
    //#input(IndexWriter beginWriting()): this.manager.__Tag
    //#input(IndexWriter beginWriting()): this.manager.fRAMindex
    //#input(IndexWriter beginWriting()): this.manager.indexDir
    //#input(IndexWriter beginWriting()): this.manager.useRAMIndex
    //#input(IndexWriter beginWriting()): this.writer
    //#output(IndexWriter beginWriting()): new IndexWriter(beginWriting#1) num objects
    //#output(IndexWriter beginWriting()): return_value
    //#output(IndexWriter beginWriting()): this.writer
    //#new obj(IndexWriter beginWriting()): new IndexWriter(beginWriting#1)
    //#pre[1] (IndexWriter beginWriting()): (soft) mLogger != null
    //#pre[2] (IndexWriter beginWriting()): (soft) init'ed(this.writer)
    //#pre[3] (IndexWriter beginWriting()): (soft) org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger != null
    //#pre[5] (IndexWriter beginWriting()): (soft) this.manager != null
    //#pre[6] (IndexWriter beginWriting()): (soft) this.manager.__Tag == org/apache/roller/weblogger/business/search/IndexManagerImpl
    //#pre[7] (IndexWriter beginWriting()): (soft) init'ed(this.manager.fRAMindex)
    //#pre[8] (IndexWriter beginWriting()): (soft) init'ed(this.manager.indexDir)
    //#pre[9] (IndexWriter beginWriting()): (soft) init'ed(this.manager.useRAMIndex)
    //#post(IndexWriter beginWriting()): return_value == One-of{&new IndexWriter(beginWriting#1), old this.writer}
    //#post(IndexWriter beginWriting()): (soft) init'ed(return_value)
    //#post(IndexWriter beginWriting()): this.writer == return_value
    //#post(IndexWriter beginWriting()): new IndexWriter(beginWriting#1) num objects <= 1
    //#unanalyzed(IndexWriter beginWriting()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(IndexWriter beginWriting()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(IndexWriter beginWriting()): Effects-of-calling:org.apache.lucene.store.FSDirectory:getDirectory
    //#unanalyzed(IndexWriter beginWriting()): Effects-of-calling:org.apache.lucene.analysis.standard.StandardAnalyzer
        } catch (IOException e) {
            mLogger.error("ERROR creating writer", e);
    //#IndexOperation.java:169: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: IndexWriter beginWriting()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        }

        return writer;
    //#IndexOperation.java:172: end of method: IndexWriter org.apache.roller.weblogger.business.search.operations.IndexOperation.beginWriting()
    }

    protected void endWriting() {
        if (writer != null) {
    //#IndexOperation.java:176: method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.endWriting()
    //#input(void endWriting()): mLogger
    //#input(void endWriting()): this
    //#input(void endWriting()): this.writer
    //#pre[3] (void endWriting()): init'ed(this.writer)
    //#pre[1] (void endWriting()): (soft) mLogger != null
    //#test_vector(void endWriting()): this.writer: Addr_Set{null}, Inverse{null}
            try {
                writer.close();
    //#IndexOperation.java:178: Warning: method not available
    //#    -- call on void org.apache.lucene.index.IndexWriter:close()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: void endWriting()
    //#    unanalyzed callee: void org.apache.lucene.index.IndexWriter:close()
            } catch (IOException e) {
                mLogger.error("ERROR closing writer", e);
    //#IndexOperation.java:180: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: void endWriting()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            }
        }
    }
    //#IndexOperation.java:183: end of method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.endWriting()

    public void run() {
        doRun();
    //#IndexOperation.java:186: method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.run()
    //#IndexOperation.java:186: Warning: call too complex - analysis skipped
    //#    -- call on void doRun()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: void run()
    //#    unanalyzed callee: void doRun()
    //#IndexOperation.java:186: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.business.search.operations.IndexOperation
    //#    method: void run()
    //#    suspicious precondition index: [2]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/IndexManagerImpl$1]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/AddEntryOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/IndexOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/ReadFromIndexOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/SearchOperation]
    //#input(void run()): __Descendant_Table[org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation]
    //#input(void run()): __Descendant_Table[others]
    //#input(void run()): __Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/IndexManagerImpl$1.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/AddEntryOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/ReadFromIndexOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/SearchOperation.__Dispatch_Table.doRun()V
    //#input(void run()): org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation.__Dispatch_Table.doRun()V
    //#input(void run()): this
    //#input(void run()): this.__Tag
    //#pre[2] (void run()): this.__Tag in {org/apache/roller/weblogger/business/search/IndexManagerImpl$1, org/apache/roller/weblogger/business/search/operations/AddEntryOperation, org/apache/roller/weblogger/business/search/operations/IndexOperation, org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation, org/apache/roller/weblogger/business/search/operations/ReadFromIndexOperation, org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation, org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation, org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation, org/apache/roller/weblogger/business/search/operations/SearchOperation, org/apache/roller/weblogger/business/search/operations/WriteToIndexOperation}
    }
    //#IndexOperation.java:187: end of method: void org.apache.roller.weblogger.business.search.operations.IndexOperation.run()

    protected abstract void doRun();
}
    //#IndexOperation.java:: end of class: org.apache.roller.weblogger.business.search.operations.IndexOperation
