package org.ovirt.engine.ui.uicommonweb.models.configure.roles_ui; import java.util.ArrayList; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.RoleType; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper; import org.ovirt.engine.ui.uicommonweb.models.common.SelectionTreeNodeModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.UIConstants; public class RoleTreeView { public static ArrayList<SelectionTreeNodeModel> getRoleTreeView(boolean isReadOnly, boolean isAdmin) { RoleNode tree = initTreeView(); ArrayList<SelectionTreeNodeModel> roleTreeView = new ArrayList<>(); SelectionTreeNodeModel firstNode; SelectionTreeNodeModel secondNode; SelectionTreeNodeModel thirdNode; for (RoleNode first : tree.getLeafRoles()) { firstNode = createSelectionTreeNodeModel(isReadOnly, first); for (RoleNode second : first.getLeafRoles()) { secondNode = createSelectionTreeNodeModel(isReadOnly, second); secondNode.setTooltip(second.getTooltip()); for (RoleNode third : second.getLeafRoles()) { thirdNode = createLeafSelectionTreeNodeModel(isReadOnly, third); if (isAdmin || isUser(thirdNode)) { secondNode.getChildren().add(thirdNode); } } if (secondNode.getChildren().size() > 0) { firstNode.getChildren().add(secondNode); } } if (firstNode.getChildren().size() > 0) { roleTreeView.add(firstNode); } } return roleTreeView; } protected static SelectionTreeNodeModel createLeafSelectionTreeNodeModel(boolean isReadOnly, RoleNode third) { SelectionTreeNodeModel thirdNode; thirdNode = createSelectionTreeNodeModel(isReadOnly, third); thirdNode.setIsSelectedNotificationPrevent(true); thirdNode.setIsSelectedNullable(false); thirdNode.setTooltip(third.getTooltip()); return thirdNode; } protected static boolean isUser(SelectionTreeNodeModel thirdNode) { return ActionGroup.valueOf(thirdNode.getTitle()).getRoleType() == RoleType.USER; } protected static SelectionTreeNodeModel createSelectionTreeNodeModel(boolean isReadOnly, RoleNode roleNode) { SelectionTreeNodeModel nodeModel; nodeModel = new SelectionTreeNodeModel(); nodeModel.setTitle(roleNode.getName()); nodeModel.setDescription(roleNode.getDesc()); nodeModel.setIsChangeable(!isReadOnly); return nodeModel; } private static RoleNode categoryNode(String name, RoleNode... leaves) { return new RoleNode(name, leaves); } private static RoleNode categoryNode(String name, String tooltip, RoleNode... leaves) { return new RoleNode(name, tooltip, leaves); } private static RoleNode roleNode(ActionGroup actionGroup, String tooltip) { return new RoleNode(actionGroup, tooltip); } private static RoleNode initTreeView() { RoleNode tree = categoryNode(getConstants().rootRoleTree(), createSystemRoleTree(), createDataCenterRoleTree(), createNetworkRoleTree(), createStorageDomainRoleTree(), createClusterRoleTree(), createGlusterRoleTree(), createHostRoleTree(), createTemplateRoleTree(), createVmRoleTree(), createVmPoolRoleTree(), createDiskRoleTree(), createCpuRoleTree(), createMacPoolRoleTree()); // nothing to filter if (!ApplicationModeHelper.getUiMode().equals(ApplicationMode.AllModes)) { ApplicationModeHelper.filterActionGroupTreeByApplictionMode(tree); } return tree; } protected static RoleNode createMacPoolRoleTree() { return categoryNode(getConstants().macPoolTree(), categoryNode(getConstants().basicOperationsRoleTree(), roleNode(ActionGroup.CREATE_MAC_POOL, getConstants().allowToCreateMacPoolTooltip()), roleNode(ActionGroup.EDIT_MAC_POOL, getConstants().allowToEditMacPoolTooltip()), roleNode(ActionGroup.DELETE_MAC_POOL, getConstants().allowToDeleteMacPoolTooltip()), roleNode(ActionGroup.CONFIGURE_MAC_POOL, getConstants().allowToUseMacPoolTooltip()) ) ); } protected static RoleNode createDiskRoleTree() { return categoryNode(getConstants().diskRoleTree(), categoryNode(getConstants().provisioningOperationsRoleTree(), getConstants().notePermissionsContainingDiskOperationsRoleTreeTooltip(), roleNode(ActionGroup.CREATE_DISK, getConstants().allowToCreateDiskRoleTreeTooltip()), roleNode(ActionGroup.DELETE_DISK, getConstants().allowToDeleteDiskRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_DISK_STORAGE, getConstants().allowToMoveDiskToAnotherStorageDomainRoleTreeTooltip()), roleNode(ActionGroup.ATTACH_DISK, getConstants().allowToAttachDiskToVmRoleTreeTooltip()), roleNode(ActionGroup.SPARSIFY_DISK, getConstants().allowToSparsifyDiskToVmRoleTreeTooltip()), roleNode(ActionGroup.EDIT_DISK_PROPERTIES, getConstants().allowToChangePropertiesOfTheDiskRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_SCSI_GENERIC_IO, getConstants().allowToChangeSGIORoleTreeTooltip()), roleNode(ActionGroup.ACCESS_IMAGE_STORAGE, getConstants().allowAccessImageDomainRoleTreeTooltip()), roleNode(ActionGroup.DISK_LIVE_STORAGE_MIGRATION, getConstants().allowToLiveMigrateDiskToAnotherStorageDomainRoleTreeTooltip())), categoryNode(getConstants().attachDiskProfileRoleTree(), getConstants().notePermissionsContainingDiskProfileOperationsRoleTreeTooltip(), roleNode(ActionGroup.ATTACH_DISK_PROFILE, getConstants().allowToAttachDiskProfileToDiskRoleTreeTooltip()) ) ); } protected static RoleNode createCpuRoleTree() { return categoryNode(getConstants().cpuProfileRoleTree(), categoryNode(getConstants().provisioningOperationsRoleTree(), getConstants().notePermissionsContainingCpuProfileProvisioningOperationsRoleTreeTooltip(), roleNode(ActionGroup.CREATE_CPU_PROFILE, getConstants().allowToCreateCpuRoleTreeTooltip()), roleNode(ActionGroup.DELETE_CPU_PROFILE, getConstants().allowToDeleteCpuRoleTreeTooltip()), roleNode(ActionGroup.UPDATE_CPU_PROFILE, getConstants().allowToUpdateCpuProfileRoleTreeTooltip())), categoryNode(getConstants().administrationOperationsRoleTree(), getConstants().notePermissionsContainingCpuProfileAdministrationOperationsRoleTreeTooltip(), roleNode(ActionGroup.ASSIGN_CPU_PROFILE, getConstants().allowToAssignCpuRoleTreeToolTip()))); } protected static RoleNode createVmPoolRoleTree() { return categoryNode(getConstants().vmPoolRoleTree(), categoryNode(getConstants().basicOperationsRoleTree(), roleNode(ActionGroup.VM_POOL_BASIC_OPERATIONS, getConstants().allowToRunPauseStopVmFromVmPoolRoleTreeTooltip()) ), categoryNode(getConstants().provisioningOperationsRoleTree(), getConstants().notePermissionsContainigTheseOperationsShuoldAssociatSdOrAboveRoleTreeTooltip(), roleNode(ActionGroup.CREATE_VM_POOL, getConstants().allowToCreateVmPoolRoleTreeTooltip()), roleNode(ActionGroup.DELETE_VM_POOL, getConstants().allowToDeleteVmPoolRoleTreeTooltip()), roleNode(ActionGroup.EDIT_VM_POOL_CONFIGURATION, getConstants().allowToChangePropertiesOfTheVmPoolRoleTreeTooltip())) ); } protected static RoleNode createVmRoleTree() { return categoryNode(getConstants().vmRoleTree(), categoryNode(getConstants().basicOperationsRoleTree(), roleNode(ActionGroup.REBOOT_VM, getConstants().allowBasicVmOperationsRoleTreeTooltip()), roleNode(ActionGroup.STOP_VM, getConstants().allowBasicVmOperationsRoleTreeTooltip()), roleNode(ActionGroup.SHUT_DOWN_VM, getConstants().allowBasicVmOperationsRoleTreeTooltip()), roleNode(ActionGroup.HIBERNATE_VM, getConstants().allowBasicVmOperationsRoleTreeTooltip()), roleNode(ActionGroup.RUN_VM, getConstants().allowBasicVmOperationsRoleTreeTooltip()), roleNode(ActionGroup.CHANGE_VM_CD, getConstants().allowToAttachCdToTheVmRoleTreeTooltip()), roleNode(ActionGroup.CONNECT_TO_VM, getConstants().allowViewingTheVmConsoleScreenRoleTreeTooltip())), categoryNode(getConstants().provisioningOperationsRoleTree(), getConstants().notePermissionsContainigTheseOperationsShuoldAssociatSdOrAboveRoleTreeTooltip(), roleNode(ActionGroup.EDIT_VM_PROPERTIES, getConstants().allowChangeVmPropertiesRoleTreeTooltip()), roleNode(ActionGroup.CREATE_VM, getConstants().allowToCreateNewVmsRoleTreeTooltip()), roleNode(ActionGroup.CREATE_INSTANCE, getConstants().allowToCreateNewInstnaceRoleTreeTooltip()), roleNode(ActionGroup.DELETE_VM, getConstants().allowToRemoveVmsFromTheSystemRoleTreeTooltip()), roleNode(ActionGroup.IMPORT_EXPORT_VM, getConstants().allowImportExportOperationsRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_VM_STORAGE, getConstants().allowToAddRemoveDiskToTheVmRoleTreeTooltip()), roleNode(ActionGroup.MANIPULATE_VM_SNAPSHOTS, getConstants().allowToCreateDeleteSnapshotsOfTheVmRoleTreeTooltip())), categoryNode(getConstants().administrationOperationsRoleTree(), getConstants().notePermissionsContainigTheseOperationsShuoldAssociatDcOrEqualRoleTreeTooltip(), roleNode(ActionGroup.MOVE_VM, getConstants().allowToMoveVmImageToAnotherStorageDomainRoleTreeTooltip()), roleNode(ActionGroup.MIGRATE_VM, getConstants().allowMigratingVmBetweenHostsInClusterRoleTreeTooltip()), roleNode(ActionGroup.CHANGE_VM_CUSTOM_PROPERTIES, getConstants().allowToChangeVmCustomPropertiesRoleTreeTooltip()), roleNode(ActionGroup.EDIT_ADMIN_VM_PROPERTIES, getConstants().allowChangingVmAdminPropertiesRoleTreeTooltip()), roleNode(ActionGroup.CONNECT_TO_SERIAL_CONSOLE, getConstants().allowConnectingToVmSerialConsoleRoleTreeTooltip()), roleNode(ActionGroup.RECONNECT_TO_VM, getConstants().allowReconnectToVmRoleTreeTooltip()))); } protected static RoleNode createTemplateRoleTree() { return categoryNode(getConstants().templateRoleTree(), categoryNode(getConstants().basicOperationsRoleTree(), roleNode(ActionGroup.EDIT_TEMPLATE_PROPERTIES, getConstants().allowToChangeTemplatePropertiesRoleTreeTooltip()) ), categoryNode(getConstants().provisioningOperationsRoleTree(), getConstants().notePermissionsContainigTheseOperationsShuoldAssociatSdOrAboveRoleTreeTooltip(), roleNode(ActionGroup.CREATE_TEMPLATE, getConstants().allowToCreateNewTemplateRoleTreeTooltip()), roleNode(ActionGroup.DELETE_TEMPLATE, getConstants().allowToRemoveExistingTemplateRoleTreeTooltip()), roleNode(ActionGroup.IMPORT_EXPORT_VM, getConstants().allowImportExportOperationsRoleTreeTooltip()), roleNode(ActionGroup.COPY_TEMPLATE, getConstants().allowToCopyTemplateBetweenStorageDomainsRoleTreeTooltip())), categoryNode(getConstants().administrationOperationsRoleTree(), getConstants().notePermissionsContainigTheseOperationsShuoldAssociatDcOrEqualRoleTreeTooltip(), roleNode(ActionGroup.EDIT_ADMIN_TEMPLATE_PROPERTIES, getConstants().allowChangingTemplateAdminPropertiesRoleTreeTooltip()) ) ); } private static UIConstants getConstants() { return ConstantsManager.getInstance().getConstants(); } protected static RoleNode createHostRoleTree() { return categoryNode(getConstants().hostRoleTree(), categoryNode(getConstants().configureHostRoleTree(), roleNode(ActionGroup.CREATE_HOST, getConstants().allowToAddNewHostToTheClusterRoleTreeTooltip()), roleNode(ActionGroup.DELETE_HOST, getConstants().allowToRemoveExistingHostFromTheClusterRoleTreeTooltip()), roleNode(ActionGroup.EDIT_HOST_CONFIGURATION, getConstants().allowToEditHostPropertiesRoleTreeTooltip()), roleNode(ActionGroup.MANIPULATE_HOST, getConstants().allowToChangeHostStatusRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_HOST_NETWORK, getConstants().allowToConfigureHostsNetworkPhysicalInterfacesRoleTreeTooltip()) ) ); } protected static RoleNode createGlusterRoleTree() { return categoryNode(getConstants().volumeRoleTree(), categoryNode(getConstants().configureVolumesRoleTree(), roleNode(ActionGroup.CREATE_GLUSTER_VOLUME, getConstants().allowToCreateGlusterVolumesRoleTree()), roleNode(ActionGroup.DELETE_GLUSTER_VOLUME, getConstants().allowToDeleteGlusterVolumesRoleTree()), roleNode(ActionGroup.MANIPULATE_GLUSTER_VOLUME, getConstants().allowToManipulateGlusterVolumesRoleTree()) ) ); } protected static RoleNode createClusterRoleTree() { return categoryNode(getConstants().clusterRoleTree(), categoryNode(getConstants().configureClusterRoleTree(), roleNode(ActionGroup.CREATE_CLUSTER, getConstants().allowToCreateNewClusterRoleTreeTooltip()), roleNode(ActionGroup.DELETE_CLUSTER, getConstants().allowToRemoveClusterRoleTreeTooltip()), roleNode(ActionGroup.EDIT_CLUSTER_CONFIGURATION, getConstants().allowToEditClusterPropertiesRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_CLUSTER_NETWORK, getConstants().allowToEditLogicalNetworksForTheClusterRoleTreeTooltip()), roleNode(ActionGroup.MANIPULATE_AFFINITY_GROUPS, getConstants().allowToManipulateAffinityGroupsForClusterRoleTreeTooltip()) ) ); } protected static RoleNode createStorageDomainRoleTree() { return categoryNode(getConstants().storageDomainRoleTree(), categoryNode(getConstants().configureStorageDomainRoleTree(), roleNode(ActionGroup.CREATE_STORAGE_DOMAIN, getConstants().allowToCreateStorageDomainRoleTreeTooltip()), roleNode(ActionGroup.DELETE_STORAGE_DOMAIN, getConstants().allowToDeleteStorageDomainRoleTreeTooltip()), roleNode(ActionGroup.EDIT_STORAGE_DOMAIN_CONFIGURATION, getConstants().allowToModifyStorageDomainPropertiesRoleTreeTooltip()), roleNode(ActionGroup.MANIPULATE_STORAGE_DOMAIN, getConstants().allowToChangeStorageDomainStatusRoleTreeTooltip())), categoryNode(getConstants().configureDiskProfileRoleTree(), roleNode(ActionGroup.CREATE_STORAGE_DISK_PROFILE, getConstants().allowToCreateDiskProfileRoleTreeTooltip()), roleNode(ActionGroup.DELETE_STORAGE_DISK_PROFILE, getConstants().allowToDeleteDiskProfileRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_STORAGE_DISK_PROFILE, getConstants().allowToUpdateDiskProfileRoleTreeTooltip()))); } protected static RoleNode createNetworkRoleTree() { return categoryNode(getConstants().networkRoleTree(), categoryNode(getConstants().configureNetworkRoleTree(), roleNode(ActionGroup.CREATE_STORAGE_POOL_NETWORK, getConstants().allowToCreateLogicalNetworkPerDataCenterRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_STORAGE_POOL_NETWORK, getConstants().allowToEditLogicalNetworkRoleTreeTooltip()), roleNode(ActionGroup.DELETE_STORAGE_POOL_NETWORK, getConstants().allowToDeleteLogicalNetworkRoleTreeTooltip()), roleNode(ActionGroup.ASSIGN_CLUSTER_NETWORK, getConstants().allowToAddRemoveLogicalNetworksForTheClusterRoleTreeTooltip())), categoryNode(getConstants().configureVnicProfileRoleTree(), roleNode(ActionGroup.CREATE_NETWORK_VNIC_PROFILE, getConstants().allowToCreateVnicProfileRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_NETWORK_VNIC_PROFILE, getConstants().allowToEditVnicProfileRoleTreeTooltip()), roleNode(ActionGroup.DELETE_NETWORK_VNIC_PROFILE, getConstants().allowToDeleteVnicProfileRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_VM_NETWORK, getConstants().allowToConfigureVMsNetworkRoleTreeTooltip()), roleNode(ActionGroup.CONFIGURE_TEMPLATE_NETWORK, getConstants().allowToConfigureTemlateNetworkRoleTreeTooltip())) ); } protected static RoleNode createDataCenterRoleTree() { return categoryNode(getConstants().dataCenterRoleTree(), categoryNode(getConstants().configureDataCenterRoleTree(), roleNode(ActionGroup.CREATE_STORAGE_POOL, getConstants().allowToCreateDataCenterRoleTreeTooltip()), roleNode(ActionGroup.DELETE_STORAGE_POOL, getConstants().allowToRemoveDataCenterRoleTreeTooltip()), roleNode(ActionGroup.EDIT_STORAGE_POOL_CONFIGURATION, getConstants().allowToModifyDataCenterPropertiesRoleTreeTooltip()) ) ); } protected static RoleNode createSystemRoleTree() { return categoryNode(getConstants().systemRoleTree(), categoryNode(getConstants().configureSystemRoleTree(), roleNode(ActionGroup.MANIPULATE_USERS, getConstants().allowToAddRemoveUsersFromTheSystemRoleTreeTooltip()), roleNode(ActionGroup.MANIPULATE_PERMISSIONS, getConstants().allowToAddRemovePermissionsForUsersOnObjectsInTheSystemRoleTreeTooltip()), roleNode(ActionGroup.ADD_USERS_AND_GROUPS_FROM_DIRECTORY, getConstants().allowToAddUsersAndGroupsFromDirectoryOnObjectsInTheSystemRoleTreeTooltip()), roleNode(ActionGroup.MANIPULATE_ROLES, getConstants().allowToDefineConfigureRolesInTheSystemRoleTreeTooltip()), roleNode(ActionGroup.LOGIN, getConstants().allowToLoginToTheSystemRoleTreeTooltip()), roleNode(ActionGroup.TAG_MANAGEMENT, getConstants().allowToManageTags()), roleNode(ActionGroup.BOOKMARK_MANAGEMENT, getConstants().allowToManageBookmarks()), roleNode(ActionGroup.EVENT_NOTIFICATION_MANAGEMENT, getConstants().allowToManageEventNotifications()), roleNode(ActionGroup.AUDIT_LOG_MANAGEMENT, getConstants().allowToManageAuditLogs()), roleNode(ActionGroup.CONFIGURE_ENGINE, getConstants().allowToGetOrSetSystemConfigurationRoleTreeTooltip()) ) ); } }