package org.ovirt.engine.ui.common.widget.uicommon.storage; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; import org.ovirt.engine.core.common.utils.SizeConverter; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.idhandler.HasElementId; import org.ovirt.engine.ui.common.utils.ElementIdUtils; import org.ovirt.engine.ui.common.view.popup.FocusableComponentsContainer; import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel; import org.ovirt.engine.ui.common.widget.HasEditorDriver; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.label.EnableableFormLabel; import org.ovirt.engine.ui.common.widget.renderer.DiskSizeRenderer; import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer; import org.ovirt.engine.ui.common.widget.renderer.NameRenderer; import org.ovirt.engine.ui.common.widget.renderer.StorageDomainFreeSpaceRenderer; import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; public class DisksAllocationItemView extends Composite implements HasEditorDriver<DiskModel>, HasElementId, FocusableComponentsContainer { interface Driver extends UiCommonEditorDriver<DiskModel, DisksAllocationItemView> { } interface ViewUiBinder extends UiBinder<Widget, DisksAllocationItemView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface WidgetStyle extends CssResource { String editorContent(); String editorWrapper(); String editorLabel(); } @UiField WidgetStyle style; @UiField @Ignore EnableableFormLabel diskAliasLabel; @UiField @Path(value = "alias.entity") StringEntityModelTextBoxEditor diskAliasEditor; @UiField @Ignore EnableableFormLabel diskSizeLabel; @UiField @Path(value = "sourceStorageDomainName.entity") EnableableFormLabel sourceStorageLabel; @UiField(provided = true) @Path(value = "volumeType.selectedItem") ListModelListBoxEditor<VolumeType> volumeTypeListEditor; @UiField(provided = true) @Path(value = "volumeFormat.selectedItem") ListModelListBoxEditor<VolumeFormat> volumeFormatListEditor; @UiField(provided = true) @Path(value = "sourceStorageDomain.selectedItem") ListModelListBoxEditor<StorageDomain> sourceStorageListEditor; @UiField(provided = true) @Path(value = "storageDomain.selectedItem") ListModelListBoxEditor<StorageDomain> storageListEditor; @UiField(provided = true) @Path(value = "diskProfile.selectedItem") ListModelListBoxEditor<DiskProfile> diskProfileListEditor; @UiField(provided = true) @Path(value = "quota.selectedItem") ListModelListBoxEditor<Quota> quotaListEditor; @UiField FlowPanel diskAliasLabelContainer; @UiField FlowPanel diskSizeLabelContainer; @UiField FlowPanel sourceStorageLabelContainer; private final Driver driver = GWT.create(Driver.class); @Override public int setTabIndexes(int nextTabIndex) { diskAliasEditor.setTabIndex(nextTabIndex++); storageListEditor.setTabIndex(nextTabIndex++); diskProfileListEditor.setTabIndex(nextTabIndex++); return nextTabIndex; } public DisksAllocationItemView(String columnWidth) { initEditors(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); driver.initialize(this); diskAliasEditor.hideLabel(); updateStyles(); setColumnWidth(columnWidth); } private void setColumnWidth(String columnWidth) { volumeTypeListEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); storageListEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); volumeFormatListEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); sourceStorageListEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); diskProfileListEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); quotaListEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); diskAliasLabelContainer.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); diskAliasEditor.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); diskSizeLabelContainer.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); sourceStorageLabelContainer.getElement().getStyle().setWidth(Double.valueOf(columnWidth), Unit.PCT); } void initEditors() { volumeTypeListEditor = new ListModelListBoxEditor<>(new EnumRenderer<VolumeType>()); volumeTypeListEditor.hideLabel(); storageListEditor = new ListModelListBoxEditor<>(new StorageDomainFreeSpaceRenderer<>()); storageListEditor.hideLabel(); volumeFormatListEditor = new ListModelListBoxEditor<>(new EnumRenderer<VolumeFormat>()); volumeFormatListEditor.hideLabel(); sourceStorageListEditor = new ListModelListBoxEditor<>(new StorageDomainFreeSpaceRenderer<>()); sourceStorageListEditor.hideLabel(); diskProfileListEditor = new ListModelListBoxEditor<>(new NameRenderer<DiskProfile>()); diskProfileListEditor.hideLabel(); quotaListEditor = new ListModelListBoxEditor<>(new NameRenderer<Quota>()); quotaListEditor.hideLabel(); } void updateStyles() { updateLabelStyle(diskAliasLabel, style.editorContent()); updateEditorStyle(diskAliasEditor, style.editorContent()); updateLabelStyle(diskSizeLabel, style.editorContent()); updateLabelStyle(sourceStorageLabel, style.editorContent()); updateEditorStyle(volumeTypeListEditor, style.editorContent()); updateEditorStyle(volumeFormatListEditor, style.editorContent()); updateEditorStyle(sourceStorageListEditor, style.editorContent()); updateEditorStyle(storageListEditor, style.editorContent()); updateEditorStyle(diskProfileListEditor, style.editorContent()); updateEditorStyle(quotaListEditor, style.editorContent()); } private void updateEditorStyle(AbstractValidatedWidgetWithLabel<?, ?> editor, String contentStyle) { editor.setContentWidgetContainerStyleName(contentStyle); editor.addWrapperStyleName(style.editorWrapper()); } private void updateLabelStyle(EnableableFormLabel label, String contentStyle) { label.addStyleName(contentStyle); } public void setIsAliasChangeable(boolean changeable) { diskAliasLabel.setVisible(!changeable); diskAliasEditor.setVisible(changeable); } @Override public void edit(final DiskModel object) { driver.edit(object); diskAliasLabel.setText(object.getAlias().getEntity()); diskSizeLabel.setText(new DiskSizeRenderer<Integer>(SizeConverter.SizeUnit.GiB).render( object.getSize().getEntity())); object.getVolumeType().setSelectedItem(((DiskImage) object.getDisk()).getVolumeType()); object.getVolumeFormat().setSelectedItem(((DiskImage) object.getDisk()).getVolumeFormat()); StorageDomain sourceDomain = object.getSourceStorageDomain().getSelectedItem(); if (sourceDomain != null) { sourceStorageLabel.setText(sourceDomain.getName()); } else { sourceStorageLabel.setVisible(false); } sourceStorageListEditor.setVisible(false); } @Override public DiskModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } @Override public void setElementId(String elementId) { diskAliasLabel.setId( ElementIdUtils.createElementId(elementId, "diskName")); //$NON-NLS-1$ diskAliasEditor.setElementId( ElementIdUtils.createElementId(elementId, "diskAlias")); //$NON-NLS-1$ diskSizeLabel.setId( ElementIdUtils.createElementId(elementId, "diskSize")); //$NON-NLS-1$ sourceStorageLabel.setId( ElementIdUtils.createElementId(elementId, "sourceStorageDomainName")); //$NON-NLS-1$ volumeTypeListEditor.setElementId( ElementIdUtils.createElementId(elementId, "volumeType")); //$NON-NLS-1$ volumeFormatListEditor.setElementId( ElementIdUtils.createElementId(elementId, "volumeFormat")); //$NON-NLS-1$ sourceStorageListEditor.setElementId( ElementIdUtils.createElementId(elementId, "sourceStorageDomain")); //$NON-NLS-1$ storageListEditor.setElementId( ElementIdUtils.createElementId(elementId, "storageDomain")); //$NON-NLS-1$ diskProfileListEditor.setElementId( ElementIdUtils.createElementId(elementId, "diskProfile")); //$NON-NLS-1$ quotaListEditor.setElementId( ElementIdUtils.createElementId(elementId, "quota")); //$NON-NLS-1$ } }