package org.ovirt.engine.ui.uicommonweb.models.vms.register;
import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;
import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
public class VnicProfileMappingItem extends EntityModel<VnicProfileMappingEntity> {
private final ListModel<VnicProfileView> targetVnicProfile;
public VnicProfileMappingItem(VnicProfileMappingEntity entity, List<VnicProfileView> targetVnicProfiles) {
setEntity(new VnicProfileMappingEntity(entity));
this.targetVnicProfile = new ListModel<>();
this.targetVnicProfile.setItems(targetVnicProfiles);
}
@Override
public void initialize() {
super.initialize();
this.targetVnicProfile.getSelectedItemChangedEvent().addListener((ev, sender, args) -> getEntity().setVnicProfileId(getTargetVnicProfileId()));
selectInitialTargetVnicProfile();
}
private Guid getTargetVnicProfileId() {
final VnicProfileView selectedVnicProfile = targetVnicProfile.getSelectedItem();
if (selectedVnicProfile == null || selectedVnicProfile == VnicProfileView.EMPTY) {
return null;
} else {
return selectedVnicProfile.getId();
}
}
private void selectInitialTargetVnicProfile() {
final Predicate<VnicProfileView> predicate;
if (getEntity().isChanged()) {
predicate = vnicProfile -> Objects.equals(getEntity().getVnicProfileId(), vnicProfile.getId());
} else {
predicate = vnicProfile ->
Objects.equals(getEntity().getExternalNetworkName(), vnicProfile.getNetworkName())
&& Objects.equals(getEntity().getExternalNetworkName(), vnicProfile.getName());
}
selectTargetVnicProfileByPredicate(predicate);
}
private void selectTargetVnicProfileByPredicate(Predicate<VnicProfileView> predicate) {
final VnicProfileView vnicProfile =
Linq.firstOrDefault(targetVnicProfile.getItems(), predicate, VnicProfileView.EMPTY);
targetVnicProfile.setSelectedItem(vnicProfile);
}
public ListModel<VnicProfileView> getTargetVnicProfile() {
return targetVnicProfile;
}
}