package org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster;
import java.util.ArrayList;
import java.util.Arrays;
import javax.inject.Inject;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
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.StringValueLabel;
import org.ovirt.engine.ui.common.widget.label.VolumeTransportTypeLabel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.volumes.VolumeListModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.EnumTranslator;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeGeneralPresenter;
import org.ovirt.engine.ui.webadmin.widget.label.DetailsTextBoxLabel;
import org.ovirt.engine.ui.webadmin.widget.label.VolumeCapacityLabel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.ValueLabel;
public class SubTabVolumeGeneralView extends AbstractSubTabFormView<GlusterVolumeEntity, VolumeListModel, VolumeGeneralModel> implements SubTabVolumeGeneralPresenter.ViewDef, Editor<VolumeGeneralModel> {
interface Driver extends UiCommonEditorDriver<VolumeGeneralModel, SubTabVolumeGeneralView> {
}
interface ViewIdHandler extends ElementIdHandler<SubTabVolumeGeneralView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
@UiField(provided = true)
@WithElementId
GeneralFormPanel formPanel;
StringValueLabel name = new StringValueLabel();
StringValueLabel volumeId = new StringValueLabel();
StringValueLabel volumeType = new StringValueLabel();
StringValueLabel replicaCount = new StringValueLabel();
StringValueLabel stripeCount = new StringValueLabel();
StringValueLabel disperseCount = new StringValueLabel();
StringValueLabel redundancyCount = new StringValueLabel();
StringValueLabel numOfBricks = new StringValueLabel();
VolumeTransportTypeLabel transportTypes = new VolumeTransportTypeLabel();
StringValueLabel snapMaxLimit = new StringValueLabel();
VolumeCapacityLabel<Long> volumeTotalCapacity;
VolumeCapacityLabel<Long> volumeUsedCapacity;
VolumeCapacityLabel<Long> volumeFreeCapacity;
FormBuilder formBuilder;
FormItem replicaFormItem;
FormItem stripeFormItem;
FormItem disperseCountFormItem;
FormItem redundancyCountFormItem;
@Ignore
DetailsTextBoxLabel<ArrayList<ValueLabel<Long>>, Long> volumeCapacityDetailsLabel = new DetailsTextBoxLabel<>(constants.total(), constants.used(), constants.free());
private final Driver driver = GWT.create(Driver.class);
private static final ApplicationConstants constants = AssetProvider.getConstants();
@Inject
public SubTabVolumeGeneralView(DetailModelProvider<VolumeListModel, VolumeGeneralModel> modelProvider) {
super(modelProvider);
initCapacityLabel();
// Init form panel:
formPanel = new GeneralFormPanel();
initWidget(formPanel);
driver.initialize(this);
generateIds();
// Build a form using the FormBuilder
formBuilder = new FormBuilder(formPanel, 1, 11);
formBuilder.addFormItem(new FormItem(constants.nameVolume(), name, 0, 0));
formBuilder.addFormItem(new FormItem(constants.volumeIdVolume(), volumeId, 1, 0));
formBuilder.addFormItem(new FormItem(constants.volumeTypeVolume(), volumeType, 2, 0));
replicaFormItem = new FormItem(constants.replicaCountVolume(), replicaCount, 3, 0);
formBuilder.addFormItem(replicaFormItem);
stripeFormItem = new FormItem(constants.stripeCountVolume(), stripeCount, 4, 0);
formBuilder.addFormItem(stripeFormItem);
formBuilder.addFormItem(new FormItem(constants.numberOfBricksVolume(), numOfBricks, 5, 0));
formBuilder.addFormItem(new FormItem(constants.transportTypesVolume(), transportTypes, 6, 0));
formBuilder.addFormItem(new FormItem(constants.maxNumberOfSnapshotsVolume(), snapMaxLimit, 7, 0));
disperseCountFormItem = new FormItem(constants.disperseCount(), disperseCount, 8, 0);
formBuilder.addFormItem(disperseCountFormItem);
redundancyCountFormItem = new FormItem(constants.redundancyCount(), redundancyCount, 9, 0);
formBuilder.addFormItem(redundancyCountFormItem);
volumeCapacityDetailsLabel.setWidth("275px");//$NON-NLS-1$
formBuilder.addFormItem(new FormItem(constants.volumeCapacityStatistics(), volumeCapacityDetailsLabel, 10, 0));
getDetailModel().getPropertyChangedEvent().addListener((ev, sender, args) -> {
VolumeGeneralModel model = (VolumeGeneralModel) sender;
if ("VolumeType".equals(args.propertyName)) { //$NON-NLS-1$
translateVolumeType(model.getEntity());
}
});
formBuilder.setRelativeColumnWidth(0, 4);
}
private void initCapacityLabel() {
this.volumeTotalCapacity = new VolumeCapacityLabel<>(constants);
this.volumeFreeCapacity = new VolumeCapacityLabel<>(constants);
this.volumeUsedCapacity = new VolumeCapacityLabel<>(constants);
}
@Override
protected void generateIds() {
ViewIdHandler.idHandler.generateAndSetIds(this);
}
@Override
public void setMainTabSelectedItem(GlusterVolumeEntity selectedItem) {
driver.edit(getDetailModel());
replicaFormItem.setIsAvailable(selectedItem.getVolumeType().isReplicatedType());
stripeFormItem.setIsAvailable(selectedItem.getVolumeType().isStripedType());
disperseCountFormItem.setIsAvailable(selectedItem.getVolumeType().isDispersedType());
redundancyCountFormItem.setIsAvailable(selectedItem.getVolumeType().isDispersedType());
ArrayList<ValueLabel<Long>> volumeCapacityDetails =
new ArrayList<>(Arrays.<ValueLabel<Long>>asList(volumeTotalCapacity, volumeUsedCapacity, volumeFreeCapacity));
volumeCapacityDetailsLabel.setValue(volumeCapacityDetails);
formBuilder.update(getDetailModel());
}
private void translateVolumeType(GlusterVolumeEntity volumeEntity) {
EnumTranslator translator = EnumTranslator.getInstance();
if (translator.containsKey(volumeEntity.getVolumeType())) {
String volumeType = translator.translate(volumeEntity.getVolumeType());
if (volumeEntity.getIsArbiter()) {
volumeType += " (" + ConstantsManager.getInstance().getConstants().arbiter() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
getDetailModel().setVolumeTypeSilently(volumeType);
}
}
}