package org.ovirt.engine.ui.common.widget.uicommon.vm; import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationTemplates; import org.ovirt.engine.ui.common.gin.AssetProvider; import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.uicommon.model.SearchableTableModelProvider; import org.ovirt.engine.ui.common.widget.action.UiCommandButtonDefinition; import org.ovirt.engine.ui.common.widget.table.SimpleActionTable; import org.ovirt.engine.ui.common.widget.table.column.AbstractBooleanColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractCheckboxColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractEnumColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.common.widget.table.column.NicActivateStatusColumn; import org.ovirt.engine.ui.common.widget.uicommon.AbstractModelBoundTableWidget; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.vms.VmInterfaceListModel; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; 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.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class VmInterfaceListModelTable extends AbstractModelBoundTableWidget<VmNetworkInterface, VmInterfaceListModel> { interface WidgetUiBinder extends UiBinder<Widget, VmInterfaceListModelTable> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } @UiField SimplePanel interfaceTableContainer; @UiField SimplePanel interfaceInfoContainer; private final VmInterfaceInfoPanel vmInterfaceInfoPanel; private static final CommonApplicationTemplates templates = AssetProvider.getTemplates(); private static final CommonApplicationConstants constants = AssetProvider.getConstants(); public VmInterfaceListModelTable( SearchableTableModelProvider<VmNetworkInterface, VmInterfaceListModel> modelProvider, EventBus eventBus, ClientStorage clientStorage) { super(modelProvider, eventBus, clientStorage, false); // Create Interfaces table SimpleActionTable<VmNetworkInterface> table = getTable(); interfaceTableContainer.add(table); // Create Interface information tab panel vmInterfaceInfoPanel = new VmInterfaceInfoPanel(getModel()); interfaceInfoContainer.add(vmInterfaceInfoPanel); } @Override protected Widget getWrappedWidget() { return WidgetUiBinder.uiBinder.createAndBindUi(this); } @Override public void initTable() { getTable().enableColumnResizing(); NicActivateStatusColumn<VmNetworkInterface> statusColumn = new NicActivateStatusColumn<>(); statusColumn.setContextMenuTitle(constants.vnicStatusNetworkVM()); statusColumn.makeSortable(); getTable().addColumn(statusColumn, constants.empty(), "30px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> nameColumn = new AbstractTextColumn<VmNetworkInterface>() { @Override public String getValue(VmNetworkInterface object) { return object.getName(); } }; nameColumn.makeSortable(); getTable().addColumn(nameColumn, constants.nameInterface(), "150px"); //$NON-NLS-1$ AbstractCheckboxColumn<VmNetworkInterface> pluggedColumn = new AbstractCheckboxColumn<VmNetworkInterface>() { @Override public Boolean getValue(VmNetworkInterface object) { return object.isPlugged(); } @Override protected boolean canEdit(VmNetworkInterface object) { return false; } }; pluggedColumn.makeSortable(); getTable().addColumn(pluggedColumn, constants.plugged(), "60px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> networkNameColumn = new AbstractTextColumn<VmNetworkInterface>() { @Override public String getValue(VmNetworkInterface object) { return object.getNetworkName(); } }; networkNameColumn.makeSortable(); getTable().addColumn(networkNameColumn, constants.networkNameInterface(), "150px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> profileNameColumn = new AbstractTextColumn<VmNetworkInterface>() { @Override public String getValue(VmNetworkInterface object) { return object.getVnicProfileName(); } }; profileNameColumn.makeSortable(); getTable().addColumn(profileNameColumn, constants.profileNameInterface(), "150px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> qosName = new AbstractTextColumn<VmNetworkInterface>() { @Override public String getValue(VmNetworkInterface object) { return object.getQosName(); } }; qosName.makeSortable(); getTable().addColumn(qosName, constants.vmNetworkQosName(), "150px"); //$NON-NLS-1$ AbstractBooleanColumn<VmNetworkInterface> linkStateColumn = new AbstractBooleanColumn<VmNetworkInterface>(constants.linkedNetworkInterface(), constants.unlinkedNetworkInterface()) { @Override protected Boolean getRawValue(VmNetworkInterface object) { return object.isLinked(); } }; linkStateColumn.makeSortable(); getTable().addColumn(linkStateColumn, constants.linkStateNetworkInterface(), "65px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> typeColumn = new AbstractEnumColumn<VmNetworkInterface, VmInterfaceType>() { @Override protected VmInterfaceType getRawValue(VmNetworkInterface object) { return VmInterfaceType.forValue(object.getType()); } }; typeColumn.makeSortable(); getTable().addColumn(typeColumn, constants.typeInterface(), "100px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> macColumn = new AbstractTextColumn<VmNetworkInterface>() { @Override public String getValue(VmNetworkInterface object) { return object.getMacAddress(); } }; macColumn.makeSortable(); getTable().addColumn(macColumn, constants.macInterface(), "150px"); //$NON-NLS-1$ AbstractTextColumn<VmNetworkInterface> speedColumn = new AbstractTextColumn<VmNetworkInterface>() { @Override public String getValue(VmNetworkInterface object) { if (object.getSpeed() != null) { return object.getSpeed().toString(); } else { return null; } } }; speedColumn.makeSortable(); getTable().addColumn(speedColumn, templates.sub(constants.speedInterface(), constants.mbps()).asString(), "150px"); //$NON-NLS-1$ getTable().addActionButton(new UiCommandButtonDefinition<VmNetworkInterface>(getEventBus(), constants.newInterface()) { @Override protected UICommand resolveCommand() { return getModel().getNewCommand(); } }); getTable().addActionButton(new UiCommandButtonDefinition<VmNetworkInterface>(getEventBus(), constants.editInterface()) { @Override protected UICommand resolveCommand() { return getModel().getEditCommand(); } }); getTable().addActionButton(new UiCommandButtonDefinition<VmNetworkInterface>(getEventBus(), constants.removeInterface()) { @Override protected UICommand resolveCommand() { return getModel().getRemoveCommand(); } }); // Add selection listener getModel().getSelectedItemChangedEvent().addListener((ev, sender, args) -> updateInfoPanel()); getModel().getItemsChangedEvent().addListener((ev, sender, args) -> updateInfoPanel()); } private void updateInfoPanel() { final VmNetworkInterface vmNetworkInterface = getModel().getSelectedItem(); if (vmNetworkInterface != null && !getTable().getSelectionModel().isSelected(vmNetworkInterface)) { // first let list of items get updated, only then select item Scheduler.get().scheduleDeferred(() -> getTable().getSelectionModel().setSelected(vmNetworkInterface, true)); } vmInterfaceInfoPanel.updatePanel(vmNetworkInterface); } }