luetzkendorf    2005/03/29 00:08:00

  Modified:    src/stores/org/apache/slide/index/lucene Index.java
                        LuceneContentIndexer.java
                        LucenePropertiesIndexer.java
  Added:       src/stores/org/apache/slide/index/lucene
                        IndexInitializer.java
  Log:
  First solution for initializing a new index
  
  Revision  Changes    Path
  1.11      +9 -3      
jakarta-slide/src/stores/org/apache/slide/index/lucene/Index.java
  
  Index: Index.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/Index.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Index.java        11 Mar 2005 09:48:52 -0000      1.10
  +++ Index.java        29 Mar 2005 08:08:00 -0000      1.11
  @@ -99,6 +99,7 @@
        */
       private int jobCounter = 0;
       
  +    private boolean needsInitialization = false;
   
       public Index(IndexConfiguration configuration, Logger logger, String 
name) 
           throws IndexException
  @@ -121,6 +122,7 @@
                       IndexReader.unlock(directory);
                   }                
               } else {
  +             this.needsInitialization = true;
                   IndexWriter writer = new IndexWriter(directory, 
                           configuration.getAnalyzer(), true);
                   writer.close();
  @@ -144,6 +146,10 @@
           return this.logger;
       }
   
  +    public boolean needsInitialization() {
  +     return this.needsInitialization;
  +    }
  +    
       public void start() {
           if (configuration.indexAsynchron) {
               this.indexThread = new JobRunner();
  
  
  
  1.2       +8 -0      
jakarta-slide/src/stores/org/apache/slide/index/lucene/LuceneContentIndexer.java
  
  Index: LuceneContentIndexer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/LuceneContentIndexer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LuceneContentIndexer.java 8 Nov 2004 09:45:47 -0000       1.1
  +++ LuceneContentIndexer.java 29 Mar 2005 08:08:00 -0000      1.2
  @@ -36,6 +36,8 @@
   import org.apache.slide.content.NodeRevisionContent;
   import org.apache.slide.content.NodeRevisionDescriptor;
   import org.apache.slide.content.NodeRevisionNumber;
  +import org.apache.slide.event.DomainEvent;
  +import org.apache.slide.event.EventDispatcher;
   import org.apache.slide.extractor.ExtractorManager;
   import org.apache.slide.search.IndexException;
   
  @@ -60,6 +62,12 @@
               
               this.index = new Index(indexConfiguration, getLogger(), 
                       "content " + this.scope);
  +            
  +            if (this.index.needsInitialization()) {
  +             DomainEvent.NAMESPACE_INITIALIZED.setEnabled(true);
  +             EventDispatcher.getInstance().addEventListener(
  +                             new IndexInitializer(this.scope, 
IndexInitializer.CONTENT, getLogger()));
  +            }
           } 
           catch (IndexException e) {
               throw new ServiceInitializationFailedException(this, e);
  
  
  
  1.7       +8 -0      
jakarta-slide/src/stores/org/apache/slide/index/lucene/LucenePropertiesIndexer.java
  
  Index: LucenePropertiesIndexer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/LucenePropertiesIndexer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- LucenePropertiesIndexer.java      7 Jan 2005 16:47:48 -0000       1.6
  +++ LucenePropertiesIndexer.java      29 Mar 2005 08:08:00 -0000      1.7
  @@ -32,6 +32,8 @@
   import org.apache.slide.content.NodeRevisionContent;
   import org.apache.slide.content.NodeRevisionDescriptor;
   import org.apache.slide.content.NodeRevisionNumber;
  +import org.apache.slide.event.DomainEvent;
  +import org.apache.slide.event.EventDispatcher;
   import org.apache.slide.search.IndexException;
   import org.apache.slide.util.conf.Configurable;
   import org.apache.slide.util.conf.Configuration;
  @@ -58,6 +60,12 @@
               
               this.index = new Index(indexConfiguration, getLogger(), 
                       "properties " + this.scope);
  +            
  +            if (this.index.needsInitialization()) {
  +             DomainEvent.NAMESPACE_INITIALIZED.setEnabled(true);
  +             EventDispatcher.getInstance().addEventListener(new 
IndexInitializer(
  +                             this.scope, IndexInitializer.PROPERTIES, 
getLogger()));
  +            }
           } 
           catch (IndexException e) {
              throw new ServiceInitializationFailedException(this, e);
  
  
  
  1.1                  
jakarta-slide/src/stores/org/apache/slide/index/lucene/IndexInitializer.java
  
  Index: IndexInitializer.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/IndexInitializer.java,v
 1.1 2005/03/29 08:08:00 luetzkendorf Exp $
   * $Revision: 1.1 $
   * $Date: 2005/03/29 08:08:00 $
   *
   * ====================================================================
   *
   * Copyright 1999-2004 The Apache Software Foundation
   *
   * Licensed 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.
   *
   */
  package org.apache.slide.index.lucene;
  
  import java.util.Enumeration;
  
  import org.apache.slide.authenticate.CredentialsToken;
  import org.apache.slide.authenticate.SecurityToken;
  import org.apache.slide.common.Domain;
  import org.apache.slide.common.Namespace;
  import org.apache.slide.common.NamespaceAccessToken;
  import org.apache.slide.common.Scope;
  import org.apache.slide.common.SlideToken;
  import org.apache.slide.common.SlideTokenImpl;
  import org.apache.slide.common.SlideTokenWrapper;
  import org.apache.slide.common.Uri;
  import org.apache.slide.content.Content;
  import org.apache.slide.content.NodeRevisionContent;
  import org.apache.slide.content.NodeRevisionDescriptor;
  import org.apache.slide.content.NodeRevisionDescriptors;
  import org.apache.slide.content.NodeRevisionNumber;
  import org.apache.slide.content.RevisionContentNotFoundException;
  import org.apache.slide.content.RevisionDescriptorNotFoundException;
  import org.apache.slide.content.RevisionNotFoundException;
  import org.apache.slide.event.DomainAdapter;
  import org.apache.slide.event.DomainEvent;
  import org.apache.slide.search.IndexException;
  import org.apache.slide.store.AbstractStore;
  import org.apache.slide.store.Store;
  import org.apache.slide.structure.ObjectNode;
  import org.apache.slide.structure.StructureIterator;
  import org.apache.slide.util.logger.Logger;
  
  
  /**
   * Initializer used to index all existing documents in a store. This is 
   * created and registered as en event listener by [EMAIL PROTECTED] 
LucenePropertiesIndexer} 
   * or [EMAIL PROTECTED] LuceneContentIndexer} if there is existing index so 
we are 
   * sure that all documents are to be to be indexed. 
   */
  public class IndexInitializer extends DomainAdapter
  {
        static final int CONTENT = 1;
        static final int PROPERTIES = 2;
        private Scope scope;
        private int indexType;
        private Logger logger;
        
        
        IndexInitializer(Scope scope, int indexType, Logger logger) {
                this.scope = scope;
                this.indexType = indexType;
                this.logger = logger;
        }
  
      public void namespaceInitialized(DomainEvent event)
      {
          Namespace namespace = event.getNamespace();
  
          NamespaceAccessToken nsa = Domain.accessNamespace(new 
SecurityToken(""), 
                        namespace.getName());
          
          Content content = nsa.getContentHelper();
          Store indexedStore = namespace.getStore(this.scope);
          
          SlideToken slideToken = new SlideTokenImpl(new CredentialsToken(""));
          slideToken = new SlideTokenWrapper(slideToken);
          slideToken.setForceStoreEnlistment(true);
          slideToken.setForceSecurity(false);
          String logChannel = getClass().getName();
  
          try {
              nsa.begin();
              StructureIterator i = new 
StructureIterator(nsa.getStructureHelper(),
                      slideToken, this.scope.toString());
              
              logger.log("Init " + (indexType == CONTENT ? "content" : 
"properties" ) 
                        + " index for scope " + this.scope, logChannel, 
Logger.INFO);
              
              while (i.hasNext()) {
                  ObjectNode node = i.nextNode();
                  
                  NodeRevisionDescriptors nrds = content.retrieve(slideToken, 
node.getUri());
                  for(Enumeration e = nrds.enumerateRevisionNumbers(); 
e.hasMoreElements();) {
                        Uri uri = nsa.getUri(slideToken, node.getUri());
                        Store store = uri.getStore();
                        NodeRevisionNumber nrn = 
(NodeRevisionNumber)e.nextElement();
                        
                        if(store == indexedStore && store instanceof 
AbstractStore) {
                        NodeRevisionDescriptor nrd = null;
                                
                                                try {
                                        nrd = content.retrieve(slideToken, 
nrds, nrn);
                                        if (indexType == PROPERTIES) {
                                                
((AbstractStore)store).createPropertiesIndex(uri, nrd, null);
                                                logger.log(node.getUri() + " 
props: " + nrn, logChannel, Logger.DEBUG);
                                        }
                            } catch (RevisionDescriptorNotFoundException ex) {
                                                        continue;
                                } catch(IndexException ex) {
                                logger.log("Error while initalizing properties 
index for " 
                                                + uri + " (" + nrn + ")", ex, 
logChannel, Logger.ERROR);
                                } 
                                
                                try {
                                        if (indexType == CONTENT) {
                                                NodeRevisionContent nrc = 
content.retrieve(slideToken, nrds, nrd);
                                                
((AbstractStore)store).createContentIndex(uri, nrd, nrc);
                                                logger.log(node.getUri() + " 
content: " + nrn, logChannel, Logger.DEBUG);
                                        }
                                } catch (RevisionNotFoundException ex) { 
                                        // ignore no content?
                                } catch (RevisionContentNotFoundException ex) {
                                        // ignore not content
                                } catch (IndexException ex) {
                                        logger.log("Error while initalizing 
content index for " 
                                                + uri + " (" + nrn + ")", ex, 
logChannel, Logger.ERROR);
                                } 
                        }
                  }
              }
              
              logger.log("Init " + (indexType == CONTENT ? "content" : 
"properties" ) 
                        + " index for scope " + this.scope + " done", 
logChannel, Logger.INFO);
              
          } catch (Exception e) {
              Domain.error("Error while initializing " + 
                        (indexType == CONTENT ? "content" : "properties" )+ " 
index for scope " + 
                                        this.scope, e);
          } finally {
              try {
                  nsa.commit();
              } catch (Exception e) {
                  Domain.error("Error while commiting initialized " + 
                                (indexType == CONTENT ? "content" : 
"properties" )+ " index for scope " + 
                                        this.scope, e);
              }
          }
          
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to