package org.ovirt.engine.ui.uicommon.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.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicommon.models.configure.*;
import org.ovirt.engine.ui.uicommon.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.uicommon.*;
import org.ovirt.engine.ui.uicommon.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;
}
private Model window;
public Model getWindow()
{
return window;
}
public void setWindow(Model value)
{
if (window != value)
{
window = value;
OnPropertyChanged(new PropertyChangedEventArgs("Window"));
}
}
// 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");
model.setAttachedTagsToEntities(GetAttachedTagsToSelectedUsers());
java.util.ArrayList<TagModel> tags = (java.util.ArrayList<TagModel>)model.getItems();
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);
}
private java.util.HashMap<Guid, Boolean> GetAttachedTagsToSelectedUsers()
{
java.util.HashMap<Guid, Boolean> tags = new java.util.HashMap<Guid, Boolean>();
// List<Guid> userIds = SelectedItems
// .Cast<DbUser>()
// .Select(a => a.user_id)
// .ToList();
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())
{
userIds.add(user.getuser_id());
}
else
{
grpIds.add(user.getuser_id());
}
}
// List<DbUser> allAttachedTags = userIds.SelectMany(a => DataProvider.GetAttachedTagsToUser(a)).ToList();
// List<DbUser> attachedTags = allAttachedTags
// .Distinct(new TagsEqualityComparer())
// .ToList();
java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags> allAttachedTags = new java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>();
for (Guid userId : userIds)
{
allAttachedTags.addAll(DataProvider.GetAttachedTagsToUser(userId));
}
for (Guid grpId : grpIds)
{
allAttachedTags.addAll(DataProvider.GetAttachedTagsToUserGroup(grpId));
}
//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(allAttachedTags, new TagsEqualityComparer());
//attachedTags.Each(a => { tags.Add(a.tag_id, allAttachedTags.Count(b => b.tag_id == a.tag_id) == userIds.Count() ? true : false); });
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++;
}
}
tags.put(a.gettag_id(), count == userIds.size() + grpIds.size());
}
return tags;
}
private void OnAssignTags()
{
TagListModel model = (TagListModel)getWindow();
// List<DbUser> userIds = SelectedItems
// .Cast<DbUser>()
// .Select(a => a.user_id)
// .ToList();
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());
}
}
java.util.HashMap<Guid, Boolean> attachedTags = GetAttachedTagsToSelectedUsers();
//prepare attach/detach lists
java.util.ArrayList<Guid> tagsToAttach = new java.util.ArrayList<Guid>();
java.util.ArrayList<Guid> tagsToDetach = new java.util.ArrayList<Guid>();
//model.Items
// .Cast<TagModel>()
// .First()
// .EachRecursive(a => a.Children, (a, b) =>
// {
// if (a.Selection == true && (!attachedTags.ContainsKey(a.Id) || attachedTags[a.Id] == false))
// {
// tagsToAttach.Add(a.Id);
// }
// else if (a.Selection == false && attachedTags.ContainsKey(a.Id))
// {
// tagsToDetach.Add(a.Id);
// }
// });
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);
}
// Frontend.RunMultipleActions(VdcActionType.AttachUserToTag,
// tagsToAttach.Select(a =>
// (VdcActionParametersBase)new AttachEntityToTagParameters(a, userIds.Select(userId => (Guid)userId).ToList())
// )
// .ToList()
// );
// Frontend.RunMultipleActions(VdcActionType.DetachUserFromTag,
// tagsToDetach.Select(a =>
// (VdcActionParametersBase)new AttachEntityToTagParameters(a, userIds.Select(userId => (Guid)userId).ToList())
// )
// .ToList()
// );
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);
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();
}
}
}