Add a developer setting that will suppress automated search index updates.
This commit is contained in:
parent
39e7a818c2
commit
573a5e6cc6
5 changed files with 151 additions and 22 deletions
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue