package org.ovirt.engine.ui.uicommonweb.models.macpool;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.MacPool;
import org.ovirt.engine.core.common.businessentities.MacRange;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
public class MacPoolModel extends EntityModel<MacPool> {
private final EntityModel<Boolean> allowDuplicates = new EntityModel<>();
private final ListModel<MacRangeModel> macRanges = new ListModel<>();
public EntityModel<Boolean> getAllowDuplicates() {
return allowDuplicates;
}
public ListModel<MacRangeModel> getMacRanges() {
return macRanges;
}
public MacPoolModel() {
getEntityChangedEvent().addListener((ev, sender, args) -> init());
getPropertyChangedEvent().addListener((ev, sender, args) -> {
if ("IsChangable".equals(args.propertyName)) { //$NON-NLS-1$
boolean value = getIsChangable();
allowDuplicates.setIsChangeable(value);
macRanges.setIsChangeable(value);
}
});
}
protected void init() {
if (getEntity() == null) {
return;
}
allowDuplicates.setEntity(getEntity().isAllowDuplicateMacAddresses());
List<MacRangeModel> rangeModels = new ArrayList<>();
for (MacRange range : getEntity().getRanges()) {
rangeModels.add(new MacRangeModel(range));
}
Collections.sort(rangeModels,
Comparator.comparing((MacRangeModel m) -> m.getLeftBound().getEntity())
.thenComparing(m -> m.getRightBound().getEntity()));
macRanges.setItems(rangeModels);
}
public MacPool flush() {
getEntity().setAllowDuplicateMacAddresses(allowDuplicates.getEntity());
getEntity().getRanges().clear();
for (MacRangeModel rangeModel : macRanges.getItems()) {
getEntity().getRanges().add(rangeModel.flush());
}
return getEntity();
}
public boolean validate() {
boolean valid = true;
for (MacRangeModel range : macRanges.getItems()) {
range.validate();
valid &= range.getIsValid();
}
setIsValid(valid);
return valid;
}
}