package org.ovirt.engine.ui.uicommonweb.models.configure; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.PermissionsOperationsParametes; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.businessentities.GlusterVolumeEntity; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.ad_groups; import org.ovirt.engine.core.common.businessentities.permissions; import org.ovirt.engine.core.common.businessentities.roles; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.businessentities.vm_pools; import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.users.VdcUser; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.DataProvider; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeListModel; import org.ovirt.engine.ui.uicommonweb.models.users.AdElementListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; @SuppressWarnings("unused") public class PermissionListModel extends SearchableListModel { private UICommand privateAddCommand; public UICommand getAddCommand() { return privateAddCommand; } private void setAddCommand(UICommand value) { privateAddCommand = value; } private UICommand privateRemoveCommand; public UICommand getRemoveCommand() { return privateRemoveCommand; } private void setRemoveCommand(UICommand value) { privateRemoveCommand = value; } public Object getEntity() { return super.getEntity(); } public void setEntity(Object value) { super.setEntity(value); } public PermissionListModel() { setTitle("Permissions"); setAddCommand(new UICommand("New", this)); setRemoveCommand(new UICommand("Remove", this)); UpdateActionAvailability(); } @Override protected void OnEntityChanged() { super.OnEntityChanged(); getSearchCommand().Execute(); UpdateActionAvailability(); } @Override public void Search() { if (getEntity() != null) { super.Search(); } } @Override protected void SyncSearch() { VdcObjectType objType = getObjectType(); if(!objType.equals(VdcObjectType.GlusterVolume)){ boolean directOnly = (objType == VdcObjectType.VM ? true : false); GetPermissionsForObjectParameters tempVar = new GetPermissionsForObjectParameters(); tempVar.setObjectId(getEntityGuid()); tempVar.setVdcObjectType(objType); tempVar.setDirectOnly(directOnly); tempVar.setRefresh(getIsQueryFirstTime()); super.SyncSearch(VdcQueryType.GetPermissionsForObject, tempVar); } else { GetPermissionsForObjectParameters tempVar = new GetPermissionsForObjectParameters(); //TODO tempVar.setObjectId(VolumeListModel.clusterId); tempVar.setVdcObjectType(VdcObjectType.VdsGroups); tempVar.setDirectOnly(false); tempVar.setRefresh(getIsQueryFirstTime()); super.SyncSearch(VdcQueryType.GetPermissionsForObject, tempVar); } } @Override protected void AsyncSearch() { super.AsyncSearch(); VdcObjectType objType = getObjectType(); boolean directOnly = (objType == VdcObjectType.VM ? true : false); GetPermissionsForObjectParameters tempVar = new GetPermissionsForObjectParameters(); tempVar.setObjectId(getEntityGuid()); tempVar.setVdcObjectType(objType); tempVar.setDirectOnly(directOnly); setAsyncResult(Frontend.RegisterQuery(VdcQueryType.GetPermissionsForObject, tempVar)); setItems(getAsyncResult().getData()); } private void add() { if (getWindow() != null) { return; } AdElementListModel model = new AdElementListModel(); setWindow(model); model.setTitle("Add Permission to User"); model.setHashName("add_permission_to_user"); UICommand tempVar = new UICommand("OnAdd", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } private void remove() { if (getWindow() != null) { return; } ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Remove Permission"); model.setHashName("remove_permission"); model.setMessage("Permission"); java.util.ArrayList<String> items = new java.util.ArrayList<String>(); for (Object a : getSelectedItems()) { items.add("Role " + ((permissions)a).getRoleName() + " on User " + ((permissions)a).getOwnerName()); } model.setItems(items); UICommand tempVar = new UICommand("OnRemove", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } private void OnRemove() { if (getSelectedItems() != null && getSelectedItems().size() > 0) { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object perm : getSelectedItems()) { PermissionsOperationsParametes tempVar = new PermissionsOperationsParametes(); tempVar.setPermission((permissions)perm); list.add(tempVar); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.RemovePermission, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } Cancel(); } private void OnAdd() { AdElementListModel model = (AdElementListModel)getWindow(); if (model.getProgress() != null) { return; } if (!model.getIsEveryoneSelected() && model.getSelectedItems() == null) { Cancel(); return; } java.util.ArrayList<DbUser> items = new java.util.ArrayList<DbUser>(); if (model.getIsEveryoneSelected()) { DbUser tempVar = new DbUser(); tempVar.setuser_id(UserListModel.EveryoneUserId); items.add(tempVar); } else { for (Object item : model.getItems()) { EntityModel entityModel = (EntityModel) item; if (entityModel.getIsSelected()) { items.add((DbUser) entityModel.getEntity()); } } } roles role = (roles)model.getRole().getSelectedItem(); //adGroup/user java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (DbUser user : items) { permissions tempVar2 = new permissions(); tempVar2.setad_element_id(user.getuser_id()); tempVar2.setrole_id(role.getId()); permissions perm = tempVar2; perm.setObjectId(getObjectType() == VdcObjectType.GlusterVolume ? VolumeListModel.clusterId : getEntityGuid()); perm.setObjectType(getObjectType() == VdcObjectType.GlusterVolume ? VdcObjectType.VdsGroups : getObjectType()); if (user.getIsGroup()) { PermissionsOperationsParametes tempVar3 = new PermissionsOperationsParametes(); tempVar3.setPermission(perm); tempVar3.setAdGroup(new ad_groups(user.getuser_id(), user.getname(), user.getdomain())); list.add(tempVar3); } else { PermissionsOperationsParametes tempVar4 = new PermissionsOperationsParametes(); tempVar4.setPermission(perm); tempVar4.setVdcUser(new VdcUser(user.getuser_id(), user.getusername(), user.getdomain())); list.add(tempVar4); } } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.AddPermission, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { AdElementListModel localModel = (AdElementListModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void Cancel() { setWindow(null); } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); UpdateActionAvailability(); } @Override protected void SelectedItemsChanged() { super.SelectedItemsChanged(); UpdateActionAvailability(); } @Override protected void EntityPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.EntityPropertyChanged(sender, e); if (e.PropertyName.equals("status")) { UpdateActionAvailability(); } } private void UpdateActionAvailability() { getRemoveCommand().setIsExecutionAllowed((getSelectedItems() != null && getSelectedItems().size() > 0)); if (getRemoveCommand().getIsExecutionAllowed() == false) { return; } Guid entityGuid = getEntityGuid(); if(entityGuid.equals(new Guid())){ return; } for (Object p : getSelectedItems()) { if (!entityGuid.equals(((permissions)p).getObjectId())) { getRemoveCommand().setIsExecutionAllowed(false); return; } } } private Guid getEntityGuid() { return DataProvider.GetEntityGuid(getEntity()); } private VdcObjectType getObjectType() { if (getEntity() instanceof VM) { return VdcObjectType.VM; } if (getEntity() instanceof storage_pool) { return VdcObjectType.StoragePool; } if (getEntity() instanceof VDSGroup) { return VdcObjectType.VdsGroups; } if (getEntity() instanceof VDS) { return VdcObjectType.VDS; } if (getEntity() instanceof storage_domains) { return VdcObjectType.Storage; } if (getEntity() instanceof VmTemplate) { return VdcObjectType.VmTemplate; } if (getEntity() instanceof vm_pools) { return VdcObjectType.VmPool; } if (getEntity() instanceof GlusterVolumeEntity) { return VdcObjectType.GlusterVolume; } return VdcObjectType.Unknown; } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getAddCommand()) { add(); } else if (command == getRemoveCommand()) { remove(); } else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) { OnRemove(); } else if (StringHelper.stringsEqual(command.getName(), "OnAdd")) { OnAdd(); } else if (StringHelper.stringsEqual(command.getName(), "Cancel")) { Cancel(); } } @Override protected String getListName() { return "PermissionListModel"; } }