package org.ovirt.engine.ui.userportal.client.modalpanels;
import org.ovirt.engine.core.common.businessentities.DiskImageBase;
import org.ovirt.engine.core.common.businessentities.DiskInterface;
import org.ovirt.engine.core.common.businessentities.VolumeType;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.core.compat.EventArgs;
import org.ovirt.engine.core.compat.IEventListener;
import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicommon.UICommand;
import org.ovirt.engine.ui.uicommon.models.vms.DiskModel;
import org.ovirt.engine.ui.uicommon.models.vms.VmDiskListModel;
import org.ovirt.engine.ui.userportal.client.binders.FormConstructor;
import org.ovirt.engine.ui.userportal.client.components.CheckboxItemModelBinded;
import org.ovirt.engine.ui.userportal.client.components.GridController;
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.SelectBoxListModelBinded;
import org.ovirt.engine.ui.userportal.client.components.TextItemEntityModelBinded;
import org.ovirt.engine.ui.userportal.client.binders.ObjectNameIdResolver;
import org.ovirt.engine.ui.userportal.client.timers.SubTabRefreshTimer;
import com.smartgwt.client.types.Alignment;
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.layout.VLayout;
public class NewDiskModalPanel extends NonDraggableModalPanel {
final NewDiskModalPanel newDiskModalPanel = this;
UICommand cancelCommand;
public NewDiskModalPanel(final VmDiskListModel vmDiskListModel, final GridController gridController) {
super(285, 300, vmDiskListModel.getWindow().getTitle());
final DiskModel diskModel = (DiskModel)vmDiskListModel.getWindow();
VLayout inPanel = new VLayout();
inPanel.setHeight100();
inPanel.setWidth100();
TextItemEntityModelBinded sizeTextItem = new TextItemEntityModelBinded("Size (GB)", diskModel.getSize(), true);
SelectBoxListModelBinded storageDomainSelectBox = new SelectBoxListModelBinded("Storage Domain", diskModel.getStorageDomain(), storage_domains.class);
SelectBoxListModelBinded diskTypeSelectBox = new SelectBoxListModelBinded("Disk type", diskModel.getPreset(), DiskImageBase.class);
SelectBoxListModelBinded interfaceSelectBox = new SelectBoxListModelBinded("Interface", diskModel.getInterface(), DiskInterface.class);
SelectBoxListModelBinded formatSelectBox = new SelectBoxListModelBinded(false, "Format", diskModel.getVolumeType(), VolumeType.class);
CheckboxItemModelBinded wipeAfterDeleteCheckBox = new CheckboxItemModelBinded("Wipe after delete", diskModel.getWipeAfterDelete());
CheckboxItemModelBinded isBootableCheckBox = new CheckboxItemModelBinded("Is bootable", diskModel.getIsBootable());
DynamicForm f = FormConstructor.constructForm(sizeTextItem, storageDomainSelectBox, diskTypeSelectBox, interfaceSelectBox, formatSelectBox, wipeAfterDeleteCheckBox, isBootableCheckBox);
if (sizeTextItem.getDisabled()) {
f.focus();
}
else {
f.focusInItem(sizeTextItem);
f.setAutoFocus(true);
}
inPanel.addMember(f);
vmDiskListModel.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
String propertyName = ((PropertyChangedEventArgs)args).PropertyName;
if (propertyName.equals("Window")) {
vmDiskListModel.getPropertyChangedEvent().removeListener(this);
destroy();
gridController.gridChangePerformed();
}
}
});
final UICommand saveCommand = new UICommand("OnSave", vmDiskListModel);
cancelCommand = new UICommand("Cancel", vmDiskListModel);
Button okButton = new Button("OK");
okButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// No need to init subtab refresh timer since we refresh the whole grid anyway
//SubTabRefreshTimer.initSubTabRefreshTimer(vmDiskListModel);
saveCommand.Execute();
}
});
Button cancelButton = new Button("Cancel");
cancelButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
onClose();
}
});
addItem(inPanel);
setFooterButtons(Alignment.RIGHT, okButton, cancelButton);
subscribeProgressChangedEvent(diskModel, sizeTextItem, inPanel);
}
@Override
public void onClose() {
cancelCommand.Execute();
}
}