package org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster;
import org.ovirt.engine.core.common.businessentities.ServerCpu;
import org.ovirt.engine.core.common.businessentities.storage_pool;
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.StringFormat;
import org.ovirt.engine.core.compat.Version;
import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterModel;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.webadmin.idhandler.WithElementId;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterPopupPresenterWidget;
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.dialog.tab.DialogTab;
import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelRadioButtonEditor;
import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelTextBoxEditor;
import org.ovirt.engine.ui.webadmin.widget.editor.ListModelListBoxEditor;
import org.ovirt.engine.ui.webadmin.widget.renderer.NullSafeRenderer;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
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.Label;
import com.google.inject.Inject;
public class ClusterPopupView extends AbstractModelBoundPopupView<ClusterModel> implements ClusterPopupPresenterWidget.ViewDef {
interface Driver extends SimpleBeanEditorDriver<ClusterModel, ClusterPopupView> {
Driver driver = GWT.create(Driver.class);
}
interface ViewUiBinder extends UiBinder<SimpleDialogPanel, ClusterPopupView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
interface ViewIdHandler extends ElementIdHandler<ClusterPopupView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
@UiField
WidgetStyle style;
@UiField
@WithElementId
DialogTab generalTab;
@UiField(provided = true)
@Path(value = "dataCenter.selectedItem")
@WithElementId
ListModelListBoxEditor<Object> dataCenterEditor;
@UiField
@Path(value = "name.entity")
@WithElementId
EntityModelTextBoxEditor nameEditor;
@UiField
@Path(value = "description.entity")
@WithElementId
EntityModelTextBoxEditor descriptionEditor;
@UiField(provided = true)
@Path(value = "cPU.selectedItem")
@WithElementId
ListModelListBoxEditor<Object> cPUEditor;
@UiField(provided = true)
@Path(value = "version.selectedItem")
@WithElementId
ListModelListBoxEditor<Object> versionEditor;
@UiField
@WithElementId
DialogTab memoryOptimizationTab;
@UiField(provided = true)
@Path(value = "optimizationNone_IsSelected.entity")
@WithElementId
EntityModelRadioButtonEditor optimizationNoneEditor;
@UiField
@Ignore
Label optimizationNoneExplanationLabel;
@UiField(provided = true)
@Path(value = "optimizationForServer_IsSelected.entity")
@WithElementId
EntityModelRadioButtonEditor optimizationForServerEditor;
@UiField
@Ignore
Label optimizationForServerExplanationLabel;
@UiField(provided = true)
@Path(value = "optimizationForDesktop_IsSelected.entity")
@WithElementId
EntityModelRadioButtonEditor optimizationForDesktopEditor;
@UiField
@Ignore
Label optimizationForDesktopExplanationLabel;
@UiField(provided = true)
@Path(value = "optimizationCustom_IsSelected.entity")
@WithElementId
EntityModelRadioButtonEditor optimizationCustomEditor;
@UiField(provided = true)
@Ignore
Label optimizationCustomExplanationLabel;
@UiField
@WithElementId
DialogTab resiliencePolicyTab;
@UiField(provided = true)
@Path(value = "migrateOnErrorOption_YES.entity")
@WithElementId
EntityModelRadioButtonEditor migrateOnErrorOption_YESEditor;
@UiField(provided = true)
@Path(value = "migrateOnErrorOption_HA_ONLY.entity")
@WithElementId
EntityModelRadioButtonEditor migrateOnErrorOption_HA_ONLYEditor;
@UiField(provided = true)
@Path(value = "migrateOnErrorOption_NO.entity")
@WithElementId
EntityModelRadioButtonEditor migrateOnErrorOption_NOEditor;
@Inject
public ClusterPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants) {
super(eventBus, resources);
initListBoxEditors();
initRadioButtonEditors();
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
ViewIdHandler.idHandler.generateAndSetIds(this);
addStyles();
localize(constants);
Driver.driver.initialize(this);
}
private void addStyles() {
migrateOnErrorOption_NOEditor.addContentWidgetStyleName(style.label());
migrateOnErrorOption_YESEditor.addContentWidgetStyleName(style.label());
migrateOnErrorOption_HA_ONLYEditor.addContentWidgetStyleName(style.label());
}
private void localize(ApplicationConstants constants) {
generalTab.setLabel(constants.clusterPopupGeneralTabLabel());
dataCenterEditor.setLabel(constants.clusterPopupDataCenterLabel());
nameEditor.setLabel(constants.clusterPopupNameLabel());
descriptionEditor.setLabel(constants.clusterPopupDescriptionLabel());
cPUEditor.setLabel(constants.clusterPopupCPULabel());
versionEditor.setLabel(constants.clusterPopupVersionLabel());
memoryOptimizationTab.setLabel(constants.clusterPopupMemoryOptimizationTabLabel());
optimizationNoneEditor.setLabel(constants.clusterPopupOptimizationNoneLabel());
optimizationForServerEditor.setLabel(constants.clusterPopupOptimizationForServerLabel());
optimizationForDesktopEditor.setLabel(constants.clusterPopupOptimizationForDesktopLabel());
optimizationCustomEditor.setLabel(constants.clusterPopupOptimizationCustomLabel());
optimizationNoneExplanationLabel.setText(constants.clusterPopupOptimizationNoneExplainationLabel());
optimizationForServerExplanationLabel.setText(constants.clusterPopupOptimizationForServerExplainationLabel());
optimizationForDesktopExplanationLabel.setText(constants.clusterPopupOptimizationForDesktopExplainationLabel());
optimizationCustomExplanationLabel.setText(constants.clusterPopupOptimizationCustomExplainationLabel());
resiliencePolicyTab.setLabel(constants.clusterPopupResiliencePolicyTabLabel());
migrateOnErrorOption_YESEditor.setLabel(constants.clusterPopupMigrateOnError_YesLabel());
migrateOnErrorOption_HA_ONLYEditor.setLabel(constants.clusterPopupMigrateOnError_HaLabel());
migrateOnErrorOption_NOEditor.setLabel(constants.clusterPopupMigrateOnError_NoLabel());
}
private void initRadioButtonEditors() {
optimizationNoneEditor = new EntityModelRadioButtonEditor("1");
optimizationForServerEditor = new EntityModelRadioButtonEditor("1");
optimizationForDesktopEditor = new EntityModelRadioButtonEditor("1");
optimizationCustomEditor = new EntityModelRadioButtonEditor("1");
migrateOnErrorOption_YESEditor = new EntityModelRadioButtonEditor("2");
migrateOnErrorOption_HA_ONLYEditor = new EntityModelRadioButtonEditor("2");
migrateOnErrorOption_NOEditor = new EntityModelRadioButtonEditor("2");
optimizationCustomExplanationLabel = new Label();
optimizationCustomExplanationLabel.setVisible(false);
}
private void initListBoxEditors() {
dataCenterEditor = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() {
@Override
public String renderNullSafe(Object object) {
return ((storage_pool) object).getname();
}
});
cPUEditor = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() {
@Override
public String renderNullSafe(Object object) {
return ((ServerCpu) object).getCpuName();
}
});
versionEditor = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() {
@Override
public String renderNullSafe(Object object) {
return ((Version) object).toString();
}
});
}
@Override
public void focusInput() {
nameEditor.setFocus(true);
}
@Override
public void edit(final ClusterModel object) {
Driver.driver.edit(object);
object.getOptimizationForServer().getEntityChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
optimizationForServerExplanationLabel.setText(StringFormat.format(optimizationForServerExplanationLabel.getText(),
object.getOptimizationForServer().getEntity().toString() + "%"));
}
});
object.getOptimizationForDesktop().getEntityChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
optimizationForDesktopExplanationLabel.setText(StringFormat.format(optimizationForDesktopExplanationLabel.getText(),
object.getOptimizationForDesktop().getEntity().toString() + "%"));
}
});
object.getOptimizationCustom_IsSelected().getEntityChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
if ((Boolean) object.getOptimizationCustom_IsSelected().getEntity()) {
optimizationCustomExplanationLabel.setText(StringFormat.format(optimizationCustomExplanationLabel.getText(),
object.getOptimizationCustom().getEntity().toString() + "%"));
optimizationCustomExplanationLabel.setVisible(true);
}
}
});
object.getDataCenter().getSelectedItemChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
resiliencePolicyTab.setVisible(object.getisResiliencePolicyTabAvailable());
}
});
}
@Override
public ClusterModel flush() {
return Driver.driver.flush();
}
interface WidgetStyle extends CssResource {
String label();
}
}