package org.ovirt.engine.ui.webadmin.section.main.view.tab.storage;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.StorageDomainType;
import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver;
import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.idhandler.WithElementId;
import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider;
import org.ovirt.engine.ui.common.view.AbstractSubTabFormView;
import org.ovirt.engine.ui.common.widget.form.FormBuilder;
import org.ovirt.engine.ui.common.widget.form.FormItem;
import org.ovirt.engine.ui.common.widget.form.GeneralFormPanel;
import org.ovirt.engine.ui.common.widget.label.StorageSizeLabel;
import org.ovirt.engine.ui.common.widget.label.StringValueLabel;
import org.ovirt.engine.ui.uicommonweb.models.storage.StorageGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.storage.StorageListModel;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationMessages;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.storage.SubTabStorageGeneralPresenter;
import org.ovirt.engine.ui.webadmin.widget.label.PercentLabel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
public class SubTabStorageGeneralView extends AbstractSubTabFormView<StorageDomain, StorageListModel, StorageGeneralModel> implements SubTabStorageGeneralPresenter.ViewDef, Editor<StorageGeneralModel> {
interface Driver extends UiCommonEditorDriver<StorageGeneralModel, SubTabStorageGeneralView> {
}
interface ViewIdHandler extends ElementIdHandler<SubTabStorageGeneralView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
interface ViewUiBinder extends UiBinder<Widget, SubTabStorageGeneralView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
@Ignore
StorageSizeLabel<Integer> totalSize = new StorageSizeLabel<>();
@Ignore
StorageSizeLabel<Integer> availableSize = new StorageSizeLabel<>();
@Ignore
StorageSizeLabel<Integer> usedSize = new StorageSizeLabel<>();
@Ignore
StorageSizeLabel<Integer> allocatedSize = new StorageSizeLabel<>();
@Ignore
PercentLabel<Integer> overAllocationRatio = new PercentLabel<>();
@Ignore
StringValueLabel warningLowSpaceIndicator = new StringValueLabel();
@Ignore
StorageSizeLabel<Integer> criticalSpaceActionBlocker = new StorageSizeLabel<>();
@Path("path")
StringValueLabel path = new StringValueLabel();
@Path("vfsType")
StringValueLabel vfsType = new StringValueLabel();
@Path("mountOptions")
StringValueLabel mountOptions = new StringValueLabel();
@Path("nfsVersion")
StringValueLabel nfsVersion = new StringValueLabel();
@Path("retransmissions")
StringValueLabel retransmissions = new StringValueLabel();
@Path("timeout")
StringValueLabel timeout = new StringValueLabel();
@UiField(provided = true)
@WithElementId
GeneralFormPanel formPanel;
FormBuilder formBuilder;
private final Driver driver = GWT.create(Driver.class);
private static final ApplicationConstants constants = AssetProvider.getConstants();
private static final ApplicationMessages messages = AssetProvider.getMessages();
@Inject
public SubTabStorageGeneralView(DetailModelProvider<StorageListModel, StorageGeneralModel> modelProvider) {
super(modelProvider);
// Init formPanel
formPanel = new GeneralFormPanel();
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
driver.initialize(this);
generateIds();
// Build a form using the FormBuilder
formBuilder = new FormBuilder(formPanel, 1, 14);
formBuilder.setRelativeColumnWidth(0, 12);
formBuilder.addFormItem(new FormItem(constants.sizeStorageGeneral(), totalSize, 0, 0), 2, 10);
formBuilder.addFormItem(new FormItem(constants.availableStorageGeneral(), availableSize, 1, 0), 2, 10);
formBuilder.addFormItem(new FormItem(constants.usedStorageGeneral(), usedSize, 2, 0), 2, 10);
formBuilder.addFormItem(new FormItem(constants.allocatedStorageGeneral(), allocatedSize, 3, 0), 2, 10);
formBuilder.addFormItem(new FormItem(constants.overAllocRatioStorageGeneral(), overAllocationRatio, 4, 0) {
@Override
public boolean getIsAvailable() {
StorageDomain entity = getDetailModel().getEntity();
StorageDomainType storageDomainType = entity != null ? entity.getStorageDomainType() : null;
return !StorageDomainType.ISO.equals(storageDomainType)
&& !StorageDomainType.ImportExport.equals(storageDomainType);
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(5, 0), 2, 10); // empty cell
formBuilder.addFormItem(new FormItem(constants.pathStorageGeneral(), path, 6, 0) {
@Override
public boolean getIsAvailable() {
return getDetailModel().getPath() != null;
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(constants.vfsTypeStorageGeneral(), vfsType, 7, 0) {
@Override
public boolean getIsAvailable() {
return getDetailModel().getIsPosix() && getDetailModel().getVfsType() != null
&& !getDetailModel().getVfsType().isEmpty();
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(constants.mountOptionsGeneral(), mountOptions, 8, 0) {
@Override
public boolean getIsAvailable() {
return getDetailModel().getIsPosix() && getDetailModel().getMountOptions() != null
&& !getDetailModel().getMountOptions().isEmpty();
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(constants.nfsVersionGeneral(), nfsVersion, 9, 0) {
@Override
public boolean getIsAvailable() {
return getDetailModel().getIsNfs() && getDetailModel().getNfsVersion() != null;
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(constants.nfsRetransmissionsGeneral(), retransmissions, 10, 0) {
@Override
public boolean getIsAvailable() {
return getDetailModel().getIsNfs() && getDetailModel().getRetransmissions() != null;
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(constants.nfsTimeoutGeneral(), timeout, 11, 0) {
@Override
public boolean getIsAvailable() {
return getDetailModel().getIsNfs() && getDetailModel().getTimeout() != null;
}
}, 2, 10);
formBuilder.addFormItem(new FormItem(constants.warningLowSpaceIndicator(), warningLowSpaceIndicator, 12, 0), 2, 10);
formBuilder.addFormItem(new FormItem(constants.criticalSpaceActionBlocker(), criticalSpaceActionBlocker, 13, 0), 2, 10);
}
@Override
protected void generateIds() {
ViewIdHandler.idHandler.generateAndSetIds(this);
}
@Override
public void setMainTabSelectedItem(StorageDomain selectedItem) {
driver.edit(getDetailModel());
// Required because of StorageGeneralModel.getEntity() returning Object
StorageDomain entity = getDetailModel().getEntity();
if (entity != null) {
totalSize.setValue(entity.getTotalDiskSize());
availableSize.setValue(entity.getAvailableDiskSize());
usedSize.setValue(entity.getUsedDiskSize());
allocatedSize.setValue(entity.getCommittedDiskSize());
overAllocationRatio.setValue(entity.getStorageDomainOverCommitPercent());
warningLowSpaceIndicator.setValue(messages.percentWithValueInGB(
entity.getWarningLowSpaceIndicator(), entity.getWarningLowSpaceSize()));
criticalSpaceActionBlocker.setValue(entity.getCriticalSpaceActionBlocker());
}
formBuilder.update(getDetailModel());
}
}