Changeset 6848
- Timestamp:
- 11/25/15 14:18:20 (8 years ago)
- Location:
- SRUServer/trunk/src/main/java/eu/clarin/sru/server
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
SRUServer/trunk/src/main/java/eu/clarin/sru/server/SRUQueryParserRegistry.java
r6842 r6848 17 17 package eu.clarin.sru.server; 18 18 19 import java.util.ArrayList; 19 20 import java.util.Collections; 20 21 import java.util.List; 21 import java.util.concurrent.CopyOnWriteArrayList;22 22 23 23 24 24 /** 25 * Class for registering query parsers. The query parser for CQL will be26 * automatically registered.25 * A registry to keep track of registered {@link SRUQueryParser} to be used by 26 * the {@link SRUServer}. 27 27 * 28 28 * @see SRUQueryParser 29 29 */ 30 30 public class SRUQueryParserRegistry { 31 private CopyOnWriteArrayList<SRUQueryParser<?>> queryParsers = 32 new CopyOnWriteArrayList<SRUQueryParser<?>>(); 31 private final List<SRUQueryParser<?>> parsers; 33 32 34 33 … … 36 35 * Constructor. 37 36 */ 38 public SRUQueryParserRegistry() { 39 queryParsers.add(new CQLQueryParser()); 40 queryParsers.add(new SearchTermsQueryParser()); 41 } 42 43 44 /** 45 * Register a new query parser 46 * 47 * @param parser 48 * the query parser instance to be registered 49 * @throws SRUConfigException 50 * if a query parser for the same query type was already 51 * registered 52 */ 53 public void registerQueryParser(SRUQueryParser<?> parser) 54 throws SRUConfigException { 55 if (parser == null) { 56 throw new NullPointerException("parser == null"); 37 private SRUQueryParserRegistry(List<SRUQueryParser<?>> parsers) { 38 if (parsers == null) { 39 throw new NullPointerException("parsers == null"); 57 40 } 58 if (parser .getQueryType() == null) {59 throw new NullPointerException("parser.getQueryType() == null");41 if (parsers.isEmpty()) { 42 throw new IllegalArgumentException("parsers is empty!"); 60 43 } 61 synchronized (this) { 62 final String queryType = parser.getQueryType(); 63 for (SRUQueryParser<?> queryParser : queryParsers) { 64 if (queryType.equals(queryParser.getQueryType())) { 65 throw new SRUConfigException( 66 "query parser for queryType '" + queryType + 67 "' is already registered"); 68 } 69 } // for 70 queryParsers.add(parser); 71 } // synchronized (this) 44 this.parsers = Collections.unmodifiableList(parsers); 72 45 } 73 46 … … 85 58 throw new NullPointerException("queryType == null"); 86 59 } 87 for (SRUQueryParser<?> queryParser : queryParsers) { 88 if (queryType.equals(queryParser.getQueryType())) { 89 return queryParser; 60 return findParser(parsers, queryType); 61 } 62 63 64 /** 65 * Get a list of all registered query parsers. 66 * 67 * @return a list of registered query parsers 68 */ 69 public List<SRUQueryParser<?>> getQueryParsers() { 70 return parsers; 71 } 72 73 74 /** 75 * Builder for creating {@link SRUQueryParserRegistry} instances. 76 */ 77 public static class Builder { 78 private final List<SRUQueryParser<?>> parsers = 79 new ArrayList<SRUQueryParser<?>>(); 80 81 82 /** 83 * Constructor. 84 * 85 * @param registerDefaults 86 * if <code>true</code>, register SRU/CQL standard query 87 * parsers (queryType <em>cql</em> and <em>searchTerms</em>), 88 * otherwise do nothing 89 */ 90 public Builder(boolean registerDefaults) { 91 if (registerDefaults) { 92 registerDefaults(); 90 93 } 91 } // for 94 } 95 96 97 /** 98 * Constructor. Automaticaly registers registers SRU/CQL standard query 99 * parsers (queryType <em>cql</em> and <em>searchTerms</em>). 100 */ 101 public Builder() { 102 this(true); 103 } 104 105 106 public Builder registerDefaults() { 107 if (findParser(parsers, SRUConstants.SRU_QUERY_TYPE_CQL) == null) { 108 try { 109 register(new CQLQueryParser()); 110 } catch (SRUConfigException e) { 111 /* IGNORE */ 112 } 113 } 114 if (findParser(parsers, SRUConstants.SRU_QUERY_TYPE_SEARCH_TERMS) == null) { 115 try { 116 register(new SearchTermsQueryParser()); 117 } catch (SRUConfigException e) { 118 /* IGNORE */ 119 } 120 } 121 return this; 122 } 123 124 125 /** 126 * Register a new query parser 127 * 128 * @param parser 129 * the query parser instance to be registered 130 * @throws SRUConfigException 131 * if a query parser for the same query type was already 132 * registered 133 */ 134 public Builder register(SRUQueryParser<?> parser) throws SRUConfigException { 135 if (parser == null) { 136 throw new NullPointerException("parser == null"); 137 } 138 if (parser.getQueryType() == null) { 139 throw new NullPointerException("parser.getQueryType() == null"); 140 } 141 142 // duplicate-save add ... 143 if (findParser(parsers, parser.getQueryType()) == null) { 144 parsers.add(parser); 145 } else { 146 throw new SRUConfigException("query parser for queryType '" + 147 parser.getQueryType() + "' is already registered"); 148 } 149 150 return this; 151 } 152 153 154 /** 155 * Create a configured {@link SRUQueryParserRegistry} instance from this 156 * builder. 157 * 158 * @return a {@link SRUQueryParserRegistry} instance 159 */ 160 public SRUQueryParserRegistry build() { 161 return new SRUQueryParserRegistry(parsers); 162 } 163 } 164 165 166 private static final SRUQueryParser<?> findParser( 167 List<SRUQueryParser<?>> parsers, String queryType) { 168 for (SRUQueryParser<?> parser : parsers) { 169 if (queryType.equals(parser.getQueryType())) { 170 return parser; 171 } 172 } 92 173 return null; 93 174 } 94 175 95 96 public List<SRUQueryParser<?>> getQueryParsers() {97 return Collections.unmodifiableList(queryParsers);98 }99 100 176 } // class SRUQueryParserRegistry -
SRUServer/trunk/src/main/java/eu/clarin/sru/server/utils/SRUSearchEngineBase.java
r6825 r6848 30 30 import eu.clarin.sru.server.SRUSearchEngine; 31 31 import eu.clarin.sru.server.SRUSearchResultSet; 32 import eu.clarin.sru.server.SRUServer; 32 33 import eu.clarin.sru.server.SRUServerConfig; 33 34 … … 89 90 * @param config 90 91 * the {@link SRUServerConfig} object for this search engine 91 * @param queryParsers 92 * the {@link SRUQueryParserRegistry} object for this search 93 * engine. Register additional query parsers with this object. 92 * @param parsersRegistryBuilder 93 * the {@link SRUQueryParserRegistry.Builder} object to be used 94 * for this search engine. Use to register additional query 95 * parsers with the {@link SRUServer}. 94 96 * @param params 95 97 * additional parameters gathered from the Servlet configuration … … 100 102 public void init(ServletContext context, 101 103 SRUServerConfig config, 102 SRUQueryParserRegistry queryParsers,104 SRUQueryParserRegistry.Builder parsersRegistryBuilder, 103 105 Map<String, String> params) throws SRUConfigException { 104 106 } -
SRUServer/trunk/src/main/java/eu/clarin/sru/server/utils/SRUServerServlet.java
r6825 r6848 248 248 */ 249 249 try { 250 final SRUQueryParserRegistry parsers = new SRUQueryParserRegistry(); 251 searchEngine.init(ctx, sruServerConfig, parsers, params); 250 final SRUQueryParserRegistry.Builder builder = 251 new SRUQueryParserRegistry.Builder(); 252 searchEngine.init(ctx, sruServerConfig, builder, params); 253 final SRUQueryParserRegistry parsers = builder.build(); 252 254 sruServer = new SRUServer(sruServerConfig, parsers, searchEngine); 253 255 } catch (SRUConfigException e) {
Note: See TracChangeset
for help on using the changeset viewer.