package org.ovirt.engine.ui.webadmin.section.main.view.tab; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.businessentities.network.NetworkView; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.core.searchbackend.NetworkConditionFieldAutoCompleter; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; import org.ovirt.engine.ui.common.widget.table.column.AbstractLinkColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractSafeHtmlColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper; import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkListModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabNetworkPresenter; import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView; import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import org.ovirt.engine.ui.webadmin.widget.table.column.CommentColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.MultiImageColumnHelper; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.Inject; public class MainTabNetworkView extends AbstractMainTabWithDetailsTableView<NetworkView, NetworkListModel> implements MainTabNetworkPresenter.ViewDef { interface ViewIdHandler extends ElementIdHandler<MainTabNetworkView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } private final SafeHtml vmImage; private final SafeHtml emptyImage; private AbstractLinkColumn<NetworkView> providerColumn; private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public MainTabNetworkView(MainModelProvider<NetworkView, NetworkListModel> modelProvider) { super(modelProvider); ViewIdHandler.idHandler.generateAndSetIds(this); vmImage = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.networkVm()).getHTML()); emptyImage = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.networkEmpty()).getHTML()); initTable(); initWidget(getTable()); } void initTable() { getTable().enableColumnResizing(); AbstractTextColumn<NetworkView> nameColumn = new AbstractTextColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getName(); } }; nameColumn.makeSortable(NetworkConditionFieldAutoCompleter.NAME); getTable().addColumn(nameColumn, constants.nameNetwork(), "200px"); //$NON-NLS-1$ CommentColumn<NetworkView> commentColumn = new CommentColumn<>(); getTable().addColumnWithHtmlHeader(commentColumn, SafeHtmlUtils.fromSafeConstant(constants.commentLabel()), "75px"); //$NON-NLS-1$ boolean virtMode = ApplicationModeHelper.isModeSupported(ApplicationMode.VirtOnly); AbstractTextColumn<NetworkView> dcColumn = new AbstractTextColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getDataCenterName(); } }; dcColumn.makeSortable(NetworkConditionFieldAutoCompleter.DATA_CENTER); getTable().ensureColumnVisible(dcColumn, constants.dcNetwork(), virtMode, "200px"); //$NON-NLS-1$ AbstractTextColumn<NetworkView> descriptionColumn = new AbstractTextColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getDescription(); } }; descriptionColumn.makeSortable(NetworkConditionFieldAutoCompleter.DESCRIPTION); getTable().addColumn(descriptionColumn, constants.descriptionNetwork(), "300px"); //$NON-NLS-1$ /* Here are only listed those roles, * which applies for given network in all clusters. Meaning, management network role need not to be set for * given network on all clusters, and because of that it's missing here. */ AbstractSafeHtmlColumn<NetworkView> roleColumn = new AbstractSafeHtmlColumn<NetworkView>() { @Override public SafeHtml getValue(NetworkView networkView) { List<SafeHtml> images = new LinkedList<>(); if (networkView.isVmNetwork()) { images.add(vmImage); } else { images.add(emptyImage); } return MultiImageColumnHelper.getValue(images); } @Override public SafeHtml getTooltip(NetworkView networkView) { Map<SafeHtml, String> imagesToText = new LinkedHashMap<>(); if (networkView.isVmNetwork()) { imagesToText.put(vmImage, constants.vmItemInfo()); } return MultiImageColumnHelper.getTooltip(imagesToText); } }; getTable().addColumn(roleColumn, constants.roleNetwork(), "60px"); //$NON-NLS-1$ AbstractTextColumn<NetworkView> vlanColumn = new AbstractTextColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getVlanId() == null ? "-" : object.getVlanId().toString(); //$NON-NLS-1$ } }; vlanColumn.makeSortable(NetworkConditionFieldAutoCompleter.VLAN_ID); getTable().ensureColumnVisible(vlanColumn, constants.vlanNetwork(), virtMode, "60px"); //$NON-NLS-1$ AbstractTextColumn<NetworkView> qosColumn = new AbstractTextColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getQosName() == null ? "-" : object.getQosName().toString();//$NON-NLS-1$ } }; qosColumn.makeSortable(NetworkConditionFieldAutoCompleter.QOS); getTable().ensureColumnVisible(qosColumn, constants.qosName(), virtMode, "60px");//$NON-NLS-1$ AbstractTextColumn<NetworkView> labelColumn = new AbstractTextColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getLabel() == null ? "-" : object.getLabel(); //$NON-NLS-1$ } }; labelColumn.makeSortable(NetworkConditionFieldAutoCompleter.LABEL); getTable().addColumn(labelColumn, constants.networkLabelNetworksTab(), "200px"); //$NON-NLS-1$ providerColumn = new AbstractLinkColumn<NetworkView>() { @Override public String getValue(NetworkView object) { return object.getProvidedBy() == null ? "" : object.getProviderName(); //$NON-NLS-1$ } }; providerColumn.makeSortable(NetworkConditionFieldAutoCompleter.PROVIDER_NAME); getTable().ensureColumnVisible(providerColumn, constants.providerNetwork(), virtMode, "200px"); //$NON-NLS-1$ getTable().addActionButton(new WebAdminButtonDefinition<NetworkView>(constants.newNetwork()) { @Override protected UICommand resolveCommand() { return getMainModel().getNewCommand(); } }); getTable().addActionButton(new WebAdminButtonDefinition<NetworkView>(constants.importNetwork()) { @Override protected UICommand resolveCommand() { return getMainModel().getImportCommand(); } }); getTable().addActionButton(new WebAdminButtonDefinition<NetworkView>(constants.editNetwork()) { @Override protected UICommand resolveCommand() { return getMainModel().getEditCommand(); } }); getTable().addActionButton(new WebAdminButtonDefinition<NetworkView>(constants.removeNetwork()) { @Override protected UICommand resolveCommand() { return getMainModel().getRemoveCommand(); } }); } @Override public void setProviderClickHandler(final FieldUpdater<NetworkView, String> fieldUpdater) { providerColumn.setFieldUpdater((index, object, value) -> { getTable().getSelectionModel().clear(); // this to avoid problems with a null active details model fieldUpdater.update(index, object, value); }); } }