package org.ovirt.engine.core.bll.network.cluster;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.ClusterCommandBase;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.common.action.NetworkClusterParameters;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
import org.ovirt.engine.core.dao.network.NetworkDao;
public abstract class NetworkClusterCommandBase<T extends NetworkClusterParameters> extends ClusterCommandBase<T> {
private Network persistedNetwork;
@Inject
private NetworkDao networkDao;
protected NetworkClusterCommandBase(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
protected NetworkCluster getNetworkCluster() {
return getParameters().getNetworkCluster();
}
protected Network getPersistedNetwork() {
if (persistedNetwork == null) {
persistedNetwork = networkDao.get(getNetworkCluster().getNetworkId());
}
return persistedNetwork;
}
public String getNetworkName() {
return getPersistedNetwork().getName();
}
private boolean validateExternalNetwork(NetworkClusterValidatorBase validator) {
return validate(validator.externalNetworkNotDisplay(getNetworkName()))
&& validate(validator.externalNetworkNotRequired(getNetworkName()));
}
protected boolean validateAttachment(NetworkClusterValidatorBase validator) {
final Network network = getPersistedNetwork();
boolean result = validate(validator.managementNetworkRequired(network));
result = result && validate(validator.managementNetworkNotExternal(network));
result = result && validate(validator.defaultRouteNetworkCannotBeExternal(network));
result = result && validate(validator.managementNetworkChange());
result = result && validate(validator.roleNetworkHasIp());
result = result && (!getPersistedNetwork().isExternal() || validateExternalNetwork(validator));
return result;
}
}