package org.openstack.atlas.service.domain.entities; import org.hibernate.annotations.*; import org.openstack.atlas.docs.loadbalancers.api.v1.SourceAddresses; import org.openstack.atlas.service.domain.pojos.VirtualIpDozerWrapper; import javax.persistence.*; import javax.persistence.CascadeType; import javax.persistence.OrderBy; import javax.persistence.Table; import java.io.Serializable; import java.util.Calendar; import java.util.HashSet; import java.util.Set; @javax.persistence.Entity @Table(name = "loadbalancer") public class LoadBalancer extends Entity implements Serializable { private final static long serialVersionUID = 532512316L; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "host_id", nullable = true) private Host host; @OneToMany(mappedBy = "loadBalancer", fetch = FetchType.EAGER) private Set<LoadBalancerJoinVip> loadBalancerJoinVipSet = new HashSet<LoadBalancerJoinVip>(); @OneToMany(mappedBy = "loadBalancer", fetch = FetchType.EAGER) private Set<LoadBalancerJoinVip6> loadBalancerJoinVip6Set = new HashSet<LoadBalancerJoinVip6>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loadbalancer", fetch = FetchType.EAGER) @OrderBy("id") @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private Set<Node> nodes = new HashSet<Node>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loadbalancer", fetch = FetchType.EAGER) @OrderBy("id") @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private Set<AccessList> accessLists = new HashSet<AccessList>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loadbalancer", fetch = FetchType.EAGER) @OrderBy("id") @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private Set<CertificateMapping> certificateMappings = new HashSet<CertificateMapping>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loadbalancer", fetch = FetchType.EAGER) @OrderBy("id") @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private Set<LoadbalancerMeta> loadbalancerMetadata = new HashSet<LoadbalancerMeta>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loadbalancer", fetch = FetchType.EAGER) @OrderBy("ticketId") @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private Set<Ticket> tickets = new HashSet<Ticket>(); @OneToMany(cascade = CascadeType.ALL, mappedBy = "loadbalancer", fetch = FetchType.LAZY) @OrderBy("id") private Set<Usage> usage = new HashSet<Usage>(); @Column(name = "name", length = 128) private String name; @Column(name = "account_id", nullable = false, length = 32) private Integer accountId; @Column(name = "port", nullable = false) private Integer port; @Column(name = "timeout", nullable = false) private Integer timeout; @Column(name = "connection_logging", nullable = false) private Boolean connectionLogging; @Column(name = "content_caching", nullable = false) private Boolean contentCaching; @Column(name = "https_redirect", nullable = false) private Boolean httpsRedirect; @Column(name = "half_closed", nullable = false) private Boolean halfClosed; @Column(name = "is_sticky", nullable = false) private boolean isSticky; @Column(name = "algorithm", nullable = false) @Enumerated(EnumType.STRING) private LoadBalancerAlgorithm algorithm; @JoinColumn(name = "protocol", nullable = false) @Enumerated(EnumType.STRING) private LoadBalancerProtocol protocol; @JoinColumn(name = "status", nullable = false) @Enumerated(EnumType.STRING) private LoadBalancerStatus status; @JoinColumn(name = "sessionPersistence", nullable = false) @Enumerated(EnumType.STRING) private SessionPersistence sessionPersistence; @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, mappedBy = "loadbalancer") private ConnectionLimit connectionLimit; @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, mappedBy = "loadbalancer") private HealthMonitor healthMonitor; @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, mappedBy = "loadbalancer") private Suspension suspension; @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, mappedBy = "loadbalancer") private RateLimit rateLimit; @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, mappedBy = "loadbalancer") private SslTermination sslTermination; @OneToOne(mappedBy = "loadbalancer", fetch = FetchType.LAZY, optional = true) @LazyToOne(LazyToOneOption.NO_PROXY) private UserPages userPages; @Temporal(TemporalType.TIMESTAMP) private Calendar created; @Temporal(TemporalType.TIMESTAMP) private Calendar updated; @Temporal(TemporalType.TIMESTAMP) private Calendar provisioned; @Transient private VirtualIpDozerWrapper virtualIpDozerWrapper; @Transient private SourceAddresses sourceAddresses; public SourceAddresses getSourceAddresses() { return sourceAddresses; } public void setSourceAddresses(SourceAddresses sourceAddresses) { this.sourceAddresses = sourceAddresses; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Suspension getSuspension() { return suspension; } public void setSuspension(Suspension suspension) { this.suspension = suspension; } public Set<LoadBalancerJoinVip> getLoadBalancerJoinVipSet() { if (loadBalancerJoinVipSet == null) { loadBalancerJoinVipSet = new HashSet<LoadBalancerJoinVip>(); } return loadBalancerJoinVipSet; } public void setLoadBalancerJoinVipSet(Set<LoadBalancerJoinVip> loadBalancerJoinVipSet) { this.loadBalancerJoinVipSet = loadBalancerJoinVipSet; } public Set<Node> getNodes() { return nodes; } public void setNodes(Set<Node> nodes) { this.nodes = nodes; } public Set<Usage> getUsage() { return usage; } public void setUsage(Set<Usage> usage) { this.usage = usage; } public Set<AccessList> getAccessLists() { return accessLists; } public void setAccessLists(Set<AccessList> accessLists) { this.accessLists = accessLists; } public Set<CertificateMapping> getCertificateMappings() { return certificateMappings; } public void setCertificateMappings(Set<CertificateMapping> certificateMappings) { this.certificateMappings = certificateMappings; } public Set<LoadbalancerMeta> getLoadbalancerMetadata() { return loadbalancerMetadata; } public void setLoadbalancerMetadata(Set<LoadbalancerMeta> metadata) { this.loadbalancerMetadata = metadata; } public Host getHost() { return host; } public void setHost(Host host) { this.host = host; } public HealthMonitor getHealthMonitor() { return healthMonitor; } public void setHealthMonitor(HealthMonitor healthMonitor) { this.healthMonitor = healthMonitor; } public RateLimit getRateLimit() { return rateLimit; } public void setRateLimit(RateLimit rateLimit) { this.rateLimit = rateLimit; } public Boolean isConnectionLogging() { return connectionLogging; } public void setConnectionLogging(Boolean connectionLogging) { this.connectionLogging = connectionLogging; } public Boolean isContentCaching() { return contentCaching; } public void setContentCaching(Boolean contentCaching) { this.contentCaching = contentCaching; } public Boolean isHttpsRedirect() { return httpsRedirect; } public void setHttpsRedirect(Boolean httpsRedirect) { this.httpsRedirect = httpsRedirect; } public ConnectionLimit getConnectionLimit() { return connectionLimit; } public void setConnectionLimit(ConnectionLimit connectionLimit) { this.connectionLimit = connectionLimit; } public SessionPersistence getSessionPersistence() { return this.sessionPersistence; } public void setSessionPersistence(SessionPersistence sessionPersistence) { this.sessionPersistence = sessionPersistence; } public Integer getAccountId() { return accountId; } public void setAccountId(Integer accountId) { this.accountId = accountId; } public Calendar getCreated() { return created; } public void setCreated(Calendar created) { this.created = created; } public Calendar getUpdated() { return updated; } public void setUpdated(Calendar updated) { this.updated = updated; } public Calendar getProvisioned() { return provisioned; } public void setProvisioned(Calendar provisioned) { this.provisioned = provisioned; } public LoadBalancerAlgorithm getAlgorithm() { return algorithm; } public void setAlgorithm(LoadBalancerAlgorithm algorithm) { this.algorithm = algorithm; } public LoadBalancerProtocol getProtocol() { return protocol; } public void setProtocol(LoadBalancerProtocol protocol) { this.protocol = protocol; } public Boolean isHalfClosed() { return halfClosed; } public void setHalfClosed(Boolean halfClosed) { this.halfClosed = halfClosed; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public LoadBalancerStatus getStatus() { return status; } public void setStatus(LoadBalancerStatus status) { this.status = status; } public Integer getTimeout() { return timeout; } public void setTimeout(Integer timeout) { this.timeout = timeout; } private static String valueOrNull(Object obj) { return obj == null ? "null" : obj.toString(); } public void addAccessList(AccessList accessList) { accessList.setLoadbalancer(this); accessLists.add(accessList); } public void addCertificateMapping(CertificateMapping certificateMapping) { certificateMapping.setLoadbalancer(this); certificateMappings.add(certificateMapping); } public void addNode(Node node) { node.setLoadbalancer(this); nodes.add(node); } public void addMeta(LoadbalancerMeta loadbalancerMeta) { loadbalancerMeta.setLoadbalancer(this); loadbalancerMetadata.add(loadbalancerMeta); } public boolean isSticky() { return isSticky; } public void setSticky(boolean sticky) { isSticky = sticky; } public Set<Ticket> getTickets() { return tickets; } public void setTickets(Set<Ticket> tickets) { this.tickets = tickets; } public boolean isUsingSsl() { return (sslTermination != null && sslTermination.isEnabled()); } public boolean hasSsl() { return (sslTermination != null); } public boolean isSecureOnly() { return (sslTermination != null && sslTermination.isSecureTrafficOnly()); } public Set<LoadBalancerJoinVip6> getLoadBalancerJoinVip6Set() { return loadBalancerJoinVip6Set; } public void setLoadBalancerJoinVip6Set(Set<LoadBalancerJoinVip6> loadBalancerJoinVip6Set) { this.loadBalancerJoinVip6Set = loadBalancerJoinVip6Set; } public VirtualIpDozerWrapper getVirtualIpDozerWrapper() { return new VirtualIpDozerWrapper(loadBalancerJoinVipSet, loadBalancerJoinVip6Set); } public void setVirtualIpDozerWrapper(VirtualIpDozerWrapper virtualIpDozerWrapper) { this.virtualIpDozerWrapper = virtualIpDozerWrapper; this.setLoadBalancerJoinVipSet(this.virtualIpDozerWrapper.getLoadBalancerJoinVipSet()); this.setLoadBalancerJoinVip6Set(this.virtualIpDozerWrapper.getLoadBalancerJoinVip6Set()); } /** * @return the userPages */ public UserPages getUserPages() { return userPages; } /** * @param userPages the userPages to set */ public void setUserPages(UserPages userPages) { this.userPages = userPages; } public SslTermination getSslTermination() { return sslTermination; } public void setSslTermination(SslTermination sslTermination) { this.sslTermination = sslTermination; } }