/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.wso2.siddhi.core.util.extension.holder;
import org.apache.log4j.Logger;
import org.wso2.siddhi.core.config.ExecutionPlanContext;
import org.wso2.siddhi.core.util.SiddhiConstants;
import java.util.HashMap;
import java.util.Map;
/**
* Abstract Holder class to retrieve added extensions and store them in a map.
*/
public abstract class AbstractExtensionHolder {
private static final Logger log = Logger.getLogger(AbstractExtensionHolder.class);
protected Map<String, Class> extensionMap = new HashMap<String, Class>();
protected AbstractExtensionHolder(Class clazz, ExecutionPlanContext executionPlanContext) {
Map<String, Class> extensions = executionPlanContext.getSiddhiContext().getSiddhiExtensions();
if (extensions != null) {
for (String extensionKey : executionPlanContext.getSiddhiContext().getSiddhiExtensions().keySet()) {
Class extension = extensions.get(extensionKey);
if (clazz.isAssignableFrom(extension)) {
if (extensionMap.containsKey(extensionKey)) {
log.error("Extension class " + extension.getName() + " not loaded, as there is already an" +
" matching extension '" + extensionKey + "' implemented as " + extensionMap
.get
(extensionKey).getName());
} else {
extensionMap.put(extensionKey, extension);
}
}
}
}
}
public Class getExtension(String namespace, String function) {
if (!namespace.isEmpty()) {
return extensionMap.get(namespace + SiddhiConstants.EXTENSION_SEPARATOR + function);
} else {
return extensionMap.get(function);
}
}
}