package models; import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import org.apache.commons.lang3.StringUtils; import play.Logger; import play.db.ebean.Model; @Entity public class Domain extends Model { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id; public Date created = new Date(); public Date updated = new Date(); public String name; public String soaEmail; public Integer soaRefresh=43200; public Integer soaRetry=7200; public Integer soaExpire=1209600; public Integer soaTtl=86400; public Integer soaDefault=86400; public String ip; public String nsAction; @Column(columnDefinition = "TEXT") public String nameservers = ""; public String systemNs = ""; public Boolean wwwInclude; public Boolean forceUpdate = false; public Boolean domainsafe; @OneToMany(mappedBy = "domain") public List dnsEntries; @OneToMany(mappedBy = "domain") public List resourceRecords; public static Finder Find = new Finder(Long.class, Domain.class); public Set findNeedsToChanged() { Set entries = new HashSet(); for(DnsEntry entry : DnsEntry.Find.where().isNotNull("updatedIp").isNull("updated").eq("domain", this).findSet()) { entries.add(entry); } for(DnsEntry entry : DnsEntry.Find.where().isNotNull("updatedIp6").isNull("updated").eq("domain", this).findSet()) { entries.add(entry); } Logger.info("found " + entries.size() + " Entries to update!"); return entries; } public Set findValidEntries() { Set entries = new HashSet(); for(DnsEntry entry : DnsEntry.Find.where().isNotNull("updatedIp").eq("domain", this).findSet()) { entries.add(entry); } for(DnsEntry entry : DnsEntry.Find.where().isNotNull("updatedIp6").eq("domain", this).findSet()) { entries.add(entry); } Logger.info("found " + entries.size() + " valid Entries!"); return entries; } public List getResourceRecords() { return ResourceRecord.Find.where().eq("domain", this).order("name DESC").order("value DESC").order("pref ASC").findList(); } public void setNameservers(String... nameservers) { StringBuilder sb = new StringBuilder(); for(String nameserver : nameservers) { sb.append(nameserver).append("\n"); } this.nameservers = sb.toString(); } public String[] getNameservers() { return nameservers != null ? StringUtils.split(this.nameservers, "\n") : new String[]{}; } public String getHostmaster() { return soaEmail; } public String toString() { return name; } public boolean checkName() { return name != null && name.contains("."); } public static boolean exists(Domain domain) { return domain != null && domain.name != null && Find.where().eq("name", domain.name).findRowCount() > 0; } public static Map optionsFor(Account account) { LinkedHashMap domains = new LinkedHashMap(); for (Domain d : Find.all()) { domains.put(d.id.toString(), d.name); } return domains; } }