package org.ovirt.engine.ui.common.widget.uicommon.popup.pool; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.gin.AssetProvider; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.widget.ValidatedPanelWidget; import org.ovirt.engine.ui.common.widget.editor.ListModelObjectCellTable; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.IscsiBondModel; import com.google.gwt.core.client.GWT; 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.VerticalPanel; public class IscsiBondPopupWidget extends AbstractModelBoundPopupWidget<IscsiBondModel> { interface Driver extends UiCommonEditorDriver<IscsiBondModel, IscsiBondPopupWidget> { } interface ViewUiBinder extends UiBinder<FlowPanel, IscsiBondPopupWidget> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<IscsiBondPopupWidget> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } @UiField @Path("name.entity") @WithElementId("name") StringEntityModelTextBoxEditor nameEditor; @UiField @Path("description.entity") @WithElementId("description") StringEntityModelTextBoxEditor descriptionEditor; @UiField ValidatedPanelWidget logicalNetworksPanel; @UiField ValidatedPanelWidget storageTargetsPanel; @Ignore @WithElementId ListModelObjectCellTable<Network, ListModel> networksTable; @Ignore @WithElementId ListModelObjectCellTable<StorageServerConnections, ListModel> connectionsTable; private final Driver driver = GWT.create(Driver.class); private static final CommonApplicationConstants constants = AssetProvider.getConstants(); public IscsiBondPopupWidget() { initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); localize(); ViewIdHandler.idHandler.generateAndSetIds(this); initLogicalNetworksPanel(); initNetworksTable(); initStorageConnectionsPanel(); initConnectionsTable(); driver.initialize(this); } private void initLogicalNetworksPanel() { VerticalPanel panel = new VerticalPanel(); networksTable = new ListModelObjectCellTable<>(true); panel.add(networksTable); logicalNetworksPanel.setWidget(panel); } private void initStorageConnectionsPanel() { VerticalPanel panel = new VerticalPanel(); connectionsTable = new ListModelObjectCellTable<>(true); panel.add(connectionsTable); storageTargetsPanel.setWidget(panel); } private void initNetworksTable() { networksTable.enableColumnResizing(); AbstractTextColumn<Network> nameColumn = new AbstractTextColumn<Network>() { @Override public String getValue(Network network) { return network.getName(); } }; networksTable.addColumn(nameColumn, constants.name(), "40%"); //$NON-NLS-1$ AbstractTextColumn<Network> descriptionColumn = new AbstractTextColumn<Network>() { @Override public String getValue(Network network) { return network.getDescription(); } }; networksTable.addColumn(descriptionColumn, constants.description(), "60%"); //$NON-NLS-1$ networksTable.setWidth("100%", true); //$NON-NLS-1$ } private void initConnectionsTable() { connectionsTable.enableColumnResizing(); AbstractTextColumn<StorageServerConnections> iqnColumn = new AbstractTextColumn<StorageServerConnections>() { @Override public String getValue(StorageServerConnections conn) { return conn.getIqn(); } }; connectionsTable.addColumn(iqnColumn, constants.iqn(), "40%"); //$NON-NLS-1$ AbstractTextColumn<StorageServerConnections> addressColumn = new AbstractTextColumn<StorageServerConnections>() { @Override public String getValue(StorageServerConnections conn) { return conn.getConnection(); } }; connectionsTable.addColumn(addressColumn, constants.addressSanStorage(), "30%"); //$NON-NLS-1$ AbstractTextColumn<StorageServerConnections> portColumn = new AbstractTextColumn<StorageServerConnections>() { @Override public String getValue(StorageServerConnections conn) { return conn.getPort(); } }; connectionsTable.addColumn(portColumn, constants.portSanStorage(), "30%"); //$NON-NLS-1$ connectionsTable.setWidth("100%", true); //$NON-NLS-1$ } private void localize() { nameEditor.setLabel(constants.name()); descriptionEditor.setLabel(constants.description()); } @Override public void edit(final IscsiBondModel model) { driver.edit(model); networksTable.asEditor().edit(model.getNetworks()); connectionsTable.asEditor().edit(model.getStorageTargets()); model.getPropertyChangedEvent().addListener((ev, sender, args) -> { String propName = args.propertyName; if (propName.equals("IsValid")) { //$NON-NLS-1$ if (model.getIsValid()) { logicalNetworksPanel.markAsValid(); } else { logicalNetworksPanel.markAsInvalid(model.getInvalidityReasons()); } } }); } @Override public IscsiBondModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } }