package org.ovirt.engine.ui.uicommonweb.models;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.common.EventNotificationEntity;
import org.ovirt.engine.core.common.businessentities.ActionGroup;
import org.ovirt.engine.core.common.mode.ApplicationMode;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.models.configure.roles_ui.RoleNode;
public class ApplicationModeHelper {
private static ApplicationMode UI_MODE = ApplicationMode.AllModes;
public static boolean isAvailableInMode(int availableModes) {
return (availableModes & UI_MODE.getValue()) > 0;
}
public static boolean isModeSupported(ApplicationMode mode) {
return isAvailableInMode(mode.getValue());
}
public static ApplicationMode getUiMode() {
return UI_MODE;
}
public static void setUiMode(ApplicationMode uiMode) {
if (uiMode != null) {
UI_MODE = uiMode;
}
}
public static ArrayList<EventNotificationEntity> getModeSpecificEventNotificationTypeList() {
ArrayList<EventNotificationEntity> subList = new ArrayList<>();
for (EventNotificationEntity entity : AsyncDataProvider.getInstance().getEventNotificationTypeList()) {
if ((entity.getAvailableInModes() & UI_MODE.getValue()) > 0) {
subList.add(entity);
}
}
return subList;
}
public static boolean filterActionGroupTreeByApplictionMode(RoleNode tree) {
ArrayList<RoleNode> list = new ArrayList<>();
for (RoleNode node : tree.getLeafRoles()) {
if (node.getLeafRoles() == null || node.getLeafRoles().isEmpty()) {
return (ActionGroup.valueOf(node.getName()).getAvailableInModes() & getUiMode().getValue()) == 0;
}
if (filterActionGroupTreeByApplictionMode(node)) {
list.add(node);
}
}
for (RoleNode roleNode : list) {
tree.getLeafRoles().remove(roleNode);
}
return tree.getLeafRoles().size() == 0;
}
public static boolean filterSystemTreeByApplictionMode(SystemTreeItemModel systemItem) {
List<SystemTreeItemModel> list = new ArrayList<>();
for (SystemTreeItemModel item : systemItem.getChildren()) {
if (filterSystemTreeByApplictionMode(item)) {
list.add(item);
}
}
if (list.size() > 0 && list.size() == systemItem.getChildren().size()) {
List<SystemTreeItemModel> childItems = new ArrayList<>();
for (SystemTreeItemModel item : list) {
childItems.addAll(item.getChildren());
}
systemItem.setChildren(childItems);
}
for (SystemTreeItemModel systemTreeItemModel : list) {
systemItem.getChildren().remove(systemTreeItemModel);
if(systemTreeItemModel.getChildren() != null && !systemItem.getChildren().containsAll(systemTreeItemModel.getChildren())) {
systemItem.getChildren().addAll(systemTreeItemModel.getChildren());
}
}
return !((systemItem.getApplicationMode().getValue() & getUiMode().getValue()) > 0);
}
}