package org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels; import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.ui.common.utils.ElementUtils; import org.ovirt.engine.ui.common.widget.tooltip.TooltipWidth; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.LogicalNetworkModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkCommand; import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperation; import org.ovirt.engine.ui.webadmin.ApplicationMessages; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HTMLTable.ColumnFormatter; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.Widget; public abstract class NetworkPanel extends NetworkItemPanel<LogicalNetworkModel> { private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationMessages messages = AssetProvider.getMessages(); Label titleLabel; public NetworkPanel(LogicalNetworkModel item, NetworkPanelsStyle style, boolean draggable) { super(item, style, draggable); getElement().addClassName(item.getAttachedToNic() != null ? style.networkPanelAttached() : style.networkPanelNotAttached()); if (item.isManagement()) { getElement().addClassName(style.mgmtNetwork()); } // Not managed if (!item.isManaged()) { actionButton.getUpFace().setImage(new Image(resources.butEraseNetHover())); actionButton.getDownFace().setImage(new Image(resources.butEraseNetMousedown())); } actionButton.setStyleName(style.actionButtonNetwork()); actionButton.addStyleName("np_actionButton_pfly_fix"); //$NON-NLS-1$ } @Override protected Widget getContents() { Image mgmtNetworkImage; Image defaultRouteImage; Image vmImage; Image monitorImage; Image migrationImage; Image notSyncImage; Image alertImage; Image glusterNwImage; if (!item.isManaged()) { monitorImage = null; mgmtNetworkImage = null; defaultRouteImage = null; vmImage = null; migrationImage = null; glusterNwImage = null; notSyncImage = null; alertImage = null; } else { NetworkCluster networkCluster = item.getNetwork().getCluster(); monitorImage = networkCluster.isDisplay() ? new Image(resources.networkMonitor()) : null; mgmtNetworkImage = item.isManagement() ? new Image(resources.mgmtNetwork()) : null; defaultRouteImage = networkCluster.isDefaultRoute() ? new Image(resources.defaultRouteNetwork()) : null; vmImage = item.getNetwork().isVmNetwork() ? new Image(resources.networkVm()) : null; migrationImage = networkCluster.isMigration() ? new Image(resources.migrationNetwork()) : null; glusterNwImage = networkCluster.isGluster() ? new Image(resources.glusterNetwork()) : null; notSyncImage = !item.isInSync() ? new Image(resources.networkNotSyncImage()) : null; alertImage = item.getErrorMessage() != null ? new Image(resources.alertImage()) : null; if (item.isManagement()) { mgmtNetworkImage.setStylePrimaryName(style.networkImageBorder()); } if (item.getNetwork().isVmNetwork()) { vmImage.setStylePrimaryName(style.networkImageBorder()); } if (networkCluster.isDisplay()) { monitorImage.setStylePrimaryName(style.networkImageBorder()); } if (networkCluster.isMigration()) { migrationImage.setStylePrimaryName(style.networkImageBorder()); } if (networkCluster.isDefaultRoute()) { defaultRouteImage.setStylePrimaryName(style.networkImageBorder()); } if (networkCluster.isGluster()) { glusterNwImage.setStylePrimaryName(style.networkImageBorder()); } if (!item.isInSync()) { notSyncImage.setStylePrimaryName(style.syncImageBorder()); } } actionButton.setVisible(item.getAttachedToNic() != null && (item.isManaged() || !item.isAttachedViaLabel())); Grid rowPanel = new Grid(1, 10); rowPanel.setCellSpacing(0); rowPanel.setWidth("100%"); //$NON-NLS-1$ rowPanel.setHeight("100%"); //$NON-NLS-1$ ColumnFormatter columnFormatter = rowPanel.getColumnFormatter(); columnFormatter.setWidth(0, "5px"); //$NON-NLS-1$ columnFormatter.setWidth(1, "20px"); //$NON-NLS-1$ columnFormatter.setWidth(2, "100%"); //$NON-NLS-1$ rowPanel.setWidget(0, 0, dragImage); Panel statusPanel = new HorizontalPanel(); statusPanel.setStylePrimaryName(style.networkStatusPanel()); rowPanel.setWidget(0, 1, statusPanel); if (alertImage != null) { statusPanel.add(alertImage); } ImageResource statusImage = getStatusImage(); if (statusImage != null) { statusPanel.add(new Image(statusImage)); } if (notSyncImage != null) { statusPanel.add(notSyncImage); } rowPanel.setWidget(0, 2, createTitlePanel()); rowPanel.setWidget(0, 3, mgmtNetworkImage); rowPanel.setWidget(0, 4, monitorImage); rowPanel.setWidget(0, 5, vmImage); rowPanel.setWidget(0, 6, migrationImage); rowPanel.setWidget(0, 7, glusterNwImage); rowPanel.setWidget(0, 8, defaultRouteImage); rowPanel.setWidget(0, 9, actionButton); return rowPanel; } private Panel createTitlePanel() { titleLabel = new Label(item.getName()); titleLabel.getElement().addClassName(style.titleLabel()); Panel titlePanel = new HorizontalPanel(); titlePanel.add(titleLabel); if (item.hasVlan()) { Label vlanLabel = new Label(messages.vlanNetwork(item.getVlanId())); vlanLabel.getElement().addClassName(style.vlanLabel()); titlePanel.add(vlanLabel); } return titlePanel; } @Override protected void initTooltip() { super.initTooltip(); setToolTipMaxWidth(TooltipWidth.W520); } protected abstract ImageResource getStatusImage(); @Override protected void onAction() { if (item.isManaged()) { item.edit(); } else { Map<NetworkOperation, List<NetworkCommand>> operationMap = item.getSetupModel().commandsFor(item); final NetworkCommand detach = operationMap.get(NetworkOperation.REMOVE_UNMANAGED_NETWORK).get(0); item.getSetupModel().onOperation(NetworkOperation.REMOVE_UNMANAGED_NETWORK, detach); } } @Override protected void onLoad() { super.onLoad(); while (ElementUtils.detectHorizontalOverflow(getElement())) { titleLabel.getElement().getStyle().setWidth(titleLabel.getElement().getClientWidth() - 1, Unit.PX); } } }