diff --git a/elasticsearch/pack/src/webapp/WEB-INF/components.xml b/elasticsearch/pack/src/webapp/WEB-INF/components.xml index eea772d..30294c3 100644 --- a/elasticsearch/pack/src/webapp/WEB-INF/components.xml +++ b/elasticsearch/pack/src/webapp/WEB-INF/components.xml @@ -1,7 +1,7 @@ - - + @@ -15,7 +15,7 @@ - diff --git a/search-impl/impl/src/java/org/sakaiproject/search/adapter/SearchIndexBuilderAdapter.java b/search-impl/impl/src/java/org/sakaiproject/search/adapter/SearchIndexBuilderAdapter.java new file mode 100644 index 0000000..2ba3e95 --- /dev/null +++ b/search-impl/impl/src/java/org/sakaiproject/search/adapter/SearchIndexBuilderAdapter.java @@ -0,0 +1,116 @@ +package org.sakaiproject.search.adapter; + +import org.sakaiproject.component.cover.ComponentManager; +import org.sakaiproject.component.cover.ServerConfigurationService; +import org.sakaiproject.event.api.Event; +import org.sakaiproject.event.api.Notification; +import org.sakaiproject.search.api.EntityContentProducer; +import org.sakaiproject.search.api.SearchIndexBuilder; +import org.sakaiproject.search.model.SearchBuilderItem; + +import java.util.List; + +/** + * Simple adapter allowing to switch easily between Search implementations with a property in sakai.properties. + * + * @author Colin Hebert + */ +public class SearchIndexBuilderAdapter implements SearchIndexBuilder { + private static final String SEARCH_BUILDER_IMPL_PROPERTY = "search.indexbuilder.impl"; + /** + * Defaults to the elastic search implementation if nothing was provided. + */ + private static final String DEFAULT_IMPL = "org.sakaiproject.search.component.service.impl.SearchIndexBuilderImpl"; + private final SearchIndexBuilder searchIndexBuilder; + + public SearchIndexBuilderAdapter() { + String searchIndexBuilderImplementation = + ServerConfigurationService.getString(SEARCH_BUILDER_IMPL_PROPERTY, DEFAULT_IMPL); + searchIndexBuilder = (SearchIndexBuilder) ComponentManager.get(searchIndexBuilderImplementation); + } + + @Override + public void addResource(Notification notification, Event event) { + searchIndexBuilder.addResource(notification, event); + } + + @Override + public void registerEntityContentProducer(EntityContentProducer ecp) { + searchIndexBuilder.registerEntityContentProducer(ecp); + } + + @Override + public void refreshIndex() { + searchIndexBuilder.refreshIndex(); + } + + @Override + public void rebuildIndex() { + searchIndexBuilder.rebuildIndex(); + } + + @Override + public boolean isBuildQueueEmpty() { + return searchIndexBuilder.isBuildQueueEmpty(); + } + + @Override + public List getContentProducers() { + return searchIndexBuilder.getContentProducers(); + } + + @Override + public void destroy() { + searchIndexBuilder.destroy(); + } + + @Override + public int getPendingDocuments() { + return searchIndexBuilder.getPendingDocuments(); + } + + @Override + public void rebuildIndex(String currentSiteId) { + searchIndexBuilder.rebuildIndex(currentSiteId); + } + + @Override + public void refreshIndex(String currentSiteId) { + searchIndexBuilder.refreshIndex(currentSiteId); + } + + @Override + public List getAllSearchItems() { + return searchIndexBuilder.getAllSearchItems(); + } + + @Override + public EntityContentProducer newEntityContentProducer(Event event) { + return searchIndexBuilder.newEntityContentProducer(event); + } + + @Override + public EntityContentProducer newEntityContentProducer(String ref) { + return searchIndexBuilder.newEntityContentProducer(ref); + } + + @Override + public List getSiteMasterSearchItems() { + return searchIndexBuilder.getSiteMasterSearchItems(); + } + + @Override + public List getGlobalMasterSearchItems() { + return searchIndexBuilder.getGlobalMasterSearchItems(); + } + + @Override + public boolean isOnlyIndexSearchToolSites() { + return searchIndexBuilder.isOnlyIndexSearchToolSites(); + } + + @Override + public boolean isExcludeUserSites() { + return searchIndexBuilder.isExcludeUserSites(); + } +} diff --git a/search-impl/impl/src/java/org/sakaiproject/search/adapter/SearchServiceAdapter.java b/search-impl/impl/src/java/org/sakaiproject/search/adapter/SearchServiceAdapter.java new file mode 100644 index 0000000..6fdc74a --- /dev/null +++ b/search-impl/impl/src/java/org/sakaiproject/search/adapter/SearchServiceAdapter.java @@ -0,0 +1,172 @@ +package org.sakaiproject.search.adapter; + +import org.sakaiproject.component.cover.ComponentManager; +import org.sakaiproject.component.cover.ServerConfigurationService; +import org.sakaiproject.search.api.*; +import org.sakaiproject.search.model.SearchBuilderItem; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * Adapter allowing to easily switch the search implementation with a configuration in sakai.properties. + * + * @author Colin Hebert + */ +public class SearchServiceAdapter implements SearchService { + private static final String SEARCH_IMPL_PROPERTY = "search.service.impl"; + /** + * Defaults to the elastic search implementation if nothing was provided. + */ + private static final String DEFAULT_IMPL = "org.sakaiproject.search.component.service.impl.ConcurrentSearchServiceImpl"; + private final SearchService searchService; + + public SearchServiceAdapter() { + String searchServiceImplementation = ServerConfigurationService.getString(SEARCH_IMPL_PROPERTY, DEFAULT_IMPL); + searchService = (SearchService) ComponentManager.get(searchServiceImplementation); + } + + @Override + public SearchList search(String searchTerms, List contexts, int searchStart, int searchEnd) + throws InvalidSearchQueryException { + return searchService.search(searchTerms, contexts, searchStart, searchEnd); + } + + @Override + public SearchList search(String searchTerms, List contexts, int start, int end, + String filterName, String sorterName) + throws InvalidSearchQueryException { + return searchService.search(searchTerms, contexts, start, end, filterName, sorterName); + } + + @Override + public void registerFunction(String function) { + searchService.registerFunction(function); + } + + @Override + public void reload() { + searchService.reload(); + } + + @Override + public void refreshInstance() { + searchService.refreshInstance(); + } + + @Override + public void rebuildInstance() { + searchService.rebuildInstance(); + } + + @Override + public void refreshSite(String currentSiteId) { + searchService.refreshSite(currentSiteId); + } + + @Override + public void rebuildSite(String currentSiteId) { + searchService.rebuildSite(currentSiteId); + } + + @Override + public String getStatus() { + return searchService.getStatus(); + } + + @Override + public int getNDocs() { + return searchService.getNDocs(); + } + + @Override + public int getPendingDocs() { + return searchService.getPendingDocs(); + } + + @Override + public List getAllSearchItems() { + return searchService.getAllSearchItems(); + } + + @Override + public List getSiteMasterSearchItems() { + return searchService.getSiteMasterSearchItems(); + } + + @Override + public List getGlobalMasterSearchItems() { + return searchService.getGlobalMasterSearchItems(); + } + + @Override + public SearchStatus getSearchStatus() { + return searchService.getSearchStatus(); + } + + @Override + public boolean removeWorkerLock() { + return searchService.removeWorkerLock(); + } + + @Override + public List getSegmentInfo() { + return searchService.getSegmentInfo(); + } + + @Override + public void forceReload() { + searchService.forceReload(); + } + + @Override + public TermFrequency getTerms(int documentId) throws IOException { + return searchService.getTerms(documentId); + } + + @Override + public String searchXML(Map parameterMap) { + return searchService.searchXML(parameterMap); + } + + @Override + public boolean isEnabled() { + return searchService.isEnabled(); + } + + @Override + public String getDigestStoragePath() { + return searchService.getDigestStoragePath(); + } + + @Override + public String getSearchSuggestion(String searchString) { + return searchService.getSearchSuggestion(searchString); + } + + @Override + public String[] getSearchSuggestions(String searchString, String currentSite, boolean allMySites) { + return searchService.getSearchSuggestions(searchString, currentSite, allMySites); + } + + @Override + public boolean isSearchServer() { + return searchService.isSearchServer(); + } + + @Override + public void enableDiagnostics() { + searchService.enableDiagnostics(); + } + + @Override + public void disableDiagnostics() { + searchService.disableDiagnostics(); + } + + @Override + public boolean hasDiagnostics() { + return searchService.hasDiagnostics(); + } +} diff --git a/search-impl/pack/src/webapp/WEB-INF/components.xml b/search-impl/pack/src/webapp/WEB-INF/components.xml index 1ed4f96..dc4ef44 100644 --- a/search-impl/pack/src/webapp/WEB-INF/components.xml +++ b/search-impl/pack/src/webapp/WEB-INF/components.xml @@ -26,11 +26,14 @@ + - - - + + + + diff --git a/search-impl/pack/src/webapp/WEB-INF/coreSearchComponents.xml b/search-impl/pack/src/webapp/WEB-INF/coreSearchComponents.xml index 113dc31..d398df4 100644 --- a/search-impl/pack/src/webapp/WEB-INF/coreSearchComponents.xml +++ b/search-impl/pack/src/webapp/WEB-INF/coreSearchComponents.xml @@ -22,10 +22,10 @@ * **********************************************************************************/ --> - + - @@ -67,7 +67,7 @@ - diff --git a/search-impl/pack/src/webapp/WEB-INF/parallelIndexComponents.xml b/search-impl/pack/src/webapp/WEB-INF/parallelIndexComponents.xml index 8ce4b44..f70f392 100644 --- a/search-impl/pack/src/webapp/WEB-INF/parallelIndexComponents.xml +++ b/search-impl/pack/src/webapp/WEB-INF/parallelIndexComponents.xml @@ -22,7 +22,7 @@ * **********************************************************************************/ --> - + @@ -79,7 +79,7 @@ - @@ -119,7 +119,7 @@ -