You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by sh...@apache.org on 2009/01/08 13:52:17 UTC
svn commit: r732695 - in /lucene/solr/trunk/contrib/dataimporthandler: ./
src/main/java/org/apache/solr/handler/dataimport/
src/test/java/org/apache/solr/handler/dataimport/
Author: shalin
Date: Thu Jan 8 04:52:16 2009
New Revision: 732695
URL: http://svn.apache.org/viewvc?rev=732695&view=rev
Log:
SOLR-938 -- Add event listener API for import start and end
Added:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java (with props)
Modified:
lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder2.java
Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=732695&r1=732694&r2=732695&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Thu Jan 8 04:52:16 2009
@@ -45,7 +45,10 @@
(David Smiley, Glen Newton, shalin)
9. SOLR-910: Add a few utility commands to the DIH admin page such as full import, delta import, status, reload config.
- (Ahmed Hammad via shalin)
+ (Ahmed Hammad via shalin)
+
+10.SOLR-938: Add event listener API for import start and end.
+ (Kay Kay, Noble Paul via shalin)
Optimizations
----------------------
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java?rev=732695&r1=732694&r2=732695&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java Thu Jan 8 04:52:16 2009
@@ -57,11 +57,15 @@
public List<Entity> entities = new ArrayList<Entity>();
+ public String onImportStart, onImportEnd;
+
public Document() {
}
public Document(Element element) {
this.deleteQuery = getStringAttribute(element, "deleteQuery", null);
+ this.onImportStart = getStringAttribute(element, "onImportStart", null);
+ this.onImportEnd = getStringAttribute(element, "onImportEnd", null);
List<Element> l = getChildNodes(element, "entity");
for (Element e : l)
entities.add(new Entity(e));
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=732695&r1=732694&r2=732695&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java Thu Jan 8 04:52:16 2009
@@ -92,6 +92,21 @@
return resolver;
}
+ private void invokeEventListener(String className) {
+ try {
+ EventListener listener = (EventListener) loadClass(className, dataImporter.getCore()).newInstance();
+ int currentProcess = -1;
+ if (dataImporter.getStatus() == DataImporter.Status.RUNNING_DELTA_DUMP) {
+ currentProcess = Context.DELTA_DUMP;
+ } else {
+ currentProcess = Context.FULL_DUMP;
+ }
+ listener.onEvent(new ContextImpl(null, getVariableResolver(), null, currentProcess, session, null, this));
+ } catch (Exception e) {
+ DataImportHandlerException.wrapAndThrow(DataImportHandlerException.SEVERE, e, "Unable to load class : " + className);
+ }
+ }
+
@SuppressWarnings("unchecked")
public void execute() {
dataImporter.store(DataImporter.STATUS_MSGS, statusMessages);
@@ -114,6 +129,11 @@
List<String> entities = requestParameters.entities;
+ // Trigger onImportStart
+ if (document.onImportStart != null) {
+ invokeEventListener(document.onImportStart);
+ }
+
for (DataConfig.Entity e : document.entities) {
if (entities != null && !entities.contains(e.name))
continue;
@@ -137,10 +157,16 @@
} else if (requestParameters.commit) {
// Debug mode, commit if commit=true was specified
commit();
+ if (document.onImportEnd != null) {
+ invokeEventListener(document.onImportEnd);
+ }
}
} else {
// Finished operation normally, commit now
commit();
+ if (document.onImportEnd != null) {
+ invokeEventListener(document.onImportEnd);
+ }
}
statusMessages.remove(TIME_ELAPSED);
Added: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java?rev=732695&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java (added)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java Thu Jan 8 04:52:16 2009
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * 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.
+ */
+package org.apache.solr.handler.dataimport;
+
+/**
+ * Event listener for DataImportHandler
+ *
+ * <b>This API is experimental and subject to change</b>
+ *
+ * @version $Id$
+ * @since solr 1.4
+ */
+public abstract class EventListener {
+
+ /**
+ * Event callback
+ *
+ * @param ctx the Context in which this event was called
+ */
+ public abstract void onEvent(Context ctx);
+
+}
Propchange: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EventListener.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder2.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder2.java?rev=732695&r1=732694&r2=732695&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder2.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder2.java Thu Jan 8 04:52:16 2009
@@ -78,6 +78,8 @@
super.runFullImport(dataConfigWithCaseInsensitiveFields);
assertQ(req("id:1"), "//*[@numFound='1']");
+ assertTrue("Start event listener was not called", StartEventListener.executed);
+ assertTrue("End event listener was not called", EndEventListener.executed);
}
@Test
@@ -137,6 +139,22 @@
}
+ public static class StartEventListener extends EventListener {
+ public static boolean executed = false;
+
+ public void onEvent(Context ctx) {
+ executed = true;
+ }
+ }
+
+ public static class EndEventListener extends EventListener {
+ public static boolean executed = false;
+
+ public void onEvent(Context ctx) {
+ executed = true;
+ }
+ }
+
private final String requestParamAsVariable = "<dataConfig>\n" +
" <dataSource type=\"MockDataSource\" />\n" +
" <document>\n" +
@@ -158,7 +176,7 @@
"</dataConfig>";
private final String dataConfigWithCaseInsensitiveFields = "<dataConfig>\n" +
- " <document>\n" +
+ " <document onImportStart=\"TestDocBuilder2$StartEventListener\" onImportEnd=\"TestDocBuilder2$EndEventListener\">\n" +
" <entity name=\"books\" query=\"select * from x\">\n" +
" <field column=\"ID\" />\n" +
" <field column=\"Desc\" />\n" +