package org.ovirt.engine.ui.webadmin.section.main.view.popup.datacenter; import java.util.ArrayList; import java.util.List; 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.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.common.SelectionTreeNodeModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterNetworkModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.DataCenterNetworkPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.webadmin.uicommon.model.ModelListTreeViewModel; import org.ovirt.engine.ui.webadmin.uicommon.model.SimpleSelectionTreeNodeModel; import org.ovirt.engine.ui.webadmin.widget.Align; import org.ovirt.engine.ui.webadmin.widget.dialog.SimpleDialogButton; import org.ovirt.engine.ui.webadmin.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelCellTree; import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelCheckBoxEditor; import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelTextBoxEditor; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.EventBus; 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.gwt.view.client.AsyncDataProvider; import com.google.inject.Inject; public class DataCenterNetworkPopupView extends AbstractModelBoundPopupView<DataCenterNetworkModel> implements DataCenterNetworkPopupPresenterWidget.ViewDef { interface Driver extends SimpleBeanEditorDriver<DataCenterNetworkModel, DataCenterNetworkPopupView> { Driver driver = GWT.create(Driver.class); } interface ViewUiBinder extends UiBinder<SimpleDialogPanel, DataCenterNetworkPopupView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @UiField @Ignore Label mainLabel; @UiField @Ignore Label subLabel; @UiField @Ignore Label assignLabel; @UiField @Path(value = "name.entity") EntityModelTextBoxEditor nameEditor; @UiField @Path(value = "description.entity") EntityModelTextBoxEditor descriptionEditor; @UiField(provided = true) @Path(value = "isStpEnabled.entity") EntityModelCheckBoxEditor stpSupport; @UiField(provided = true) @Path(value = "hasVLanTag.entity") EntityModelCheckBoxEditor vlanTagging; @UiField @Path(value = "vLanTag.entity") EntityModelTextBoxEditor vlanTag; @UiField @Ignore EntityModelCellTree<SelectionTreeNodeModel, SimpleSelectionTreeNodeModel> tree; @UiField @Ignore Label messageLabel; @UiField @Ignore SimpleDialogButton detachAll; @Inject public DataCenterNetworkPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants) { super(eventBus, resources); stpSupport = new EntityModelCheckBoxEditor(Align.RIGHT); vlanTagging = new EntityModelCheckBoxEditor(Align.RIGHT); initListBoxEditors(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); localize(constants); // detachAll.setVisible(false); Driver.driver.initialize(this); } @Override public void edit(DataCenterNetworkModel object) { Driver.driver.edit(object); final UICommand detachAllCommand = object.getDetachAllCommand(); vlanTag.setEnabled((Boolean) object.getHasVLanTag().getEntity()); // Listen to Properties object.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { DataCenterNetworkModel model = (DataCenterNetworkModel) sender; String propertyName = ((PropertyChangedEventArgs) args).PropertyName; if ("ClusterTreeNodes".equals(propertyName)) { // update tree data ArrayList<SelectionTreeNodeModel> clusterTreeNodes = model.getClusterTreeNodes(); @SuppressWarnings("unchecked") ModelListTreeViewModel<SelectionTreeNodeModel, SimpleSelectionTreeNodeModel> modelListTreeViewModel = (ModelListTreeViewModel<SelectionTreeNodeModel, SimpleSelectionTreeNodeModel>) tree.getTreeViewModel(); List<SimpleSelectionTreeNodeModel> rootNodes = SimpleSelectionTreeNodeModel.fromList(clusterTreeNodes); modelListTreeViewModel.setRoot(rootNodes); AsyncDataProvider<SimpleSelectionTreeNodeModel> asyncTreeDataProvider = modelListTreeViewModel.getAsyncTreeDataProvider(); asyncTreeDataProvider.updateRowCount(rootNodes.size(), true); asyncTreeDataProvider.updateRowData(0, rootNodes); } if ("Message".equals(propertyName)) { messageLabel.setText(model.getMessage()); } } }); // Listen to "IsEnabled" property object.getIsEnabled().getEntityChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { EntityModel entity = (EntityModel) sender; if (!(Boolean) entity.getEntity()) { nameEditor.setEnabled(false); descriptionEditor.setEnabled(false); stpSupport.setEnabled(false); vlanTagging.setEnabled(false); vlanTag.setEnabled(false); } } }); // Listen to "DetachAllAvailable" property object.getDetachAllAvailable().getEntityChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { EntityModel entity = (EntityModel) sender; detachAll.setVisible((Boolean) entity.getEntity()); } }); // Listen to "HasVLanTag" property object.getHasVLanTag().getEntityChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { EntityModel entity = (EntityModel) sender; vlanTag.setEnabled((Boolean) entity.getEntity()); } }); detachAll.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { detachAllCommand.Execute(); } }); } @Override public DataCenterNetworkModel flush() { return Driver.driver.flush(); } @Override public void focusInput() { nameEditor.setFocus(true); } void initListBoxEditors() { } void localize(ApplicationConstants constants) { mainLabel.setText(constants.dataCenterNetworkPopupLabel()); subLabel.setText(constants.dataCenterNetworkPopupSubLabel()); assignLabel.setText(constants.dataCenterNetworkPopupAssignLabel()); nameEditor.setLabel(constants.dataCenterPopupNameLabel()); descriptionEditor.setLabel(constants.dataCenterPopupDescriptionLabel()); stpSupport.setLabel("STP Support"); vlanTagging.setLabel("Enable VLAN tagging"); } }