package org.zstack.appliancevm;
import org.zstack.header.network.l3.L3NetworkEO;
import org.zstack.header.vm.VmInstanceEO;
import org.zstack.header.vm.VmNicVO;
import org.zstack.header.vo.ForeignKey;
import org.zstack.header.vo.ForeignKey.ReferenceOption;
import org.zstack.header.vo.Index;
import org.zstack.utils.CollectionUtils;
import org.zstack.utils.function.Function;
import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Collection;
/**
*/
@Entity
@Table
public class ApplianceVmFirewallRuleVO {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column
private long id;
@Column
@ForeignKey(parentEntityClass = VmInstanceEO.class, onDeleteAction = ReferenceOption.CASCADE)
private String applianceVmUuid;
@Column
@Index
@Enumerated(EnumType.STRING)
private ApplianceVmFirewallProtocol protocol;
@Column
@Index
private int startPort;
@Column
@Index
private int endPort;
@Column
@Index
private String allowCidr;
@Column
@Index
private String sourceIp;
@Column
@Index
private String destIp;
@Column
@ForeignKey(parentEntityClass = L3NetworkEO.class, onDeleteAction = ReferenceOption.CASCADE)
private String l3NetworkUuid;
@Column
@Index
private String identity;
@Column
private Timestamp createDate;
@Column
private Timestamp lastOpDate;
@PreUpdate
private void preUpdate() {
lastOpDate = null;
}
public void makeIdentity() {
identity = String.format("%s-%s-%s-%s-%s-%s-%s-%s",
applianceVmUuid, l3NetworkUuid, startPort, endPort, protocol, allowCidr, sourceIp, destIp);
}
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getL3NetworkUuid() {
return l3NetworkUuid;
}
public void setL3NetworkUuid(String l3NetworkUuid) {
this.l3NetworkUuid = l3NetworkUuid;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getApplianceVmUuid() {
return applianceVmUuid;
}
public void setApplianceVmUuid(String applianceVmUuid) {
this.applianceVmUuid = applianceVmUuid;
}
public ApplianceVmFirewallProtocol getProtocol() {
return protocol;
}
public void setProtocol(ApplianceVmFirewallProtocol protocol) {
this.protocol = protocol;
}
public int getStartPort() {
return startPort;
}
public void setStartPort(int startPort) {
if (endPort == 0) {
endPort = startPort;
}
this.startPort = startPort;
}
public String getSourceIp() {
return sourceIp;
}
public void setSourceIp(String sourceIp) {
this.sourceIp = sourceIp;
}
public String getDestIp() {
return destIp;
}
public void setDestIp(String destIp) {
this.destIp = destIp;
}
public int getEndPort() {
return endPort;
}
public void setEndPort(int endPort) {
this.endPort = endPort;
}
public String getAllowCidr() {
return allowCidr;
}
public void setAllowCidr(String allowCidr) {
this.allowCidr = allowCidr;
}
public Timestamp getCreateDate() {
return createDate;
}
public void setCreateDate(Timestamp createDate) {
this.createDate = createDate;
}
public Timestamp getLastOpDate() {
return lastOpDate;
}
public void setLastOpDate(Timestamp lastOpDate) {
this.lastOpDate = lastOpDate;
}
public ApplianceVmFirewallRuleTO toRuleTO(Collection<VmNicVO> nics) {
ApplianceVmFirewallRuleTO to = new ApplianceVmFirewallRuleTO();
VmNicVO nic = CollectionUtils.find(nics, new Function<VmNicVO, VmNicVO>() {
@Override
public VmNicVO call(VmNicVO arg) {
if (arg.getL3NetworkUuid().equals(l3NetworkUuid)) {
return arg;
}
return null;
}
});
to.setDestIp(destIp);
to.setSourceIp(sourceIp);
to.setAllowCidr(allowCidr);
to.setEndPort(endPort);
to.setStartPort(startPort);
to.setProtocol(protocol.toString());
to.setNicMac(nic.getMac());
return to;
}
}