package org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster; import org.ovirt.engine.core.common.businessentities.VdsSelectionAlgorithm; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterPolicyModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterPolicyPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.webadmin.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelTextBoxEditor; import org.ovirt.engine.ui.webadmin.widget.form.Slider; import org.ovirt.engine.ui.webadmin.widget.form.Slider.SliderValueChange; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.EventBus; 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.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.SimplePanel; import com.google.inject.Inject; public class ClusterPolicyPopupView extends AbstractModelBoundPopupView<ClusterPolicyModel> implements ClusterPolicyPopupPresenterWidget.ViewDef, SliderValueChange { private static final String RIGHT = "right"; private static final String LEFT = "left"; private static final String MAX_COLOR = "#4E9FDD"; private static final String MIN_COLOR = "#AFBF27"; interface Driver extends SimpleBeanEditorDriver<ClusterPolicyModel, ClusterPolicyPopupView> { Driver driver = GWT.create(Driver.class); } interface ViewUiBinder extends UiBinder<SimpleDialogPanel, ClusterPolicyPopupView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @UiField WidgetStyle style; @UiField(provided = true) Slider leftSlider; @UiField(provided = true) Slider rightSlider; @UiField(provided = true) @Ignore Label maxServiceLevelLabel; @UiField(provided = true) @Ignore Label minServiceLevelLabel; @UiField(provided = true) @Ignore SimplePanel leftDummySlider; @UiField(provided = true) @Ignore SimplePanel rightDummySlider; @UiField(provided = true) @Ignore RadioButton policyRadioButton_none; @UiField(provided = true) @Ignore RadioButton policyRadioButton_evenDist; @UiField(provided = true) @Ignore RadioButton policyRadioButton_powerSave; @UiField(provided = true) @Path(value = "overCommitTime.entity") EntityModelTextBoxEditor overCommitTimeEditor; @UiField @Ignore HorizontalPanel timeHorizontalPanel; @UiField @Ignore Label forTimeLabel; @UiField @Ignore Label minTimeLabel; private ClusterPolicyModel clusterPolicyModel; public ClusterPolicyModel getClusterPolicyModel() { return clusterPolicyModel; } public void setClusterPolicyModel(ClusterPolicyModel entity) { this.clusterPolicyModel = entity; } @Inject public ClusterPolicyPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants) { super(eventBus, resources); initSliders(); initLabels(); initRadioButtons(); initDummyPanel(); initTextBox(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); addStyles(); localize(constants); Driver.driver.initialize(this); } private void localize(ApplicationConstants constants) { policyRadioButton_none.setText(constants.clusterPolicyNoneLabel()); policyRadioButton_evenDist.setText(constants.clusterPolicyEvenDistLabel()); policyRadioButton_powerSave.setText(constants.clusterPolicyPowSaveLabel()); maxServiceLevelLabel.setText(constants.clusterPolicyMaxServiceLevelLabel()); minServiceLevelLabel.setText(constants.clusterPolicyMinServiceLevelLabel()); forTimeLabel.setText(constants.clusterPolicyForTimeLabel()); minTimeLabel.setText(constants.clusterPolicyMinTimeLabel()); } private void addStyles() { overCommitTimeEditor.addContentWidgetStyleName(style.timeTextBoxEditorWidget()); } private void initTextBox() { overCommitTimeEditor = new EntityModelTextBoxEditor(); } private void initRadioButtons() { policyRadioButton_none = new RadioButton("policyRadioButtonGroup", ""); policyRadioButton_evenDist = new RadioButton("policyRadioButtonGroup", ""); policyRadioButton_powerSave = new RadioButton("policyRadioButtonGroup", ""); policyRadioButton_none.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { getClusterPolicyModel().setSelectionAlgorithm(VdsSelectionAlgorithm.None); } setSelectionAlgorithm(); } }); policyRadioButton_evenDist.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { getClusterPolicyModel().setSelectionAlgorithm(VdsSelectionAlgorithm.EvenlyDistribute); } setSelectionAlgorithm(); } }); policyRadioButton_powerSave.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { getClusterPolicyModel().setSelectionAlgorithm(VdsSelectionAlgorithm.PowerSave); } setSelectionAlgorithm(); } }); } private void initDummyPanel() { leftDummySlider = new SimplePanel(); leftDummySlider.setVisible(false); rightDummySlider = new SimplePanel(); rightDummySlider.setVisible(false); } private void initLabels() { maxServiceLevelLabel = new Label(); minServiceLevelLabel = new Label(); } private void initSliders() { leftSlider = new Slider(4, 10, 50, 20, MIN_COLOR); leftSlider.setSliderValueChange(LEFT, this); rightSlider = new Slider(4, 51, 90, 75, MAX_COLOR); rightSlider.setSliderValueChange(RIGHT, this); } private void setVisibility(boolean b) { rightSlider.setVisible(b); leftSlider.setVisible(b); leftDummySlider.setVisible(false); rightDummySlider.setVisible(false); timeHorizontalPanel.setVisible(b); } @Override public void edit(ClusterPolicyModel object) { Driver.driver.edit(object); setClusterPolicyModel(object); if (getClusterPolicyModel().getSelectionAlgorithm().equals(VdsSelectionAlgorithm.PowerSave)) { policyRadioButton_powerSave.setValue(true); } else if (getClusterPolicyModel().getSelectionAlgorithm() .equals(VdsSelectionAlgorithm.EvenlyDistribute)) { policyRadioButton_evenDist.setValue(true); } else { policyRadioButton_none.setValue(true); } setSelectionAlgorithm(); } private void setSelectionAlgorithm() { if (getClusterPolicyModel().getSelectionAlgorithm().equals(VdsSelectionAlgorithm.PowerSave)) { setVisibility(true); leftSlider.setValue((getClusterPolicyModel().getOverCommitLowLevel() <= 10 ? 20 : getClusterPolicyModel().getOverCommitLowLevel())); if (getClusterPolicyModel().getOverCommitHighLevel() <= 50 || getClusterPolicyModel().getOverCommitHighLevel() >= 90) { rightSlider.setValue(75); } else { rightSlider.setValue(getClusterPolicyModel().getOverCommitHighLevel()); } // timeTextBox.setText(getClusterPolicyModel().getOverCommitTime().getEntity() + ""); } else if (getClusterPolicyModel().getSelectionAlgorithm() .equals(VdsSelectionAlgorithm.EvenlyDistribute)) { setVisibility(true); leftSlider.setVisible(false); leftDummySlider.setVisible(true); if (getClusterPolicyModel().getOverCommitHighLevel() <= 50 || getClusterPolicyModel().getOverCommitHighLevel() >= 90) { rightSlider.setValue(75); } else { rightSlider.setValue(getClusterPolicyModel().getOverCommitHighLevel()); } // timeTextBox.setText(getClusterPolicyModel().getOverCommitTime().getEntity() + ""); } else { // also for VdsSelectionAlgorithm.None setVisibility(false); leftDummySlider.setVisible(true); rightDummySlider.setVisible(true); } } @Override public ClusterPolicyModel flush() { // TODO Auto-generated method stub return null; } @Override public void onSliderValueChange(String name, int value) { if (name.equals(RIGHT)) { getClusterPolicyModel().setOverCommitHighLevel(value); } else if (name.equals(LEFT)) { getClusterPolicyModel().setOverCommitLowLevel(value); } } interface WidgetStyle extends CssResource { String timeTextBoxEditorWidget(); } }