package org.ovirt.engine.ui.uicommonweb.models.users;
import java.util.Collections;
import org.ovirt.engine.core.compat.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.vdscommands.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.action.*;
import org.ovirt.engine.ui.frontend.*;
import org.ovirt.engine.ui.uicommonweb.*;
import org.ovirt.engine.ui.uicommonweb.models.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicommonweb.dataprovider.*;
import org.ovirt.engine.ui.uicommonweb.models.configure.*;
import org.ovirt.engine.ui.uicommonweb.models.tags.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.core.common.users.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.interfaces.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.ui.uicommonweb.*;
import org.ovirt.engine.ui.uicommonweb.models.*;
@SuppressWarnings("unused")
public class UserListModel extends ListWithDetailsModel
{
public static Guid EveryoneUserId = new Guid("eee00000-0000-0000-0000-123456789eee");
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;
}
private UICommand privateAssignTagsCommand;
public UICommand getAssignTagsCommand()
{
return privateAssignTagsCommand;
}
private void setAssignTagsCommand(UICommand value)
{
privateAssignTagsCommand = value;
}
// get { return SelectedItems == null ? new object[0] : SelectedItems.Cast<DbUser>().Select(a => a.user_id).Cast<object>().ToArray(); }
protected Object[] getSelectedKeys()
{
if (getSelectedItems() == null)
{
return new Object[0];
}
else
{
java.util.ArrayList<Object> items = new java.util.ArrayList<Object>();
for (Object i : getSelectedItems())
{
items.add(((VDSGroup)i).getID());
}
return items.toArray(new Object[]{});
}
}
public UserListModel()
{
setTitle("Users");
setDefaultSearchString("Users:");
setSearchString(getDefaultSearchString());
setAddCommand(new UICommand("Add", this));
setRemoveCommand(new UICommand("Remove", this));
setAssignTagsCommand(new UICommand("AssignTags", this));
UpdateActionAvailability();
getSearchNextPageCommand().setIsAvailable(true);
getSearchPreviousPageCommand().setIsAvailable(true);
}
public void AssignTags()
{
if (getWindow() != null)
{
return;
}
TagListModel model = new TagListModel();
setWindow(model);
model.setTitle("Assign Tags");
model.setHashName("assign_tags_users");
GetAttachedTagsToSelectedUsers(model);
UICommand tempVar = new UICommand("OnAssignTags", 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);
}
public java.util.Map<Guid, Boolean> attachedTagsToEntities;
public java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags> allAttachedTags;
public int selectedItemsCounter;
private void GetAttachedTagsToSelectedUsers(TagListModel model)
{
java.util.HashMap<Guid, Boolean> tags = new java.util.HashMap<Guid, Boolean>();
java.util.ArrayList<Guid> userIds = new java.util.ArrayList<Guid>();
java.util.ArrayList<Guid> grpIds = new java.util.ArrayList<Guid>();
attachedTagsToEntities = new java.util.HashMap<Guid, Boolean>();
allAttachedTags = new java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>();
selectedItemsCounter = 0;
for (Object item : getSelectedItems())
{
DbUser user = (DbUser)item;
if (!user.getIsGroup())
{
userIds.add(user.getuser_id());
}
else
{
grpIds.add(user.getuser_id());
}
}
for (Guid userId : userIds)
{
AsyncDataProvider.GetAttachedTagsToUser(new AsyncQuery(new Object[] { this, model },
new INewAsyncCallback() {
@Override
public void OnSuccess(Object target, Object returnValue) {
Object[] array = (Object[])target;
UserListModel userListModel = (UserListModel)array[0];
TagListModel tagListModel = (TagListModel)array[1];
userListModel.allAttachedTags.addAll((java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>)returnValue);
userListModel.selectedItemsCounter++;
if (userListModel.selectedItemsCounter == userListModel.getSelectedItems().size())
{
PostGetAttachedTags(userListModel, tagListModel);
}
}
}), userId);
}
for (Guid grpId : grpIds)
{
AsyncDataProvider.GetAttachedTagsToUserGroup(new AsyncQuery(new Object[] { this, model },
new INewAsyncCallback() {
@Override
public void OnSuccess(Object target, Object returnValue) {
Object[] array = (Object[])target;
UserListModel userListModel = (UserListModel)array[0];
TagListModel tagListModel = (TagListModel)array[1];
userListModel.allAttachedTags.addAll((java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>)returnValue);
userListModel.selectedItemsCounter++;
if (userListModel.selectedItemsCounter == userListModel.getSelectedItems().size())
{
PostGetAttachedTags(userListModel, tagListModel);
}
}
}), grpId);
}
}
private void PostGetAttachedTags(UserListModel userListModel, TagListModel tagListModel)
{
if (userListModel.getLastExecutedCommand() == getAssignTagsCommand())
{
//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to LINQ queries:
java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags> attachedTags = (java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>)Linq.Distinct(userListModel.allAttachedTags, new TagsEqualityComparer());
for (org.ovirt.engine.core.common.businessentities.tags a : attachedTags)
{
int count = 0;
for (org.ovirt.engine.core.common.businessentities.tags b : allAttachedTags)
{
if (b.gettag_id().equals(a.gettag_id()))
{
count++;
}
}
userListModel.attachedTagsToEntities.put(a.gettag_id(), count == userListModel.getSelectedItems().size());
}
tagListModel.setAttachedTagsToEntities(userListModel.attachedTagsToEntities);
}
else if (StringHelper.stringsEqual(userListModel.getLastExecutedCommand().getName(), "OnAssignTags"))
{
userListModel.PostOnAssignTags(tagListModel.getAttachedTagsToEntities());
}
}
private void OnAssignTags()
{
TagListModel model = (TagListModel)getWindow();
GetAttachedTagsToSelectedUsers(model);
}
public void PostOnAssignTags(java.util.Map<Guid, Boolean> attachedTags)
{
TagListModel model = (TagListModel)getWindow();
java.util.ArrayList<Guid> userIds = new java.util.ArrayList<Guid>();
java.util.ArrayList<Guid> grpIds = new java.util.ArrayList<Guid>();
for (Object item : getSelectedItems())
{
DbUser user = (DbUser)item;
if (user.getIsGroup())
{
grpIds.add(user.getuser_id());
}
else
{
userIds.add(user.getuser_id());
}
}
//prepare attach/detach lists
java.util.ArrayList<Guid> tagsToAttach = new java.util.ArrayList<Guid>();
java.util.ArrayList<Guid> tagsToDetach = new java.util.ArrayList<Guid>();
if (model.getItems() != null && ((java.util.ArrayList<TagModel>)model.getItems()).size() > 0)
{
java.util.ArrayList<TagModel> tags = (java.util.ArrayList<TagModel>)model.getItems();
TagModel rootTag = tags.get(0);
TagModel.RecursiveEditAttachDetachLists(rootTag, attachedTags, tagsToAttach, tagsToDetach);
}
java.util.ArrayList<VdcActionParametersBase> usersToAttach = new java.util.ArrayList<VdcActionParametersBase>();
java.util.ArrayList<VdcActionParametersBase> grpsToAttach = new java.util.ArrayList<VdcActionParametersBase>();
for (Guid tag_id : tagsToAttach)
{
if (userIds.size() > 0)
{
usersToAttach.add(new AttachEntityToTagParameters(tag_id, userIds));
}
if (grpIds.size() > 0)
{
grpsToAttach.add(new AttachEntityToTagParameters(tag_id, grpIds));
}
}
if (usersToAttach.size() > 0)
{
Frontend.RunMultipleAction(VdcActionType.AttachUserToTag, usersToAttach);
}
if (grpsToAttach.size() > 0)
{
Frontend.RunMultipleAction(VdcActionType.AttachUserGroupToTag, grpsToAttach);
}
java.util.ArrayList<VdcActionParametersBase> usersToDetach = new java.util.ArrayList<VdcActionParametersBase>();
java.util.ArrayList<VdcActionParametersBase> grpsToDetach = new java.util.ArrayList<VdcActionParametersBase>();
for (Guid tag_id : tagsToDetach)
{
if (userIds.size() > 0)
{
usersToDetach.add(new AttachEntityToTagParameters(tag_id, userIds));
}
if (grpIds.size() > 0)
{
grpsToDetach.add(new AttachEntityToTagParameters(tag_id, grpIds));
}
}
if (usersToDetach.size() > 0)
{
Frontend.RunMultipleAction(VdcActionType.DetachUserFromTag, usersToDetach);
}
if (grpsToDetach.size() > 0)
{
Frontend.RunMultipleAction(VdcActionType.DetachUserGroupFromTag, grpsToDetach);
}
Cancel();
}
public void add()
{
if (getWindow() != null)
{
return;
}
AdElementListModel model = new AdElementListModel();
setWindow(model);
model.setTitle("Add Users and Groups");
model.setHashName("add_users_and_groups");
model.setExcludeItems(DataProvider.GetUserList());
model.setIsRoleListHidden(true);
model.getIsEveryoneSelectionHidden().setEntity(true);
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);
}
public void remove()
{
if (getWindow() != null)
{
return;
}
ConfirmationModel model = new ConfirmationModel();
setWindow(model);
model.setTitle("Remove User(s)");
model.setHashName("remove_user");
model.setMessage("User(s)");
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
for (DbUser item : Linq.<DbUser>Cast(getSelectedItems()))
{
list.add(item.getname());
}
model.setItems(list);
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);
}
@Override
public boolean IsSearchStringMatch(String searchString)
{
return searchString.trim().toLowerCase().startsWith("user");
}
@Override
protected void SyncSearch()
{
SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.DBUser);
tempVar.setMaxCount(getSearchPageSize());
super.SyncSearch(VdcQueryType.Search, tempVar);
}
private EntityModel userGroupListModel;
private EntityModel userEventNotifierListModel;
@Override
protected void InitDetailModels()
{
super.InitDetailModels();
ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>();
list.add(new UserGeneralModel());
list.add(new UserPermissionListModel());
list.add(new UserEventListModel());
userGroupListModel = new UserGroupListModel();
userGroupListModel.setIsAvailable(false);
list.add(userGroupListModel);
userEventNotifierListModel = new UserEventNotifierListModel();
list.add(userEventNotifierListModel);
setDetailModels(list);
}
@Override
protected void UpdateDetailsAvailability()
{
if (getSelectedItem() != null)
{
DbUser adUser = (DbUser)getSelectedItem();
userGroupListModel.setIsAvailable(!adUser.getIsGroup());
userEventNotifierListModel.setIsAvailable(!adUser.getIsGroup());
}
}
@Override
protected void AsyncSearch()
{
super.AsyncSearch();
setAsyncResult(Frontend.RegisterSearch(getSearchString(), SearchType.DBUser, getSearchPageSize()));
setItems(getAsyncResult().getData());
}
public void Cancel()
{
setWindow(null);
}
public void OnAdd()
{
AdElementListModel model = (AdElementListModel)getWindow();
if (model.getProgress() != null)
{
return;
}
if (model.getSelectedItems() == null)
{
Cancel();
return;
}
java.util.ArrayList<DbUser> items = new java.util.ArrayList<DbUser>();
for (Object item : model.getItems())
{
EntityModel entityModel = (EntityModel)item;
if (entityModel.getIsSelected())
{
items.add((DbUser)entityModel.getEntity());
}
}
java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>();
for (DbUser item : items)
{
if (!item.getIsGroup())
{
AddUserParameters tempVar = new AddUserParameters();
tempVar.setVdcUser(new VdcUser(item.getuser_id(), item.getusername(), item.getdomain()));
parameters.add(tempVar);
}
else
{
AddUserParameters tempVar2 = new AddUserParameters();
tempVar2.setAdGroup(new ad_groups(item.getuser_id(), item.getname(), item.getdomain()));
parameters.add(tempVar2);
}
}
model.StartProgress(null);
Frontend.RunMultipleAction(VdcActionType.AddUser, parameters,
new IFrontendMultipleActionAsyncCallback() {
@Override
public void Executed(FrontendMultipleActionAsyncResult result) {
AdElementListModel localModel = (AdElementListModel)result.getState();
localModel.StopProgress();
Cancel();
}
}, model);
}
public void OnRemove()
{
java.util.ArrayList<DbUser> items = Linq.<DbUser>Cast(getSelectedItems());
java.util.ArrayList<VdcActionParametersBase> userPrms = new java.util.ArrayList<VdcActionParametersBase>();
java.util.ArrayList<VdcActionParametersBase> groupPrms = new java.util.ArrayList<VdcActionParametersBase>();
for (DbUser item : items)
{
if (!item.getIsGroup())
{
userPrms.add(new AdElementParametersBase(item.getuser_id()));
}
else
{
groupPrms.add(new AdElementParametersBase(item.getuser_id()));
}
}
if (userPrms.size() > 0)
{
Frontend.RunMultipleAction(VdcActionType.RemoveUser, userPrms);
}
if (groupPrms.size() > 0)
{
Frontend.RunMultipleAction(VdcActionType.RemoveAdGroup, groupPrms);
}
Cancel();
}
//private void AssignTags()
//{
// base.AssignTags();
// DbUser user = (DbUser)SelectedItem;
// AssignTagsModel.AttachedTags = DataProvider.GetAttachedTagsToUser(user.user_id);
//}
//public override void NotifyTagsAttached(IList<tags> tags)
//{
// base.NotifyTagsAttached(tags);
// var dbUsers = SelectedItems.Cast<DbUser>();
// var userIds = dbUsers
// .Where(a => !a.IsGroup)
// .Select(a => a.user_id)
// .ToList();
// Frontend.RunMultipleActions(VdcActionType.AttachUserToTag,
// tags.Select(a =>
// (VdcActionParametersBase)new AttachEntityToTagParameters(a.tag_id, userIds)
// )
// .ToList()
// );
// var groupIds = dbUsers
// .Where(a => a.IsGroup)
// .Select(a => a.user_id)
// .ToList();
// Frontend.RunMultipleActions(VdcActionType.AttachUserGroupToTag,
// tags.Select(a =>
// (VdcActionParametersBase)new AttachEntityToTagParameters(a.tag_id, groupIds)
// )
// .ToList()
// );
//}
//public override void NotifyTagsDetached(IList<tags> tags)
//{
// base.NotifyTagsDetached(tags);
// var dbUsers = SelectedItems.Cast<DbUser>();
// var userIds = dbUsers
// .Where(a => !a.IsGroup)
// .Select(a => a.user_id)
// .ToList();
// Frontend.RunMultipleActions(VdcActionType.DetachUserFromTag,
// tags.Select(a =>
// (VdcActionParametersBase)new AttachEntityToTagParameters(a.tag_id, userIds)
// )
// .ToList()
// );
// var groupIds = dbUsers
// .Where(a => a.IsGroup)
// .Select(a => a.user_id)
// .ToList();
// Frontend.RunMultipleActions(VdcActionType.DetachUserGroupFromTag,
// tags.Select(a =>
// (VdcActionParametersBase)new AttachEntityToTagParameters(a.tag_id, groupIds)
// )
// .ToList()
// );
//}
//public override void OnSelectionChanged(object item, IList items)
//{
// base.OnSelectionChanged(item, items);
// UpdateActionAvailability();
//}
@Override
protected void OnSelectedItemChanged()
{
super.OnSelectedItemChanged();
UpdateActionAvailability();
}
@Override
protected void SelectedItemsChanged()
{
super.SelectedItemsChanged();
UpdateActionAvailability();
}
private void UpdateActionAvailability()
{
java.util.ArrayList items = (((java.util.ArrayList)getSelectedItems()) != null) ? (java.util.ArrayList)getSelectedItems() : new java.util.ArrayList();
getRemoveCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, DbUser.class, VdcActionType.RemoveUser));
getAssignTagsCommand().setIsExecutionAllowed(items.size() > 0);
}
@Override
public void ExecuteCommand(UICommand command)
{
super.ExecuteCommand(command);
if (command == getAddCommand())
{
add();
}
if (command == getRemoveCommand())
{
remove();
}
if (command == getAssignTagsCommand())
{
AssignTags();
}
if (StringHelper.stringsEqual(command.getName(), "Cancel"))
{
Cancel();
}
if (StringHelper.stringsEqual(command.getName(), "OnAssignTags"))
{
OnAssignTags();
}
if (StringHelper.stringsEqual(command.getName(), "OnAdd"))
{
OnAdd();
}
if (StringHelper.stringsEqual(command.getName(), "OnRemove"))
{
OnRemove();
}
}
@Override
protected String getListName() {
return "UserListModel";
}
}