+++ /dev/null
-package org.apache.lucene.benchmark.byTask.tasks;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.benchmark.byTask.PerfRunData;
-
-/**
- * Task to support benchmarking collation.
- * <p>
- * <ul>
- * <li> <code>NewCollationAnalyzer</code> with the default jdk impl
- * <li> <code>NewCollationAnalyzer(impl:icu)</code> specify an impl (jdk,icu)
- * </ul>
- * </p>
- */
-public class NewCollationAnalyzerTask extends PerfTask {
- public enum Implementation {
- JDK("org.apache.lucene.collation.CollationKeyAnalyzer",
- "java.text.Collator"),
- ICU("org.apache.lucene.collation.ICUCollationKeyAnalyzer",
- "com.ibm.icu.text.Collator");
-
- String className;
- String collatorClassName;
-
- Implementation(String className, String collatorClassName) {
- this.className = className;
- this.collatorClassName = collatorClassName;
- }
- }
-
- private Implementation impl = Implementation.JDK;
-
- public NewCollationAnalyzerTask(PerfRunData runData) {
- super(runData);
- }
-
- static Analyzer createAnalyzer(Locale locale, Implementation impl)
- throws Exception {
- final Class<?> collatorClazz = Class.forName(impl.collatorClassName);
- Method collatorMethod = collatorClazz.getMethod("getInstance",
- new Class[] {Locale.class});
- Object collator = collatorMethod.invoke(null, locale);
-
- final Class<? extends Analyzer> clazz = Class.forName(impl.className)
- .asSubclass(Analyzer.class);
- Constructor<? extends Analyzer> ctor = clazz.getConstructor(collatorClazz);
- return ctor.newInstance(collator);
- }
-
- @Override
- public int doLogic() throws Exception {
- try {
- Locale locale = getRunData().getLocale();
- if (locale == null) throw new RuntimeException(
- "Locale must be set with the NewLocale task!");
- Analyzer analyzer = createAnalyzer(locale, impl);
- getRunData().setAnalyzer(analyzer);
- System.out.println("Changed Analyzer to: "
- + analyzer.getClass().getName() + "(" + locale + ")");
- } catch (Exception e) {
- throw new RuntimeException("Error creating Analyzer: impl=" + impl, e);
- }
- return 1;
- }
-
- @Override
- public void setParams(String params) {
- super.setParams(params);
-
- StringTokenizer st = new StringTokenizer(params, ",");
- while (st.hasMoreTokens()) {
- String param = st.nextToken();
- StringTokenizer expr = new StringTokenizer(param, ":");
- String key = expr.nextToken();
- String value = expr.nextToken();
- // for now we only support the "impl" parameter.
- // TODO: add strength, decomposition, etc
- if (key.equals("impl")) {
- if (value.equalsIgnoreCase("icu"))
- impl = Implementation.ICU;
- else if (value.equalsIgnoreCase("jdk"))
- impl = Implementation.JDK;
- else
- throw new RuntimeException("Unknown parameter " + param);
- } else {
- throw new RuntimeException("Unknown parameter " + param);
- }
- }
- }
-
- @Override
- public boolean supportsParams() {
- return true;
- }
-}