Package com.atlassian.labs.speakeasy.manager

Source Code of com.atlassian.labs.speakeasy.manager.SearchManager

package com.atlassian.labs.speakeasy.manager;

import com.atlassian.labs.speakeasy.model.SearchResult;
import com.atlassian.labs.speakeasy.model.SearchResults;
import com.atlassian.labs.speakeasy.util.BundleUtil;
import com.atlassian.plugin.Plugin;
import com.atlassian.plugin.osgi.util.OsgiHeaderUtil;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static com.google.common.collect.Lists.newArrayList;

/**
* Searches an extension for a regular expression
*/
@Component
public class SearchManager
{
    private final ExtensionManager extensionManager;
    private final BundleContext bundleContext;
    private static final Logger log = LoggerFactory.getLogger(SearchManager.class);

    @Autowired
    public SearchManager(ExtensionManager extensionManager, BundleContext bundleContext)
    {
        this.extensionManager = extensionManager;
        this.bundleContext = bundleContext;
    }

    public SearchResults search(String searchQuery)
    {
        Pattern pattern = Pattern.compile(searchQuery);
        List<SearchResult> results = newArrayList();
        for (Plugin plugin : extensionManager.getAllExtensionPlugins())
        {
            Bundle bundle = BundleUtil.findBundleForPlugin(bundleContext, plugin.getKey());
            SearchResult result = new SearchResult();
            result.setName(plugin.getName());
            result.setKey(plugin.getKey());
            if (isMatch(pattern, bundle))
            {
                results.add(result);
            }
        }
        SearchResults sr = new SearchResults();
        sr.setResults(results);
        return sr;
    }

    private boolean isMatch(Pattern pattern, Bundle bundle)
    {
        for (String path : BundleUtil.scanForPaths(bundle, "/"))
        {
            if (!path.endsWith("/"))
            {
                try
                {
                    String content = BundleUtil.readEntryToString(path, bundle);
                    Matcher m = pattern.matcher(content);
                    if (m.find())
                    {
                        return true;
                    }
                }
                catch (IOException ex)
                {
                    log.warn("Cannot search path '{}' in plugin '{}', skipping", path, OsgiHeaderUtil.getPluginKey(bundle));
                }
            }
        }
        return false;
    }
}
TOP

Related Classes of com.atlassian.labs.speakeasy.manager.SearchManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.