com.liferay.marketplace.app.manager.web.internal.util.MarketplaceAppManagerSearchUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.marketplace.app.manager.web.internal.util.MarketplaceAppManagerSearchUtil.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.marketplace.app.manager.web.internal.util;

import com.liferay.marketplace.app.manager.web.internal.constants.BundleConstants;
import com.liferay.marketplace.app.manager.web.internal.constants.BundleStateConstants;
import com.liferay.portal.kernel.util.CharPool;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;

import java.util.ArrayList;
import java.util.Dictionary;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.osgi.framework.Bundle;

/**
 * @author Ryan Park
 */
public class MarketplaceAppManagerSearchUtil {

    public static List<Object> getResults(List<Bundle> bundles, String keywords) {

        List<Object> results = new ArrayList<>();

        String keywordsRegex = getKeywordsRegex(keywords);

        // App display

        List<AppDisplay> appDisplays = AppDisplayFactoryUtil.getAppDisplays(bundles, StringPool.BLANK,
                BundleStateConstants.ANY);

        for (AppDisplay appDisplay : appDisplays) {
            if (hasAppDisplayKeywordsMatch(appDisplay, keywordsRegex)) {
                results.add(appDisplay);
            }
        }

        // Bundle

        for (Bundle bundle : bundles) {
            if (hasBundleKeywordsMatch(bundle, keywordsRegex)) {
                results.add(bundle);
            }
        }

        // Module group display

        List<ModuleGroupDisplay> moduleGroupDisplays = new ArrayList<>();

        for (AppDisplay appDisplay : appDisplays) {
            if (appDisplay.hasModuleGroups()) {
                moduleGroupDisplays.addAll(appDisplay.getModuleGroupDisplays());
            }
        }

        for (ModuleGroupDisplay moduleGroupDisplay : moduleGroupDisplays) {
            if (hasModuleGroupDisplayKeywordsMatch(moduleGroupDisplay, keywordsRegex)) {

                results.add(moduleGroupDisplay);
            }
        }

        return results;
    }

    protected static boolean containsMatches(String regex, String string) {
        if (string == null) {
            return false;
        }

        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Matcher matcher = pattern.matcher(string);

        if (matcher.find()) {
            return true;
        } else {
            return false;
        }
    }

    protected static String getKeywordsRegex(String keywords) {
        keywords = StringUtil.replace(keywords, CharPool.SPACE, CharPool.PIPE);

        return StringPool.OPEN_PARENTHESIS + keywords + StringPool.CLOSE_PARENTHESIS;
    }

    protected static boolean hasAppDisplayKeywordsMatch(AppDisplay appDisplay, String keywordsRegex) {

        if (containsMatches(keywordsRegex, appDisplay.getTitle())
                || containsMatches(keywordsRegex, appDisplay.getDescription())) {

            return true;
        } else {
            return false;
        }
    }

    protected static boolean hasBundleKeywordsMatch(Bundle bundle, String keywordsRegex) {

        if (containsMatches(keywordsRegex, bundle.getSymbolicName())) {
            return true;
        }

        Dictionary<String, String> headers = bundle.getHeaders();

        String bundleDescription = headers.get(BundleConstants.BUNDLE_DESCRIPTION);

        if (containsMatches(keywordsRegex, bundleDescription)) {
            return true;
        }

        String bundleName = headers.get(BundleConstants.BUNDLE_NAME);

        if (containsMatches(keywordsRegex, bundleName)) {
            return true;
        }

        return false;
    }

    protected static boolean hasModuleGroupDisplayKeywordsMatch(ModuleGroupDisplay moduleGroupDisplay,
            String keywordsRegex) {

        if (containsMatches(keywordsRegex, moduleGroupDisplay.getTitle())
                || containsMatches(keywordsRegex, moduleGroupDisplay.getDescription())) {

            return true;
        } else {
            return false;
        }
    }

}