File Source: RebuildWebsiteIndexOperation.java

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one or more
     3   *  contributor license agreements.  The ASF licenses this file to You
     4   * under the Apache License, Version 2.0 (the "License"); you may not
     5   * use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.  For additional information regarding
    15   * copyright in this work, please see the NOTICE file in the top level
    16   * directory of this distribution.
    17   */
    18  /* Created on Jul 16, 2003 */
    19  package org.apache.roller.weblogger.business.search.operations;
    20  
    21  import java.io.IOException;
    22  import java.text.MessageFormat;
    23  import java.util.Date;
    24  import java.util.Iterator;
    25  import java.util.List;
    26  
    27  import org.apache.commons.logging.Log;
    28  import org.apache.commons.logging.LogFactory;
    29  import org.apache.lucene.index.IndexReader;
    30  import org.apache.lucene.index.IndexWriter;
    31  import org.apache.lucene.index.Term;
    32  import org.apache.roller.weblogger.WebloggerException;
    33  import org.apache.roller.weblogger.business.search.IndexManagerImpl;
    34  import org.apache.roller.weblogger.business.search.FieldConstants;
    35  import org.apache.roller.weblogger.business.search.IndexUtil;
    36  import org.apache.roller.weblogger.business.Weblogger;
    37  import org.apache.roller.weblogger.business.UserManager;
    38  import org.apache.roller.weblogger.business.WeblogManager;
    39  import org.apache.roller.weblogger.pojos.WeblogEntry;
    40  import org.apache.roller.weblogger.pojos.Weblog;
    41  
    42  /**
    43   * An index operation that rebuilds a given users index (or all indexes).
    44   * @author Mindaugas Idzelis (min@idzelis.com)
    45   */
    46  public class RebuildWebsiteIndexOperation extends WriteToIndexOperation {
    47      
    48      //~ Static fields/initializers =============================================
    49      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.business.search.operations.RebuildWebsiteIndexOperation__static_init
              * 
              *  Presumptions:
              *    org.apache.commons.logging.LogFactory:getFactory(...)@50 != null
              * 
              *  Postconditions:
              *    init'ed(mLogger)
              */
    50      private static Log mLogger =
    51          LogFactory.getFactory().getInstance(RebuildWebsiteIndexOperation.class);
    52      
    53      //~ Instance fields ========================================================
    54      
    55      private Weblog website;
    56      private Weblogger roller;
    57      
    58      //~ Constructors ===========================================================
    59      
    60      /**
    61       * Create a new operation that will recreate an index.
    62       *
    63       * @param website The website to rebuild the index for, or null for all users.
    64       */
    65      public RebuildWebsiteIndexOperation(Weblogger roller, IndexManagerImpl mgr, Weblog website) {
                 /* 
    P/P           *  Method: void org.apache.roller.weblogger.business.search.operations.RebuildWebsiteIndexOperation(Weblogger, IndexManagerImpl, Weblog)
                  * 
                  *  Postconditions:
                  *    this.manager == mgr
                  *    init'ed(this.manager)
                  *    this.roller == roller
                  *    init'ed(this.roller)
                  *    this.website == website
                  *    init'ed(this.website)
                  */
    66          super(mgr);
    67          this.roller = roller;
    68          this.website = website;
    69      }
    70      
    71      //~ Methods ================================================================
    72      
    73      public void doRun() {
                 /* 
    P/P           *  Method: void doRun()
                  * 
                  *  Preconditions:
                  *    mLogger != null
                  *    init'ed(this.website)
                  *    (soft) init'ed(this.reader)
                  *    (soft) init'ed(this.writer)
                  *    (soft) org/apache/roller/weblogger/business/WebloggerImpl.log != null
                  *    (soft) org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger != null
                  *    (soft) org/apache/roller/weblogger/business/search/operations/IndexOperation.mLogger != null
                  *    (soft) org/apache/roller/weblogger/config/WebloggerConfig.config != null
                  *    (soft) org/apache/roller/weblogger/config/WebloggerConfig.log != null
                  *    (soft) this.manager != null
                  *    ...
                  * 
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@134 != null
                  *    javax.persistence.Query:getResultList(...)@645 != null
                  *    weblogManager.strategy.emf@113 != null
                  *    weblogManager.strategy.threadLocalEntityManager@113 != null
                  *    weblogManager.strategy@113 != null
                  * 
                  *  Postconditions:
                  *    init'ed(this.reader)
                  *    init'ed(this.website)
                  *    this.writer == One-of{old this.writer, &new IndexWriter(beginWriting#1)}
                  *    init'ed(this.writer)
                  *    new IndexWriter(beginWriting#1) num objects <= 1
                  * 
                  *  Test Vectors:
                  *    this.website: Addr_Set{null}, Inverse{null}
                  *    java.util.Iterator:hasNext(...)@133: {0}, {1}
                  */
    74          Date start = new Date();
    75          
    76          // since this operation can be run on a separate thread we must treat
    77          // the weblog object passed in as a detached object which is proned to
    78          // lazy initialization problems, so requery for the object now
    79          if(this.website != null) {
    80              try {
    81                  UserManager uMgr = roller.getUserManager();
    82                  this.website = uMgr.getWebsite(this.website.getId());
    83              } catch (WebloggerException ex) {
    84                  mLogger.error("Error getting website object", ex);
    85                  return;
    86              }
    87          }
    88          
    89          IndexReader reader = beginDeleting();
    90          
    91          try {
    92              if (reader != null) {
    93                  Term tWebsite = null;
    94                  if (website != null) {
    95                      tWebsite = IndexUtil.getTerm(
    96                              FieldConstants.WEBSITE_HANDLE, website.getHandle());
    97                  }
    98                  if (tWebsite != null) {
    99                      reader.delete(tWebsite);
   100                  } else {
   101                      Term all =
   102                              IndexUtil.getTerm(FieldConstants.CONSTANT,
   103                              FieldConstants.CONSTANT_V);
   104                      reader.delete(all);
   105                  }
   106              }
   107          } catch (IOException e) {
   108              mLogger.info("Problems deleting doc from index", e);
   109          } finally {
   110              endDeleting();
   111          }
   112          
   113          IndexWriter writer = beginWriting();
   114          
   115          try {
   116              if (writer != null) {
   117                  WeblogManager weblogManager = roller.getWeblogManager();
   118                  
   119                  
   120                  List entries = weblogManager .getWeblogEntries(
   121                          
   122                          website,                   // website            
   123                          null,
   124                          null,                      // startDate
   125                          null,                      // endDate
   126                          null,                      // catName
   127                          null,WeblogEntry.PUBLISHED, // status
   128                          null,                      // text
   129                          null,                      // sortby (null means pubTime)
   130                          null, 
   131                          null,
   132                          0, -1);     // offset, length, locale
   133                  for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
   134                      WeblogEntry entry = (WeblogEntry) wbItr.next();
   135                      writer.addDocument(getDocument(entry));
   136                      mLogger.debug(
   137                              MessageFormat.format("Indexed entry {0}: {1}",
   138                              new Object[] {entry.getPubTime(), entry.getAnchor()}));
   139                  }
   140                  // release the database connection
   141                  roller.release();
   142              }
   143          } catch (Exception e) {
   144              mLogger.error("ERROR adding doc to index", e);
   145          } finally {
   146              endWriting();
   147              if (roller != null) roller.release();
   148          }
   149          
   150          Date end = new Date();
   151          double length = (end.getTime() - start.getTime()) / (double) 1000;
   152          
   153          if (website == null) {
   154              mLogger.info(
   155                      "Completed rebuilding index for all users in '" + length + "' secs");
   156          } else {
   157              mLogger.info("Completed rebuilding index for website handle: '" +
   158                      website.getHandle() + "' in '" + length + "' seconds");
   159          }
   160      }
   161  }








SofCheck Inspector Build Version : 2.18479
RebuildWebsiteIndexOperation.java 2009-Jan-02 14:25:38
RebuildWebsiteIndexOperation.class 2009-Sep-04 03:12:31