package org.ovirt.engine.ui.userportal.client.modalpanels; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.KeyCodes; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.businessentities.roles; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.ui.uicommon.UICommand; import org.ovirt.engine.ui.uicommon.models.EntityModel; import org.ovirt.engine.ui.uicommon.models.configure.PermissionListModel; import org.ovirt.engine.ui.uicommon.models.users.AdElementListModel; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.userportal.client.components.NonDraggableModalPanel; import org.ovirt.engine.ui.userportal.client.components.Button; import org.ovirt.engine.ui.userportal.client.components.UPTextItem; import org.ovirt.engine.ui.userportal.client.components.SelectBoxListModelBinded; import org.ovirt.engine.ui.userportal.client.binders.ObjectNameIdResolver; import org.ovirt.engine.ui.userportal.client.timers.SubTabRefreshTimer; import com.smartgwt.client.data.RecordList; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.events.KeyPressEvent; import com.smartgwt.client.widgets.form.fields.events.KeyPressHandler; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler; import com.smartgwt.client.widgets.grid.events.SelectionEvent; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; public class AddPermissionsModalPanel extends NonDraggableModalPanel { final AddPermissionsModalPanel addPermissionsModalPanel = this; UICommand cancelCommand; public AddPermissionsModalPanel(final PermissionListModel permissionListModel) { super(550, 450, "Add Permission to User"); final AdElementListModel adElementListModel = (AdElementListModel)permissionListModel.getWindow(); VLayout inPanel = new VLayout(); inPanel.setHeight100(); inPanel.setWidth100(); SelectBoxListModelBinded domainBox = new SelectBoxListModelBinded("Search", adElementListModel.getDomain(), new ObjectNameIdResolver() { @Override public String getItemName(Object o) { return (String)o; } @Override public String getItemId(Object o) { return (String)o; } }); final UPTextItem searchStringBox = new UPTextItem(); searchStringBox.setShowTitle(false); searchStringBox.setWidth(295); searchStringBox.addKeyPressHandler(new KeyPressHandler() { public void onKeyPress(KeyPressEvent event) { if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) { adElementListModel.setSearchString((String)searchStringBox.getValue()); adElementListModel.getSearchCommand().Execute(); } } }); final Button goButton = new Button("GO"); goButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { adElementListModel.setSearchString((String)searchStringBox.getValue()); adElementListModel.getSearchCommand().Execute(); } }); final ListGrid usersGrid = new ListGrid(); usersGrid.setLeaveScrollbarGap(false); usersGrid.setShowHeaderContextMenu(false); usersGrid.setShowAllRecords(true); usersGrid.setEmptyMessage(""); ListGridField isSelectedField = new ListGridField("isSelected", " "); isSelectedField.setType(ListGridFieldType.BOOLEAN); isSelectedField.setWidth(25); // Not needed anymore since toggling of the selection is made through row click // isSelectedField.setCanToggle(true); // isSelectedField.setCanEdit(true); ListGridField typeField = new ListGridField("type", " "); typeField.setType(ListGridFieldType.IMAGE); typeField.setImageURLPrefix("types/"); typeField.setImageURLSuffix(".png"); typeField.setAttribute("imageWidth", "typeImageWidth"); typeField.setAttribute("imageHeight", "typeImageHeight"); typeField.setWidth(30); typeField.setAlign(Alignment.CENTER); ListGridField firstNameField = new ListGridField("firstName", "First Name"); firstNameField.setWidth("25%"); ListGridField lastNameField = new ListGridField("lastName", "Last Name"); lastNameField.setWidth("25%"); ListGridField userNameField = new ListGridField("userName", "User Name"); userNameField.setWidth("50%"); usersGrid.setFields(isSelectedField, typeField, firstNameField, lastNameField, userNameField); usersGrid.addSelectionChangedHandler(new SelectionChangedHandler() { @Override public void onSelectionChanged(SelectionEvent event) { if (event.getRecord() != null && event.getState()) { event.getRecord().setAttribute("isSelected", !event.getRecord().getAttributeAsBoolean("isSelected")); usersGrid.markForRedraw(); } usersGrid.deselectAllRecords(); } }); adElementListModel.getItemsChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { usersGrid.setData(calcRecordsFromItems()); } public RecordList calcRecordsFromItems() { RecordList records = new RecordList(); if (adElementListModel.getItems() != null) { for (Object o : adElementListModel.getItems()) { DbUser user = (DbUser)((EntityModel)o).getEntity(); ListGridRecord r = new ListGridRecord(); r.setAttribute("firstName", user.getname()); r.setAttribute("lastName", user.getsurname()); r.setAttribute("userName", user.getusername()); r.setAttribute("type", user.getIsGroup() ? "GROUP" : "USER"); r.setAttribute("typeImageWidth", user.getIsGroup() ? 16 : 9); r.setAttribute("typeImageHeight", user.getIsGroup() ? 15: 13); r.setAttribute("entity", o); r.setAttribute("isSelected", ((EntityModel)o).getIsSelected()); records.add(r); } } return records; } }); SelectBoxListModelBinded roleBox = new SelectBoxListModelBinded("Role to Assign", adElementListModel.getRole(), new ObjectNameIdResolver() { @Override public String getItemName(Object o) { return ((roles)o).getname(); } @Override public String getItemId(Object o) { return ((roles)o).getId().toString(); } }); HLayout searchLayout = new HLayout(); DynamicForm domainBoxForm = new DynamicForm(); DynamicForm searchStringBoxForm = new DynamicForm(); DynamicForm roleBoxForm = new DynamicForm(); domainBoxForm.setItems(domainBox); searchStringBoxForm.setItems(searchStringBox); searchStringBoxForm.setAutoFocus(true); roleBoxForm.setItems(roleBox); roleBoxForm.setStyleName("permissionsRoleBox"); searchLayout.setMembers(domainBoxForm, searchStringBoxForm, goButton); searchLayout.setAutoHeight(); inPanel.addMember(searchLayout); inPanel.addMember(usersGrid); inPanel.addMember(roleBoxForm); inPanel.setMembersMargin(3); addItem(inPanel); permissionListModel.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { String propertyName = ((PropertyChangedEventArgs)args).PropertyName; if (propertyName.equals("Window")) { permissionListModel.getPropertyChangedEvent().removeListener(this); destroy(); } } }); final UICommand saveCommand = new UICommand("OnAdd", permissionListModel); cancelCommand = new UICommand("Cancel", permissionListModel); Button okButton = new Button("OK"); okButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { List<EntityModel> selectedUsers = new ArrayList<EntityModel>(); for (ListGridRecord r : usersGrid.getRecords()) { if (r.getAttributeAsBoolean("isSelected")) { EntityModel em = (EntityModel)r.getAttributeAsObject("entity"); em.setIsSelected(true); selectedUsers.add(em); } } adElementListModel.setSelectedItems(selectedUsers); SubTabRefreshTimer.initSubTabRefreshTimer(permissionListModel); saveCommand.Execute(); } }); Button cancelButton = new Button("Cancel"); cancelButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { onClose(); } }); setFooterButtons(Alignment.RIGHT, okButton, cancelButton); subscribeProgressChangedEvent(adElementListModel, searchStringBox, inPanel); } public void onClose() { cancelCommand.Execute(); } }