dflorey     2004/02/25 07:43:51

  Modified:    src/share/org/apache/slide/search IndexTrigger.java
  Log:
  Added support for synchronous or asynchronous indexing
  
  Revision  Changes    Path
  1.2       +23 -16    
jakarta-slide/src/share/org/apache/slide/search/IndexTrigger.java
  
  Index: IndexTrigger.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/search/IndexTrigger.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IndexTrigger.java 25 Feb 2004 12:49:06 -0000      1.1
  +++ IndexTrigger.java 25 Feb 2004 15:43:51 -0000      1.2
  @@ -56,7 +56,8 @@
               String classname = listenerConfig.getAttribute("classname");
               String uri = listenerConfig.getAttribute("uri", null);
               String contentType = listenerConfig.getAttribute("content-type", null);
  -            try {
  +            boolean synchronous = 
listenerConfig.getAttributeAsBoolean("synchronous", false);
  +             try {
                   Class listenerClass = Class.forName(classname);
                   Indexer indexer = null;
                   try {
  @@ -68,7 +69,7 @@
                   if ( indexer instanceof Configurable ) {
                       
((Configurable)indexer).configure(listenerConfig.getConfiguration("configuration"));
                   }
  -                addIndexer(indexer, contentType, uri);
  +                addIndexer(indexer, contentType, uri, synchronous);
               } catch (ClassCastException e) {
                   throw new ConfigurationException("Indexer '"+classname+"' is not of 
type Indexer", configuration);
               } catch (Exception e) {
  @@ -79,7 +80,7 @@
   
       public void vetoableCollected(EventCollection collection) throws VetoException {
           try {
  -            triggerIndexers(collection);
  +            triggerIndexers(collection, true);
           } catch ( IndexException e ) {
               throw new VetoException(e.getMessage());
           }
  @@ -87,45 +88,45 @@
   
       public void collected(EventCollection collection) {
           try {
  -            triggerIndexers(collection);
  +            triggerIndexers(collection, false);
           } catch ( IndexException e ) {
               Domain.log("Index might be out of sync! Reason: "+e.getMessage(), 
LOG_CHANNEL, Logger.CRITICAL);
           }
       }
   
  -    private synchronized void triggerIndexers(EventCollection collection) throws 
IndexException {
  +    private synchronized void triggerIndexers(EventCollection collection, boolean 
synchronous) throws IndexException {
           ContentEvent[] update = 
EventCollectionFilter.getChangedContents(collection);
           for ( int i = 0; i < update.length; i++ ) {
  -            Indexer[] indexers = getIndexers(update[i].getRevisionDescriptors(), 
update[i].getRevisionDescriptor());
  +            Indexer[] indexers = getIndexers(update[i].getRevisionDescriptors(), 
update[i].getRevisionDescriptor(), synchronous);
               for ( int j = 0; j < indexers.length; j++ ) {
                   indexers[j].updateIndex(new Uri(update[i].getNamespace(), 
update[i].getUri()), update[i].getRevisionDescriptor(), 
update[i].getRevisionContent());
               }
           }
           ContentEvent[] insert = 
EventCollectionFilter.getCreatedContents(collection);
           for ( int i = 0; i < insert.length; i++ ) {
  -            Indexer[] indexers = getIndexers(insert[i].getRevisionDescriptors(), 
insert[i].getRevisionDescriptor());
  +            Indexer[] indexers = getIndexers(insert[i].getRevisionDescriptors(), 
insert[i].getRevisionDescriptor(), synchronous);
               for ( int j = 0; j < indexers.length; j++ ) {
                   indexers[j].createIndex(new Uri(insert[i].getNamespace(), 
insert[i].getUri()), insert[i].getRevisionDescriptor(), 
insert[i].getRevisionContent());
               }
           }
           ContentEvent[] delete = 
EventCollectionFilter.getRemovedContents(collection);
           for ( int i = 0; i < delete.length; i++ ) {
  -            Indexer[] indexers = getIndexers(delete[i].getRevisionDescriptors(), 
delete[i].getRevisionDescriptor());
  +            Indexer[] indexers = getIndexers(delete[i].getRevisionDescriptors(), 
delete[i].getRevisionDescriptor(), synchronous);
               for ( int j = 0; j < indexers.length; j++ ) {
                   indexers[j].dropIndex(new Uri(delete[i].getNamespace(), 
delete[i].getUri()), delete[i].getRevisionDescriptor().getRevisionNumber());
               }
           }
       }
   
  -    private void addIndexer(Indexer indexer, String contentType, String uri) {
  -        indexers.add(new IndexerMapping(indexer, contentType, uri));
  +    private void addIndexer(Indexer indexer, String contentType, String uri, 
boolean synchronous) {
  +        indexers.add(new IndexerMapping(indexer, contentType, uri, synchronous));
       }
   
  -    private Indexer []getIndexers(NodeRevisionDescriptors descriptors, 
NodeRevisionDescriptor descriptor) {
  +    private Indexer []getIndexers(NodeRevisionDescriptors descriptors, 
NodeRevisionDescriptor descriptor, boolean synchronous) {
           List matchingIndexers = new ArrayList();
           for ( Iterator i = indexers.iterator(); i.hasNext(); ) {
               IndexerMapping mapping = (IndexerMapping)i.next();
  -            if ( mapping.matches(descriptors, descriptor)) {
  +            if ( mapping.isSynchronous() == synchronous && 
mapping.matches(descriptors, descriptor)) {
                   matchingIndexers.add(mapping.getIndexer());
               }
           }
  @@ -136,15 +137,21 @@
       class IndexerMapping {
           Indexer indexer;
           String uri, contentType;
  +        boolean synchronous;
   
  -        public IndexerMapping(Indexer indexer, String contentType, String uri) {
  +        public IndexerMapping(Indexer indexer, String contentType, String uri, 
boolean synchronous) {
               this.indexer = indexer;
               this.uri = uri;
               this.contentType = contentType;
  +            this.synchronous = synchronous;
           }
   
           public Indexer getIndexer() {
               return indexer;
  +        }
  +
  +        public boolean isSynchronous() {
  +            return synchronous;
           }
   
           public boolean matches(NodeRevisionDescriptors descriptors, 
NodeRevisionDescriptor descriptor) {
  
  
  

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

Reply via email to