
com.liferay.application.list.PanelAppRegistry Maven / Gradle / Ivy
/**
* 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.application.list;
import com.liferay.application.list.util.PanelCategoryServiceReferenceMapper;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMap;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapListener;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.Portlet;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.service.PortletLocalService;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.PredicateFilter;
import java.io.Serializable;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
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;
/**
* Provides methods for retrieving application instances defined by {@link
* PanelApp} implementations. The Applications Registry is an OSGi component.
* Applications used within the registry should also be OSGi components in order
* to be registered.
*
* @author Adolfo Pérez
*/
@Component(immediate = true, service = PanelAppRegistry.class)
public class PanelAppRegistry {
public PanelApp getFirstPanelApp(
String parentPanelCategoryKey, PermissionChecker permissionChecker,
Group group) {
List panelApps = getPanelApps(parentPanelCategoryKey);
for (PanelApp panelApp : panelApps) {
try {
if (panelApp.isShow(permissionChecker, group)) {
return panelApp;
}
}
catch (PortalException pe) {
_log.error(pe, pe);
}
}
return null;
}
public List getPanelApps(PanelCategory parentPanelCategory) {
return getPanelApps(parentPanelCategory.getKey());
}
public List getPanelApps(
PanelCategory parentPanelCategory,
final PermissionChecker permissionChecker, final Group group) {
return getPanelApps(
parentPanelCategory.getKey(), permissionChecker, group);
}
public List getPanelApps(String parentPanelCategoryKey) {
List panelApps = _serviceTrackerMap.getService(
parentPanelCategoryKey);
if (panelApps == null) {
return Collections.emptyList();
}
return panelApps;
}
public List getPanelApps(
String parentPanelCategoryKey,
final PermissionChecker permissionChecker, final Group group) {
List panelApps = getPanelApps(parentPanelCategoryKey);
if (panelApps.isEmpty()) {
return panelApps;
}
return ListUtil.filter(
panelApps,
new PredicateFilter() {
@Override
public boolean filter(PanelApp panelApp) {
try {
return panelApp.isShow(permissionChecker, group);
}
catch (PortalException pe) {
_log.error(pe, pe);
}
return false;
}
});
}
@Activate
protected void activate(BundleContext bundleContext) {
_serviceTrackerMap = ServiceTrackerMapFactory.openMultiValueMap(
bundleContext, PanelApp.class, "(panel.category.key=*)",
new PanelCategoryServiceReferenceMapper(),
new PanelAppOrderComparator(),
new PanelAppsServiceTrackerMapListener());
}
@Deactivate
protected void deactivate() {
_serviceTrackerMap.close();
}
@Reference(unbind = "-")
protected void setGroupProvider(GroupProvider groupProvider) {
this.groupProvider = groupProvider;
}
@Reference(unbind = "-")
protected void setPortletLocalService(
PortletLocalService portletLocalService) {
this.portletLocalService = portletLocalService;
}
protected GroupProvider groupProvider;
protected PortletLocalService portletLocalService;
private static final Log _log = LogFactoryUtil.getLog(
PanelAppRegistry.class);
private ServiceTrackerMap> _serviceTrackerMap;
private class PanelAppOrderComparator
implements Comparator>, Serializable {
@Override
public int compare(
ServiceReference serviceReference1,
ServiceReference serviceReference2) {
if (serviceReference1 == null) {
if (serviceReference2 == null) {
return 0;
}
else {
return 1;
}
}
else if (serviceReference2 == null) {
return -1;
}
Object propertyValue1 = serviceReference1.getProperty(
"panel.app.order");
Object propertyValue2 = serviceReference2.getProperty(
"panel.app.order");
if (propertyValue1 == null) {
if (propertyValue2 == null) {
return 0;
}
else {
return 1;
}
}
else if (propertyValue2 == null) {
return -1;
}
if (!(propertyValue2 instanceof Comparable)) {
return -serviceReference2.compareTo(serviceReference1);
}
Comparable
© 2015 - 2025 Weber Informatics LLC | Privacy Policy