PluginFinder.java 1.7 KB
Newer Older
1
package org.skywalking.apm.agent.core.plugin;
wu-sheng's avatar
wu-sheng 已提交
2 3

import java.util.HashMap;
4
import java.util.LinkedList;
wu-sheng's avatar
wu-sheng 已提交
5 6 7 8 9 10 11 12 13 14
import java.util.List;
import java.util.Map;

/**
 * The <code>PluginFinder</code> represents a finder , which assist to find the one
 * from the given {@link AbstractClassEnhancePluginDefine} list, by name match.
 *
 * @author wusheng
 */
public class PluginFinder {
15
    private final Map<String, LinkedList<AbstractClassEnhancePluginDefine>> pluginDefineMap = new HashMap<String, LinkedList<AbstractClassEnhancePluginDefine>>();
wu-sheng's avatar
wu-sheng 已提交
16 17 18 19 20 21 22 23 24

    public PluginFinder(List<AbstractClassEnhancePluginDefine> plugins) {
        for (AbstractClassEnhancePluginDefine plugin : plugins) {
            String enhanceClassName = plugin.enhanceClassName();

            if (enhanceClassName == null) {
                continue;
            }

25 26 27 28 29 30 31
            LinkedList<AbstractClassEnhancePluginDefine> pluginDefinesWithSameTarget = pluginDefineMap.get(enhanceClassName);
            if (pluginDefinesWithSameTarget == null) {
                pluginDefinesWithSameTarget = new LinkedList<AbstractClassEnhancePluginDefine>();
                pluginDefineMap.put(enhanceClassName, pluginDefinesWithSameTarget);
            }

            pluginDefinesWithSameTarget.add(plugin);
wu-sheng's avatar
wu-sheng 已提交
32 33 34
        }
    }

35
    public List<AbstractClassEnhancePluginDefine> find(String enhanceClassName) {
wu-sheng's avatar
wu-sheng 已提交
36 37 38 39
        if (pluginDefineMap.containsKey(enhanceClassName)) {
            return pluginDefineMap.get(enhanceClassName);
        }

40
        throw new PluginException("Can not find plugin:" + enhanceClassName);
wu-sheng's avatar
wu-sheng 已提交
41 42
    }

43
    public boolean exist(String enhanceClassName) {
wu-sheng's avatar
wu-sheng 已提交
44 45 46
        return pluginDefineMap.containsKey(enhanceClassName);
    }
}