package org.ovirt.engine.ui.uicommonweb.models.vms; import org.ovirt.engine.core.common.businessentities.SerialNumberPolicy; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.HasEntity; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; public class SerialNumberPolicyModel extends Model { EntityModel<Boolean> overrideSerialNumberPolicy; EntityModel<SerialNumberPolicy> serialNumberPolicy; EntityModel<String> customSerialNumber; public EntityModel<SerialNumberPolicy> getSerialNumberPolicy() { return serialNumberPolicy; } private void setSerialNumberPolicy(EntityModel<SerialNumberPolicy> serialNumberPolicy) { this.serialNumberPolicy = serialNumberPolicy; } public EntityModel<String> getCustomSerialNumber() { return customSerialNumber; } private void setCustomSerialNumber(EntityModel<String> customSerialNumber) { this.customSerialNumber = customSerialNumber; } public EntityModel<Boolean> getOverrideSerialNumberPolicy() { return overrideSerialNumberPolicy; } public void setOverrideSerialNumberPolicy(EntityModel<Boolean> overrideSerialNumberPolicy) { this.overrideSerialNumberPolicy = overrideSerialNumberPolicy; } public SerialNumberPolicyModel() { setOverrideSerialNumberPolicy(new EntityModel<Boolean>()); setSerialNumberPolicy(new EntityModel<SerialNumberPolicy>()); setCustomSerialNumber(new EntityModel<String>()); getOverrideSerialNumberPolicy().getEntityChangedEvent().addListener(this); getSerialNumberPolicy().getEntityChangedEvent().addListener(this); // hide the editors by default getSerialNumberPolicy().setIsAvailable(false); getCustomSerialNumber().setIsAvailable(false); // grey out the custom serial number by default getCustomSerialNumber().setIsChangeable(false); } public SerialNumberPolicy getSelectedSerialNumberPolicy() { if (isOverride()) { return serialNumberPolicy.getEntity(); } else { return null; } } public void setSelectedSerialNumberPolicy(SerialNumberPolicy policy) { overrideSerialNumberPolicy.setEntity(policy != null); serialNumberPolicy.setEntity(policy); } public boolean isOverride() { return Boolean.TRUE.equals(overrideSerialNumberPolicy.getEntity()); } public boolean validate() { if (isOverride() && serialNumberPolicy.getEntity() == SerialNumberPolicy.CUSTOM) { customSerialNumber.validateEntity(new IValidation[] {new NotEmptyValidation()}); return customSerialNumber.getIsValid(); } return true; } @Override public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { if (ev.matchesDefinition(HasEntity.entityChangedEventDefinition)) { if (sender == getOverrideSerialNumberPolicy()) { overrideSerialNumberPolicyChanged(); } else if (sender == getSerialNumberPolicy()) { serialNumberPolicyChanged(); } } } private void overrideSerialNumberPolicyChanged() { final boolean enabled = Boolean.TRUE.equals(getOverrideSerialNumberPolicy().getEntity()); serialNumberPolicy.setIsAvailable(enabled); customSerialNumber.setIsAvailable(enabled); } private void serialNumberPolicyChanged() { customSerialNumber.setIsChangeable(getSerialNumberPolicy().getEntity() == SerialNumberPolicy.CUSTOM); } }