Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LPS-116757 Configuration Search not working implementing VisibilityController #91339

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -404,7 +404,7 @@ protected Dictionary<String, Object> toDictionary(
private ConfigurationFormRendererRetriever
_configurationFormRendererRetriever;

@Reference
@Reference(target = "(!(filter.visibility=*))")
private ConfigurationModelRetriever _configurationModelRetriever;

@Reference
Expand Down
Expand Up @@ -80,7 +80,7 @@ public boolean processAction(
private static final Log _log = LogFactoryUtil.getLog(
DeleteConfigurationMVCActionCommand.class);

@Reference
@Reference(target = "(!(filter.visibility=*))")
private ConfigurationModelRetriever _configurationModelRetriever;

}
Expand Up @@ -210,7 +210,7 @@ protected void deactivate() {
private ServiceTrackerMap<String, List<ConfigurationMenuItem>>
_configurationMenuItemsServiceTrackerMap;

@Reference
@Reference(target = "(filter.visibility=*)")
private ConfigurationModelRetriever _configurationModelRetriever;

@Reference
Expand Down
Expand Up @@ -317,7 +317,7 @@ protected Properties getProperties(
return properties;
}

@Reference
@Reference(target = "(filter.visibility=*)")
private ConfigurationModelRetriever _configurationModelRetriever;

}
Expand Up @@ -188,7 +188,7 @@ public String render(
@Reference
private ConfigurationEntryRetriever _configurationEntryRetriever;

@Reference
@Reference(target = "(filter.visibility=*)")
private ConfigurationModelRetriever _configurationModelRetriever;

@Reference
Expand Down
Expand Up @@ -161,7 +161,7 @@ protected void removeRenderCommand(
@Reference
private ConfigurationEntryRetriever _configurationEntryRetriever;

@Reference
@Reference(target = "(filter.visibility=*)")
private ConfigurationModelRetriever _configurationModelRetriever;

@Reference
Expand Down
Expand Up @@ -480,7 +480,7 @@ private void _setUID(
@Reference
private ConfigurationEntryRetriever _configurationEntryRetriever;

@Reference
@Reference(target = "(!(filter.visibility=*))")
private ConfigurationModelRetriever _configurationModelRetriever;

@Reference
Expand Down
Expand Up @@ -322,7 +322,7 @@ private void _registerConfigurationCategory(
private ServiceTrackerMap<String, ConfigurationCategory>
_configurationCategoryServiceTrackerMap;

@Reference
@Reference(target = "(filter.visibility=true)")
private ConfigurationModelRetriever _configurationModelRetriever;

private ServiceTrackerMap<String, ConfigurationScreen>
Expand Down
Expand Up @@ -14,10 +14,7 @@

package com.liferay.configuration.admin.web.internal.util;

import com.liferay.configuration.admin.display.ConfigurationVisibilityController;
import com.liferay.configuration.admin.web.internal.model.ConfigurationModel;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMap;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory;
import com.liferay.petra.reflect.ReflectionUtil;
import com.liferay.petra.string.StringBundler;
import com.liferay.petra.string.StringPool;
Expand Down Expand Up @@ -50,7 +47,6 @@
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;

/**
Expand Down Expand Up @@ -225,11 +221,6 @@ public List<ConfigurationModel> getFactoryInstances(
@Activate
protected void activate(BundleContext bundleContext) {
_bundleContext = bundleContext;

_configurationVisibilityControllerServiceTrackerMap =
ServiceTrackerMapFactory.openSingleValueMap(
_bundleContext, ConfigurationVisibilityController.class,
"configuration.pid");
}

protected void collectConfigurationModels(
Expand Down Expand Up @@ -269,11 +260,6 @@ protected void collectConfigurationModels(
}
}

@Deactivate
protected void deactivate() {
_configurationVisibilityControllerServiceTrackerMap.close();
}

protected String getAndFilterString(String... filterStrings) {
return getLogicalOperatorFilterString(
StringPool.AMPERSAND, filterStrings);
Expand All @@ -293,15 +279,6 @@ protected ConfigurationModel getConfigurationModel(
extendedMetaTypeInformation.getObjectClassDefinition(pid, locale),
factory);

ConfigurationVisibilityController configurationVisibilityController =
_configurationVisibilityControllerServiceTrackerMap.getService(pid);

if ((configurationVisibilityController != null) &&
!configurationVisibilityController.isVisible(scope, scopePK)) {

return null;
}

if (scope.equals(scope.COMPANY) && configurationModel.isSystemScope()) {
return null;
}
Expand Down Expand Up @@ -427,9 +404,6 @@ protected String getPropertyFilterString(String key, String value) {
@Reference
private ConfigurationAdmin _configurationAdmin;

private ServiceTrackerMap<String, ConfigurationVisibilityController>
_configurationVisibilityControllerServiceTrackerMap;

@Reference
private ExtendedMetaTypeService _extendedMetaTypeService;

Expand Down
@@ -0,0 +1,66 @@
/**
* 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.configuration.admin.web.internal.util;

import com.liferay.configuration.admin.display.ConfigurationVisibilityController;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMap;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory;
import com.liferay.portal.configuration.metatype.annotations.ExtendedObjectClassDefinition;

import java.io.Serializable;

import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;

/**
* @author Drew Brokke
*/
public class ConfigurationVisibilityUtil {

public static boolean isVisible(
String pid, ExtendedObjectClassDefinition.Scope scope,
Serializable scopePK) {

ConfigurationVisibilityController configurationVisibilityController =
_getVisibilityController(pid);

return configurationVisibilityController.isVisible(scope, scopePK);
}

private static ConfigurationVisibilityController _getVisibilityController(
String pid) {

if (_serviceTrackerMap.containsKey(pid)) {
return _serviceTrackerMap.getService(pid);
}

return _defaultVisibilityController;
}

private static final ConfigurationVisibilityController
_defaultVisibilityController = (scope, scopePK) -> true;
private static final ServiceTrackerMap
<String, ConfigurationVisibilityController> _serviceTrackerMap;

static {
Bundle bundle = FrameworkUtil.getBundle(
ConfigurationVisibilityController.class);

_serviceTrackerMap = ServiceTrackerMapFactory.openSingleValueMap(
bundle.getBundleContext(), ConfigurationVisibilityController.class,
"configuration.pid");
}

}
@@ -0,0 +1,149 @@
/**
* 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.configuration.admin.web.internal.util;

import com.liferay.configuration.admin.web.internal.model.ConfigurationModel;
import com.liferay.portal.configuration.metatype.annotations.ExtendedObjectClassDefinition;

import java.io.IOException;
import java.io.Serializable;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.osgi.framework.Bundle;
import org.osgi.service.cm.Configuration;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
* @author Drew Brokke
*/
@Component(
immediate = true, property = "filter.visibility=true",
service = ConfigurationModelRetriever.class
)
public class FilterVisibilityConfigurationModelRetrieverWrapper
implements ConfigurationModelRetriever {

@Override
public Map<String, Set<ConfigurationModel>> categorizeConfigurationModels(
Map<String, ConfigurationModel> configurationModels) {

return _configurationModelRetriever.categorizeConfigurationModels(
configurationModels);
}

@Override
public Configuration getConfiguration(
String pid, ExtendedObjectClassDefinition.Scope scope,
Serializable scopePK) {

if (!ConfigurationVisibilityUtil.isVisible(pid, scope, scopePK)) {
return null;
}

return _configurationModelRetriever.getConfiguration(
pid, scope, scopePK);
}

@Override
public Map<String, ConfigurationModel> getConfigurationModels(
Bundle bundle, ExtendedObjectClassDefinition.Scope scope,
Serializable scopePK) {

Map<String, ConfigurationModel> configurationModels =
_configurationModelRetriever.getConfigurationModels(
bundle, scope, scopePK);

_filterVisibility(scope, scopePK, configurationModels);

return configurationModels;
}

@Override
public Map<String, ConfigurationModel> getConfigurationModels(
ExtendedObjectClassDefinition.Scope scope, Serializable scopePK) {

Map<String, ConfigurationModel> configurationModels =
_configurationModelRetriever.getConfigurationModels(scope, scopePK);

_filterVisibility(scope, scopePK, configurationModels);

return configurationModels;
}

@Override
public Map<String, ConfigurationModel> getConfigurationModels(
String locale, ExtendedObjectClassDefinition.Scope scope,
Serializable scopePK) {

Map<String, ConfigurationModel> configurationModels =
_configurationModelRetriever.getConfigurationModels(
locale, scope, scopePK);

_filterVisibility(scope, scopePK, configurationModels);

return configurationModels;
}

@Override
public Set<ConfigurationModel> getConfigurationModels(
String configurationCategory, String languageId,
ExtendedObjectClassDefinition.Scope scope, Serializable scopePK) {

Set<ConfigurationModel> configurationModels =
_configurationModelRetriever.getConfigurationModels(
configurationCategory, languageId, scope, scopePK);

configurationModels.removeIf(
configurationModel -> !ConfigurationVisibilityUtil.isVisible(
configurationModel.getFactoryPid(), scope, scopePK));

return configurationModels;
}

@Override
public List<ConfigurationModel> getFactoryInstances(
ConfigurationModel factoryConfigurationModel,
ExtendedObjectClassDefinition.Scope scope, Serializable scopePK)
throws IOException {

if (!ConfigurationVisibilityUtil.isVisible(
factoryConfigurationModel.getFactoryPid(), scope, scopePK)) {

return Collections.emptyList();
}

return _configurationModelRetriever.getFactoryInstances(
factoryConfigurationModel, scope, scopePK);
}

private void _filterVisibility(
ExtendedObjectClassDefinition.Scope scope, Serializable scopePK,
Map<String, ConfigurationModel> configurationModelMap) {

Set<String> keySet = configurationModelMap.keySet();

keySet.removeIf(
key -> !ConfigurationVisibilityUtil.isVisible(key, scope, scopePK));
}

@Reference(target = "(!(filter.visibility=*))")
private ConfigurationModelRetriever _configurationModelRetriever;

}