package org.ovirt.engine.ui.webadmin.widget.host;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface.NetworkImplementationDetails;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.ui.common.widget.label.LabelWithTextTruncation;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceLineModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostVLan;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import org.ovirt.engine.ui.webadmin.widget.renderer.HostVLanNameRenderer;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.BorderStyle;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Grid;
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.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class VLanPanel extends VerticalPanel {
public static final String CHECK_BOX_COLUMN_WIDTH = "200px"; //$NON-NLS-1$
public static final String NETWORK_NAME_COLUMN_WIDTH = "200px"; //$NON-NLS-1$
public static final String IPV4_ADDRESS_COLUMN_WIDTH = "120px"; //$NON-NLS-1$
public static final String IPV6_ADDRESS_COLUMN_WIDTH = "200px"; //$NON-NLS-1$
public static final String OUT_OF_SYNC_WIDTH = "75px"; //$NON-NLS-1$
public void addVLans(HostInterfaceLineModel lineModel) {
boolean hasVlan = lineModel.getVlanSize() != 0;
for (HostVLan hostVLan : lineModel.getVLans()) {
add(new VLanElementPanel(hostVLan));
}
if (!hasVlan
|| !StringHelper.isNullOrEmpty(lineModel.getNetworkName())
|| !StringHelper.isNullOrEmpty(lineModel.getIpv4Address())
|| !StringHelper.isNullOrEmpty(lineModel.getIpv6Address())) {
add(new VLanElementPanel(lineModel));
}
}
}
class VLanElementPanel extends HostInterfaceHorizontalPanel {
private static final ApplicationResources resources = AssetProvider.getResources();
public VLanElementPanel(HostVLan hostVLan) {
super();
add(createRow(hostVLan));
}
public VLanElementPanel(HostInterfaceLineModel lineModel) {
super();
add(createBlankRow(lineModel));
}
Grid createRow(final HostVLan hostVLan) {
// Icon and name
HorizontalPanel checkboxPanel = new HorizontalPanel();
checkboxPanel.setWidth("100%"); //$NON-NLS-1$
checkboxPanel.add(new Image(resources.splitRotateImage()));
checkboxPanel.add(new Label(new HostVLanNameRenderer().render(hostVLan)));
Grid row = createBaseVlanRow(checkboxPanel,
hostVLan.getInterface().getIsManagement(),
hostVLan.getNetworkName(),
hostVLan.getInterface().getNetworkImplementationDetails(),
hostVLan.getIpv4Address(),
hostVLan.getIpv6Address());
return row;
}
Grid createBlankRow(final HostInterfaceLineModel lineModel) {
VdsNetworkInterface iface =
lineModel.getIsBonded() ? lineModel.getInterface() : lineModel.getInterfaces().get(0).getInterface();
return createBaseVlanRow(new Label(),
lineModel.getIsManagement(),
lineModel.getNetworkName(),
iface.getNetworkImplementationDetails(),
lineModel.getIpv4Address(),
lineModel.getIpv6Address());
}
private Grid createBaseVlanRow(Widget checkBoxWidget,
boolean networkManagementFlag,
String networkName,
final NetworkImplementationDetails networkImplementationDetails,
String ipv4Address,
String ipv6Address) {
Grid row = new Grid(1, 5);
row.getColumnFormatter().setWidth(0, VLanPanel.CHECK_BOX_COLUMN_WIDTH);
row.getColumnFormatter().setWidth(1, VLanPanel.OUT_OF_SYNC_WIDTH);
row.getColumnFormatter().setWidth(2, VLanPanel.NETWORK_NAME_COLUMN_WIDTH);
row.getColumnFormatter().setWidth(3, VLanPanel.IPV4_ADDRESS_COLUMN_WIDTH);
row.getColumnFormatter().setWidth(4, VLanPanel.IPV6_ADDRESS_COLUMN_WIDTH);
row.setWidth("100%"); //$NON-NLS-1$
row.setHeight("100%"); //$NON-NLS-1$
row.setWidget(0, 0, checkBoxWidget);
Label networkNameLabel = new Label(networkName);
if (networkManagementFlag) {
networkNameLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD);
networkNameLabel.setText("* " + networkName); //$NON-NLS-1$
}
row.setWidget(0, 1, createSyncPanel(networkImplementationDetails));
row.setWidget(0, 2, networkNameLabel);
addIpAddressWidget(row, ipv4Address, 3, VLanPanel.IPV4_ADDRESS_COLUMN_WIDTH);
addIpAddressWidget(row, ipv6Address, 4, VLanPanel.IPV6_ADDRESS_COLUMN_WIDTH);
Style gridStyle = row.getElement().getStyle();
gridStyle.setBorderColor("white"); //$NON-NLS-1$
gridStyle.setBorderWidth(1, Unit.PX);
gridStyle.setBorderStyle(BorderStyle.SOLID);
return row;
}
private void addIpAddressWidget(Grid row, String address, int columnNumber, String width) {
final LabelWithTextTruncation ipAddressWidget = new LabelWithTextTruncation(address);
ipAddressWidget.setWidth(width);
row.setWidget(0, columnNumber, ipAddressWidget);
}
private HorizontalPanel createSyncPanel(final NetworkImplementationDetails networkImplementationDetails) {
HorizontalPanel output = new HorizontalPanel();
boolean managed = false;
boolean sync = false;
if (networkImplementationDetails != null) {
managed = networkImplementationDetails.isManaged();
sync = networkImplementationDetails.isInSync();
}
if (managed && !sync) {
output.add(new Image(resources.networkNotSyncImage()));
}
return output;
}
}