package org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster;
import javax.inject.Inject;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterServiceStatus;
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.UiCommandButton;
import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelLabelEditor;
import org.ovirt.engine.ui.common.widget.form.FormBuilder;
import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer;
import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel;
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.cluster.SubTabClusterGeneralPresenter;
import org.ovirt.engine.ui.webadmin.widget.alert.InLineAlertWidget;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
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.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
public class SubTabClusterGeneralView extends AbstractSubTabFormView<Cluster, ClusterListModel<Void>, ClusterGeneralModel>
implements SubTabClusterGeneralPresenter.ViewDef, Editor<ClusterGeneralModel> {
interface Driver extends UiCommonEditorDriver<ClusterGeneralModel, SubTabClusterGeneralView> {
}
interface ViewIdHandler extends ElementIdHandler<SubTabClusterGeneralView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
interface ViewUiBinder extends UiBinder<Widget, SubTabClusterGeneralView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
@UiField
WidgetStyle style;
@UiField(provided = true)
@Ignore
@WithElementId
ClusterGeneralModelForm form;
FormBuilder formBuilder;
@UiField
HorizontalPanel glusterSwiftPanel;
@UiField(provided = true)
EntityModelLabelEditor<GlusterServiceStatus> glusterSwiftStatusEditor;
@UiField
UiCommandButton manageGlusterSwiftButton;
@UiField
HTMLPanel alertsPanel;
// This is the list of action items inside the panel, so that we
// can clear and add elements inside without affecting the panel:
@UiField
FlowPanel alertsList;
private final Driver driver = GWT.create(Driver.class);
private static final ApplicationConstants constants = AssetProvider.getConstants();
@Inject
public SubTabClusterGeneralView(final DetailModelProvider<ClusterListModel<Void>, ClusterGeneralModel> modelProvider) {
super(modelProvider);
// Inject a reference to the resources:
this.form = new ClusterGeneralModelForm(modelProvider);
// generate ids
generateIds();
// init form
form.initialize();
glusterSwiftStatusEditor = new EntityModelLabelEditor<>(new EnumRenderer<GlusterServiceStatus>());
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
initManageGlusterSwift();
localize();
addStyles();
modelProvider.getModel().getEntityChangedEvent().addListener((ev, sender, args) -> {
Cluster entity = modelProvider.getModel().getEntity();
if (entity != null) {
setMainTabSelectedItem(entity);
}
});
driver.initialize(this);
}
@Override
protected void generateIds() {
ViewIdHandler.idHandler.generateAndSetIds(this);
}
private void initManageGlusterSwift() {
manageGlusterSwiftButton.setCommand(getDetailModel().getManageGlusterSwiftCommand());
manageGlusterSwiftButton.addClickHandler(event -> manageGlusterSwiftButton.getCommand().execute());
}
private void localize() {
glusterSwiftStatusEditor.setLabel(constants.clusterGlusterSwiftLabel());
manageGlusterSwiftButton.setLabel(constants.clusterGlusterSwiftManageLabel());
}
private void addStyles() {
glusterSwiftStatusEditor.addContentWidgetContainerStyleName(style.glusterSwiftStatus());
}
@Override
public void setMainTabSelectedItem(Cluster selectedItem) {
driver.edit(getDetailModel());
form.update();
glusterSwiftPanel.setVisible(false);
}
@Override
public void clearAlerts() {
// Remove all the alert widgets and make the panel invisible:
alertsList.clear();
alertsPanel.setVisible(false);
}
@Override
public void addAlert(Widget alertWidget) {
alertsList.add(new InLineAlertWidget(alertWidget));
// Make the panel visible if it wasn't:
if (!alertsPanel.isVisible()) {
alertsPanel.setVisible(true);
}
}
interface WidgetStyle extends CssResource {
String glusterSwiftStatus();
}
}