package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.ArrayList; import java.util.Map; import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions; import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; import org.ovirt.engine.core.compat.RefObject; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.models.SortedListModel; import org.ovirt.engine.ui.uicommonweb.validation.BondNameValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.KeyValueFormatValidation; import org.ovirt.engine.ui.uicommonweb.validation.LengthValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; @SuppressWarnings("unused") public class SetupNetworksBondModel extends Model { public static final String CUSTOM_BONDING_MODE = "custom"; //$NON-NLS-1$ private SortedListModel<String> privateBond; public SortedListModel<String> getBond() { return privateBond; } protected void setBond(SortedListModel<String> value) { privateBond = value; } private ListModel<Map.Entry<String, EntityModel<String>>> privateBondingOptions; public ListModel<Map.Entry<String, EntityModel<String>>> getBondingOptions() { return privateBondingOptions; } private void setBondingOptions(ListModel<Map.Entry<String, EntityModel<String>>> value) { privateBondingOptions = value; } private EntityModel<String> customBondEditor; public EntityModel<String> getCustomBondEditor() { return customBondEditor; } private void setCustomBondEditor(EntityModel<String> customBondEditor) { this.customBondEditor = customBondEditor; } public SetupNetworksBondModel() { this(false); } public SetupNetworksBondModel(boolean doesBondHaveVmNetworkAttached) { setBond(new SortedListModel<>(new LexoNumericComparator())); setBondingOptions(new ListModel<Map.Entry<String, EntityModel<String>>>()); Map.Entry<String, EntityModel<String>> defaultItem = null; RefObject<Map.Entry<String, EntityModel<String>>> tempRef_defaultItem = new RefObject<>(defaultItem); ArrayList<Map.Entry<String, EntityModel<String>>> list = AsyncDataProvider.getInstance().getBondingOptionListDependingOnNetwork(tempRef_defaultItem, doesBondHaveVmNetworkAttached); defaultItem = tempRef_defaultItem.argvalue; getBondingOptions().setItems(list); getBondingOptions().setSelectedItem(defaultItem); setCustomBondEditor(new EntityModel<String>()); getCustomBondEditor().getEntityChangedEvent().addListener((ev, sender, args) -> { final String customBondValue = ((EntityModel<String>) sender).getEntity(); Map.Entry<String, EntityModel<String>> selectedItem = getBondingOptions().getSelectedItem(); if (selectedItem.getKey().equals(CUSTOM_BONDING_MODE)) { selectedItem.getValue().setEntity(customBondValue); } }); onBondingOptionsSelectionChange(); getBondingOptions().getSelectedItemChangedEvent().addListener((ev, sender, args) -> onBondingOptionsSelectionChange()); } public boolean validate() { getBond().validateSelectedItem(new IValidation[] { new NotEmptyValidation(), new LengthValidation(BusinessEntitiesDefinitions.HOST_NIC_NAME_LENGTH), new BondNameValidation() }); getCustomBondEditor().setIsValid(true); if (getBondingOptions().getSelectedItem().getKey().equals(CUSTOM_BONDING_MODE)) { getCustomBondEditor().validateEntity(new IValidation[] { new KeyValueFormatValidation() }); } return getBond().getIsValid() && getCustomBondEditor().getIsValid(); } private void onBondingOptionsSelectionChange() { Map.Entry<String, EntityModel<String>> pair = getBondingOptions().getSelectedItem(); if (CUSTOM_BONDING_MODE.equals(pair.getKey())) { //$NON-NLS-1$ customBondEditor.setIsChangeable(true); String entity = pair.getValue().getEntity(); customBondEditor.setEntity(entity == null ? "" : entity); //$NON-NLS-1$ } else { customBondEditor.setIsChangeable(false); } } }