package org.ovirt.engine.ui.webadmin.section.main.view.popup;
import java.util.ArrayList;
import org.ovirt.engine.core.common.businessentities.DbUser;
import org.ovirt.engine.core.common.businessentities.roles;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.users.AdElementListModel;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.widget.HasUiCommandClickHandlers;
import org.ovirt.engine.ui.webadmin.widget.UiCommandButton;
import org.ovirt.engine.ui.webadmin.widget.dialog.PopupNativeKeyPressHandler;
import org.ovirt.engine.ui.webadmin.widget.dialog.SimpleDialogPanel;
import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelCellTable;
import org.ovirt.engine.ui.webadmin.widget.editor.ListModelListBoxEditor;
import org.ovirt.engine.ui.webadmin.widget.editor.TextBoxChanger;
import org.ovirt.engine.ui.webadmin.widget.renderer.NullSafeRenderer;
import org.ovirt.engine.ui.webadmin.widget.table.column.EntityModelTextColumn;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HasHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.inject.Inject;
public class PermissionsPopupView extends AbstractModelBoundPopupView<AdElementListModel> implements PermissionsPopupPresenterWidget.ViewDef {
interface Driver extends SimpleBeanEditorDriver<AdElementListModel, PermissionsPopupView> {
Driver driver = GWT.create(Driver.class);
}
interface ViewUiBinder extends UiBinder<SimpleDialogPanel, PermissionsPopupView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
@UiField
UiCommandButton searchButton;
@UiField(provided = true)
@Path("domain.selectedItem")
ListModelListBoxEditor<Object> domainSelection;
@UiField
@Ignore
Label roleToAssignLabel;
@UiField(provided = true)
@Path("role.selectedItem")
ListModelListBoxEditor<Object> roleSelection;
@UiField(provided = true)
@Ignore
EntityModelCellTable<ListModel> searchItems;
@UiField
@Ignore
RadioButton everyoneRadio;
@UiField
@Ignore
RadioButton specificUserOrGroupRadio;
@UiField
@Path("searchString")
TextBoxChanger searchStringEditor;
@UiField
SimplePanel everyonePanel;
@UiField
HorizontalPanel roleSelectionPanel;
@UiField
ScrollPanel searchItemsScrollPanel;
private PopupNativeKeyPressHandler nativeKeyPressHandler;
@Inject
public PermissionsPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants) {
super(eventBus, resources);
initListBoxEditors();
searchItems = new EntityModelCellTable<ListModel>(true);
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
initTable();
specificUserOrGroupRadio.setValue(true);
everyoneRadio.setValue(false);
localize(constants);
Driver.driver.initialize(this);
}
private void initListBoxEditors() {
domainSelection = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() {
@Override
public String renderNullSafe(Object object) {
return object.toString();
}
});
roleSelection = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() {
@Override
public String renderNullSafe(Object object) {
return ((roles) object).getname();
}
});
}
private void initTable() {
// Table Entity Columns
searchItems.addEntityModelColumn(new EntityModelTextColumn<EntityModel>() {
@Override
public String getValue(EntityModel model) {
if (model.getEntity() instanceof DbUser)
return ((DbUser) model.getEntity()).getname();
else {
return model.getEntity().toString();
}
}
}, "First Name");
searchItems.addEntityModelColumn(new EntityModelTextColumn<EntityModel>() {
@Override
public String getValue(EntityModel model) {
if (model.getEntity() instanceof DbUser)
return ((DbUser) model.getEntity()).getsurname();
else {
return "";
}
}
}, "Last Name");
searchItems.addEntityModelColumn(new EntityModelTextColumn<EntityModel>() {
@Override
public String getValue(EntityModel model) {
if (model.getEntity() instanceof DbUser)
return ((DbUser) model.getEntity()).getusername();
else {
return "";
}
}
}, "User Name");
}
void localize(ApplicationConstants constants) {
searchButton.setLabel("GO");
}
@Override
public void edit(final AdElementListModel object) {
searchItems.setRowData(new ArrayList<EntityModel>());
searchItems.edit(object);
Driver.driver.edit(object);
}
@Override
public AdElementListModel flush() {
searchItems.flush();
return Driver.driver.flush();
}
@Override
public void focusInput() {
searchStringEditor.setFocus(true);
}
@Override
public HasUiCommandClickHandlers getSearchButton() {
return searchButton;
}
@Override
public HasKeyPressHandlers getKeyPressSearchInputBox() {
return searchStringEditor;
}
@Override
public HasClickHandlers getEveryoneRadio() {
return everyoneRadio;
}
@Override
public HasClickHandlers getSpecificUserOrGroupRadio() {
return specificUserOrGroupRadio;
}
public PopupNativeKeyPressHandler getNativeKeyPressHandler() {
return nativeKeyPressHandler;
}
public HasHandlers getSearchStringEditor() {
return searchStringEditor;
}
@Override
public void setPopupKeyPressHandler(PopupNativeKeyPressHandler handler) {
super.setPopupKeyPressHandler(handler);
this.nativeKeyPressHandler = handler;
}
@Override
public void changeStateOfElementsWhenAccessIsForEveryone(boolean isEveryone) {
domainSelection.setEnabled(!isEveryone);
searchStringEditor.setEnabled(!isEveryone);
searchButton.getCommand().setIsExecutionAllowed(!isEveryone);
searchItems.setVisible(!isEveryone);
}
@Override
public HasValue<String> getSearchString() {
return searchStringEditor;
}
@Override
public void hideRoleSelection(Boolean indic) {
roleSelectionPanel.setVisible(!indic);
}
@Override
public void hideEveryoneSelection(Boolean indic) {
everyonePanel.setVisible(!indic);
}
}