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]