private Helper createHelper() { //We must process all the system fields first to ensure that we don't overwrite custom fields with //the system fields. final SearchHandlerIndexer indexer = new SearchHandlerIndexer(); final Set<SearchableField> allSearchableFields = fieldManager.getSystemSearchableFields(); for (final SearchableField field : allSearchableFields) { indexer.indexSystemField(field); } // index any textQuerySearchHandler which doesn't have a field, but does have a searcher TextQuerySearchHandlerFactory textQuerySearchHandlerFactory = ComponentAccessor.getComponent(TextQuerySearchHandlerFactory.class); // TODO CJM replace with lazy ref to avoid circular dep if (textQuerySearchHandlerFactory != null) { indexer.indexSearchHandler(null, textQuerySearchHandlerFactory.createHandler(), true); } // Process all the system clause handlers, the JQL clause elements that are not associated with fields indexer.indexSystemClauseHandlers(systemClauseHandlerFactory.getSystemClauseSearchHandlers()); final List<CustomField> customField = customFieldManager.getCustomFieldObjects(); for (final CustomField field : customField) { indexer.indexCustomField(field); } for (JqlAlias jqlAlias : jqlAliasManager.getJqlAliases()) { indexer.indexJqlPropertyAlias(jqlAlias); } return new Helper(indexer); }
public Helper(final SearchHandlerIndexer indexer) { searcherIndex = indexer.createSearcherIdIndex(); handlerIndex = indexer.createHandlerIndex(); searcherGroup = indexer.createSearcherGroups(); searcherClauseNameIndex = indexer.createSearcherJqlNameIndex(); fieldIdToClauseNames = indexer.createFieldToClauseNamesIndex(); }
private void indexClauseHandlers(final SearchableField field, final Collection<? extends SearchHandler.ClauseRegistration> clauseHandlers, final boolean system) { for (final SearchHandler.ClauseRegistration clauseHandler : clauseHandlers) { indexClauseHandlerByJqlName(field, clauseHandler, system); } }
private void indexSearchHandler(final SearchableField field, final SearchHandler handler, final boolean system) { final SearchHandler.SearcherRegistration registration = handler.getSearcherRegistration(); if (registration != null) { indexSearcherById(field, registration.getIssueSearcher(), system); // NOTE: you must call indexClauseHandlers first since it is populating a map of system fields, I know this sucks a bit, sorry :) indexClauseHandlers(field, registration.getClauseHandlers(), system); indexSearcherByJqlName(field, registration, system); } indexClauseHandlers(field, handler.getClauseRegistrations(), system); }
public void indexSystemClauseHandlers(final Collection<SearchHandler> searchHandlers) { for (final SearchHandler searchHandler : searchHandlers) { indexClauseHandlers(null, searchHandler.getClauseRegistrations(), true); } }