/**
* 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.display.context.logic;
import com.liferay.application.list.PanelApp;
import com.liferay.application.list.PanelAppRegistry;
import com.liferay.application.list.PanelCategory;
import com.liferay.application.list.PanelCategoryRegistry;
import com.liferay.application.list.constants.PanelCategoryKeys;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import java.util.ArrayList;
import java.util.List;
/**
* @author Adolfo PĂ©rez
*/
public class PanelCategoryHelper {
public PanelCategoryHelper(
PanelAppRegistry panelAppRegistry,
PanelCategoryRegistry panelCategoryRegistry) {
_panelAppRegistry = panelAppRegistry;
_panelCategoryRegistry = panelCategoryRegistry;
}
public boolean containsPortlet(String portletId, String panelCategoryKey) {
for (PanelCategory curPanelCategory :
_panelCategoryRegistry.getChildPanelCategories(
panelCategoryKey)) {
if (hasPortlet(portletId, curPanelCategory.getKey())) {
return true;
}
if (containsPortlet(portletId, curPanelCategory.getKey())) {
return true;
}
}
return hasPortlet(portletId, panelCategoryKey);
}
public boolean containsPortlet(
String portletId, String panelCategoryKey,
PermissionChecker permissionChecker, Group group) {
for (PanelCategory curPanelCategory :
_panelCategoryRegistry.getChildPanelCategories(
panelCategoryKey, permissionChecker, group)) {
if (hasPortlet(
portletId, curPanelCategory.getKey(), permissionChecker,
group)) {
return true;
}
if (containsPortlet(
portletId, curPanelCategory.getKey(), permissionChecker,
group)) {
return true;
}
}
return hasPortlet(
portletId, panelCategoryKey, permissionChecker, group);
}
public List<PanelApp> getAllPanelApps(String panelCategoryKey) {
List<PanelApp> panelApps = new ArrayList<>();
panelApps.addAll(_panelAppRegistry.getPanelApps(panelCategoryKey));
for (PanelCategory childPanelCategory :
_panelCategoryRegistry.getChildPanelCategories(
panelCategoryKey)) {
panelApps.addAll(getAllPanelApps(childPanelCategory.getKey()));
}
return panelApps;
}
public String getFirstPortletId(
String panelCategoryKey, PermissionChecker permissionChecker,
Group group) {
PanelApp panelApp = _panelAppRegistry.getFirstPanelApp(
panelCategoryKey, permissionChecker, group);
if (panelApp != null) {
return panelApp.getPortletId();
}
List<PanelCategory> panelCategories =
_panelCategoryRegistry.getChildPanelCategories(
panelCategoryKey, permissionChecker, group);
if (panelCategories.isEmpty()) {
return null;
}
for (PanelCategory panelCategory : panelCategories) {
panelApp = _panelAppRegistry.getFirstPanelApp(
panelCategory.getKey(), permissionChecker, group);
if (panelApp != null) {
return panelApp.getPortletId();
}
}
return null;
}
public int getNotificationsCount(
String panelCategoryKey, PermissionChecker permissionChecker,
Group group, User user) {
int count =
_panelCategoryRegistry.getChildPanelCategoriesNotificationsCount(
this, panelCategoryKey, permissionChecker, group, user);
count += _panelAppRegistry.getPanelAppsNotificationsCount(
panelCategoryKey, permissionChecker, group, user);
return count;
}
public boolean hasPanelApp(String portletId) {
return containsPortlet(portletId, PanelCategoryKeys.ROOT);
}
protected boolean hasPortlet(String portletId, String panelCategoryKey) {
Iterable<PanelApp> panelApps = _panelAppRegistry.getPanelApps(
panelCategoryKey);
for (PanelApp panelApp : panelApps) {
if (portletId.equals(panelApp.getPortletId())) {
return true;
}
}
return false;
}
protected boolean hasPortlet(
String portletId, String panelCategoryKey,
PermissionChecker permissionChecker, Group group) {
Iterable<PanelApp> panelApps = _panelAppRegistry.getPanelApps(
panelCategoryKey, permissionChecker, group);
for (PanelApp panelApp : panelApps) {
if (portletId.equals(panelApp.getPortletId())) {
return true;
}
}
return false;
}
private final PanelAppRegistry _panelAppRegistry;
private final PanelCategoryRegistry _panelCategoryRegistry;
}