Add a developer setting that will suppress automated search index updates.

This commit is contained in:
Jim Blake 2014-10-02 16:22:02 -04:00
parent 39e7a818c2
commit 573a5e6cc6
5 changed files with 151 additions and 22 deletions

View file

@ -42,6 +42,8 @@ import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalUriFinders;
import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder;
import edu.cornell.mannlib.vitro.webapp.search.indexing.SearchReindexingListener;
import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
import edu.cornell.mannlib.vitro.webapp.utils.developer.Key;
import edu.cornell.mannlib.vitro.webapp.utils.developer.listeners.DeveloperDisabledModelChangeListener;
/**
* TODO
@ -129,11 +131,12 @@ public class SearchIndexerSetup implements ServletContextListener {
// webapp.
context.setAttribute(IndexBuilder.class.getName(), builder);
// set up listeners so search index builder is notified of changes
// to model
ServletContext ctx = sce.getServletContext();
SearchReindexingListener srl = new SearchReindexingListener(builder);
ModelContext.registerListenerForChanges(ctx, srl);
// Create listener to notify index builder of changes to model
// (can be disabled by developer setting.)
ModelContext.registerListenerForChanges(context,
new DeveloperDisabledModelChangeListener(
new SearchReindexingListener(builder),
Key.SEARCH_INDEX_SUPPRESS_MODEL_CHANGE_LISTENER));
ss.info(this, "Setup of search indexer completed.");
} catch (Throwable e) {

View file

@ -110,6 +110,12 @@ public enum Key {
SEARCH_INDEX_DOCUMENT_RESTRICTION(
"developer.searchIndex.documentRestriction", false),
/**
* If set, don't pass model change events to the search indexer.
*/
SEARCH_INDEX_SUPPRESS_MODEL_CHANGE_LISTENER(
"developer.searchIndex.suppressModelChangeListener", true),
/**
* Tell the SearchEngineLogger to log all index deletions.
*/
@ -185,6 +191,7 @@ public enum Key {
private final String propertyName;
private final boolean bool;
// TODO create a private enum for KeyType to clarify these constructors.
private Key(String propertyName, boolean bool) {
this.propertyName = propertyName;
this.bool = bool;

View file

@ -0,0 +1,116 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.utils.developer.listeners;
import java.util.List;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelChangedListener;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import edu.cornell.mannlib.vitro.webapp.utils.developer.DeveloperSettings;
import edu.cornell.mannlib.vitro.webapp.utils.developer.Key;
/**
* If a particular developer flag is NOT set to true, this is transparent.
*
* Set the flag and this becomes opaque, passing no events through.
*/
public class DeveloperDisabledModelChangeListener implements
ModelChangedListener {
private final ModelChangedListener inner;
private final Key disablingKey;
public DeveloperDisabledModelChangeListener(ModelChangedListener inner,
Key disablingKey) {
this.inner = inner;
this.disablingKey = disablingKey;
}
private boolean isEnabled() {
return !DeveloperSettings.getInstance().getBoolean(disablingKey);
}
// ----------------------------------------------------------------------
// Delegated methods.
// ----------------------------------------------------------------------
@Override
public void addedStatement(Statement s) {
if (isEnabled()) {
inner.addedStatement(s);
}
}
@Override
public void addedStatements(Statement[] statements) {
if (isEnabled()) {
inner.addedStatements(statements);
}
}
@Override
public void addedStatements(List<Statement> statements) {
if (isEnabled()) {
inner.addedStatements(statements);
}
}
@Override
public void addedStatements(StmtIterator statements) {
if (isEnabled()) {
inner.addedStatements(statements);
}
}
@Override
public void addedStatements(Model m) {
if (isEnabled()) {
inner.addedStatements(m);
}
}
@Override
public void removedStatement(Statement s) {
if (isEnabled()) {
inner.removedStatement(s);
}
}
@Override
public void removedStatements(Statement[] statements) {
if (isEnabled()) {
inner.removedStatements(statements);
}
}
@Override
public void removedStatements(List<Statement> statements) {
if (isEnabled()) {
inner.removedStatements(statements);
}
}
@Override
public void removedStatements(StmtIterator statements) {
if (isEnabled()) {
inner.removedStatements(statements);
}
}
@Override
public void removedStatements(Model m) {
if (isEnabled()) {
inner.removedStatements(m);
}
}
@Override
public void notifyEvent(Model m, Object event) {
if (isEnabled()) {
inner.notifyEvent(m, event);
}
}
}

View file

@ -54,6 +54,7 @@ function DeveloperPanel(developerAjaxUrl) {
document.getElementById("developer_i18n_logStringRequests").disabled = !developerEnabled;
document.getElementById("developer_loggingRDFService_enable").disabled = !developerEnabled;
document.getElementById("developer_searchIndex_enable").disabled = !developerEnabled;
document.getElementById("developer_searchIndex_suppressModelChangeListener").disabled = !developerEnabled;
document.getElementById("developer_searchDeletions_enable").disabled = !developerEnabled;
document.getElementById("developer_searchEngine_enable").disabled = !developerEnabled;
document.getElementById("developer_authorization_logDecisions_enable").disabled = !developerEnabled;

View file

@ -96,17 +96,16 @@
<div id="developerTabSearch">
<div class="devright">
<div class="container">
Indexing
<@showCheckbox "developer_searchIndex_enable", "Log indexing." />
Searching
<@showCheckbox "developer_searchEngine_enable", "Log searches" />
<div class="within">
<@showCheckbox "developer_searchIndex_showDocuments",
"Show document contents" />
<@showTextbox "developer_searchIndex_uriOrNameRestriction",
"Restrict by URI or name" />
<@showTextbox "developer_searchIndex_documentRestriction",
"Restrict by document contents" />
<@showCheckbox "developer_searchEngine_addStackTrace", "Show stack trace" />
<@showCheckbox "developer_searchEngine_addResults", "Show search results" />
<@showTextbox "developer_searchEngine_queryRestriction",
"Restrict by query string" />
<@showTextbox "developer_searchEngine_stackRestriction",
"Restrict by calling stack" />
</div>
<@showCheckbox "developer_searchDeletions_enable", "Log deletions." />
</div>
<div class="container">
@ -118,16 +117,19 @@
<div class="devleft">
<div class="container">
Searching
<@showCheckbox "developer_searchEngine_enable", "Log searches" />
Indexing
<@showCheckbox "developer_searchIndex_enable", "Log indexing." />
<div class="within">
<@showCheckbox "developer_searchEngine_addStackTrace", "Show stack trace" />
<@showCheckbox "developer_searchEngine_addResults", "Show search results" />
<@showTextbox "developer_searchEngine_queryRestriction",
"Restrict by query string" />
<@showTextbox "developer_searchEngine_stackRestriction",
"Restrict by calling stack" />
<@showCheckbox "developer_searchIndex_showDocuments",
"Show document contents" />
<@showTextbox "developer_searchIndex_uriOrNameRestriction",
"Restrict by URI or name" />
<@showTextbox "developer_searchIndex_documentRestriction",
"Restrict by document contents" />
</div>
<@showCheckbox "developer_searchDeletions_enable", "Log deletions." />
<@showCheckbox "developer_searchIndex_suppressModelChangeListener",
"Suppress the automatic indexing of changed triples." />
</div>
</div>
</div>