/*
* 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.
*/
package org.apache.lucene.analysis.uima.ae;
import java.util.HashMap;
import java.util.Map;
/**
* Singleton factory class responsible of {@link AEProvider}s' creation
*/
public class AEProviderFactory {
private static final AEProviderFactory instance = new AEProviderFactory();
private final Map<String, AEProvider> providerCache = new HashMap<>();
private AEProviderFactory() {
// Singleton
}
public static AEProviderFactory getInstance() {
return instance;
}
/**
* @param keyPrefix a prefix of the key used to cache the AEProvider
* @param aePath the AnalysisEngine descriptor path
* @param runtimeParameters map of runtime parameters to configure inside the AnalysisEngine
* @return AEProvider
*/
public synchronized AEProvider getAEProvider(String keyPrefix, String aePath, Map<String, Object> runtimeParameters) {
String key = new StringBuilder(keyPrefix != null ? keyPrefix : "").append(aePath).append(runtimeParameters != null ?
runtimeParameters.toString() : "").toString();
if (providerCache.get(key) == null) {
AEProvider aeProvider;
if (runtimeParameters != null)
aeProvider = new OverridingParamsAEProvider(aePath, runtimeParameters);
else
aeProvider = new BasicAEProvider(aePath);
providerCache.put(key, aeProvider);
}
return providerCache.get(key);
}
/**
* @param aePath the AnalysisEngine descriptor path
* @return AEProvider
*/
public synchronized AEProvider getAEProvider(String aePath) {
return getAEProvider(null, aePath, null);
}
/**
* @param aePath the AnalysisEngine descriptor path
* @param runtimeParameters map of runtime parameters to configure inside the AnalysisEngine
* @return AEProvider
*/
public synchronized AEProvider getAEProvider(String aePath, Map<String, Object> runtimeParameters) {
return getAEProvider(null, aePath, runtimeParameters);
}
}