package org.zstack.network.service.virtualrouter;
import org.zstack.core.db.Q;
import org.zstack.core.db.SQLBatch;
import org.zstack.utils.DebugUtils;
/**
* Created by frank on 7/31/2015.
*/
public class DefaultVirtualRouterOfferingSelector {
private String offeringUuid;
private String zoneUuid;
private Boolean preferToBeDefault;
private boolean created;
public boolean isCreated() {
return created;
}
public void setCreated(boolean created) {
this.created = created;
}
public String getOfferingUuid() {
return offeringUuid;
}
public void setOfferingUuid(String offeringUuid) {
this.offeringUuid = offeringUuid;
}
public String getZoneUuid() {
return zoneUuid;
}
public void setZoneUuid(String zoneUuid) {
this.zoneUuid = zoneUuid;
}
public Boolean isPreferToBeDefault() {
return preferToBeDefault;
}
public void setPreferToBeDefault(Boolean preferToBeDefault) {
this.preferToBeDefault = preferToBeDefault;
}
public void selectDefaultOffering() {
DebugUtils.Assert(zoneUuid != null, "zoneUuid cannot be null");
DebugUtils.Assert(offeringUuid != null, "offeringUuid cannot be null");
new SQLBatch() {
@Override
protected void scripts() {
VirtualRouterOfferingVO offering = findByUuid(offeringUuid, VirtualRouterOfferingVO.class);
if (!Q.New(VirtualRouterOfferingVO.class).eq(VirtualRouterOfferingVO_.zoneUuid, zoneUuid)
.notEq(VirtualRouterOfferingVO_.uuid, offeringUuid).isExists()
&& created) {
// the first offering is always the default one
offering.setDefault(true);
merge(offering);
return;
}
if (preferToBeDefault != null && preferToBeDefault) {
sql(VirtualRouterOfferingVO.class).set(VirtualRouterOfferingVO_.isDefault, false)
.eq(VirtualRouterOfferingVO_.zoneUuid, zoneUuid).update();
offering.setDefault(true);
merge(offering);
} else if (preferToBeDefault != null) {
offering.setDefault(false);
merge(offering);
}
}
}.execute();
}
}