hs.hsadmin/hsarback/src/de/hsadmin/mods/dom/Domain.java

239 lines
5.2 KiB
Java
Raw Normal View History

2010-10-05 21:42:07 +02:00
package de.hsadmin.mods.dom;
import static javax.persistence.FetchType.EAGER;
import static javax.persistence.GenerationType.SEQUENCE;
import java.util.Date;
import javax.persistence.Column;
2011-03-22 23:02:06 +01:00
import javax.persistence.Entity;
2010-10-05 21:42:07 +02:00
import javax.persistence.EntityManager;
2011-03-22 23:02:06 +01:00
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
2010-10-05 21:42:07 +02:00
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import de.hsadmin.core.model.AbstractEntity;
2011-03-22 23:02:06 +01:00
import de.hsadmin.core.model.FieldValidation;
2010-10-05 21:42:07 +02:00
import de.hsadmin.mods.user.UnixUser;
2011-03-22 23:02:06 +01:00
@Entity(name = "Domains")
2010-10-05 21:42:07 +02:00
@Table(name = "domain")
@SequenceGenerator(name = "DomainsSeqGen", sequenceName = "domain_domain_id_seq")
public class Domain extends AbstractEntity {
private static final long serialVersionUID = -7496110900868795840L;
2011-03-22 23:02:06 +01:00
@Id
@Column(name = "domain_id", columnDefinition = "integer")
@GeneratedValue(strategy = SEQUENCE, generator = "DomainsSeqGen")
2010-10-05 21:42:07 +02:00
private long id;
2011-03-22 23:02:06 +01:00
@FieldValidation("[a-z0-9\\-\\.]*")
@Column(name = "domain_name", columnDefinition = "character varying(256)", nullable = false)
2010-10-05 21:42:07 +02:00
private String name;
@JoinColumn(name = "domain_owner", columnDefinition = "integer", nullable = false)
@ManyToOne(fetch = EAGER)
private UnixUser user;
2011-03-22 23:02:06 +01:00
@FieldValidation("[a-z]*")
2010-10-05 21:42:07 +02:00
@Column(name = "domain_status", columnDefinition = "character varying(12)", nullable = false)
private String status;
@Column(name = "domain_status_changed", columnDefinition = "date", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private Date statusChanged;
@Column(name = "domain_filed", columnDefinition = "date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date filed;
@Column(name = "domain_since", columnDefinition = "date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date since;
@Column(name = "domain_until", columnDefinition = "date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date until;
2011-03-22 23:02:06 +01:00
@FieldValidation("[a-z0-9\\-\\.]*")
2010-10-05 21:42:07 +02:00
@Column(name = "domain_dns_master", columnDefinition = "character varying(64)")
private String dnsMaster;
public Domain() {
}
public Domain(String name, UnixUser user) {
this.name = name;
this.user = user;
this.statusChanged = new java.util.Date();
this.status = Status.FILED.toString();
}
public static String createQueryFromStringKey(String humanKey) {
return "name = '" + humanKey + "'";
}
@Override
public String createStringKey() {
return getName();
}
@Override
public long id() {
return id;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UnixUser getUser() {
return user;
}
public void setUser(UnixUser user) {
this.user = user;
}
public Status getStatus() {
return Status.valueFor(status);
}
public void setStatus(Status status) {
this.status = status.toString();
}
public Date getStatusChanged() {
return statusChanged;
}
public void setStatusChanged(Date statusChanged) {
this.statusChanged = statusChanged;
}
public Date getFiled() {
return filed;
}
public void setFiled(Date filed) {
this.filed = filed;
}
public Date getSince() {
return since;
}
public void setSince(Date since) {
this.since = since;
}
public Date getUntil() {
return until;
}
public void setUntil(Date until) {
this.until = until;
}
public String getDnsMaster() {
return dnsMaster;
}
public void setDnsMaster(String dnsMaster) {
this.dnsMaster = dnsMaster;
}
@Override
public boolean isNew() {
return id == 0;
}
public boolean isReadAllowedFor(UnixUser loginUser) {
return loginUser.hasHostmasterRole() || // hostmaster
user.getId() == loginUser.getId() || // dom-admin
user.getPac().getName().equals(loginUser.getName()) || // pac-admin
user.getPac().getCustomer().getName().equals(loginUser.getName()); // customer
}
public boolean isWriteAllowedFor(UnixUser loginUser) {
return isReadAllowedFor(loginUser);
}
@Override
public String getHiveName() {
if (isNew())
return null;
else
return getUser().getHiveName();
}
@Override
public UnixUser owningUser(EntityManager em) {
return user;
}
public static String restriction() {
return
// all doms of all pacs of customer
"obj.user.pac.customer.name=:loginUserName OR " +
// all doms of packet admin
"obj.user.pac.name=:loginUserName OR " +
// all domains of the user itself
"obj.user=:loginUser";
}
public static enum Status {
NONE(""),
ERROR("error"),
FILED("filed"),
SELF("self"),
REGISTERING("registering"),
REGISTERED("registered"),
TRANSFERRING("transferring"),
NACK_RECEIVED("KK-NACK"),
ACK_RECEIVED("KK-ACK"),
MANAGED("connected"),
LEAVE_SIGNALLED("KK-sig"),
LEAVING("leaving"),
GONE("gone"),
CLOSE_REQUESTED("CLO-req"),
CLOSING("closing"),
CLOSED("closed");
private Status(String aValue) {
this.aValue = aValue;
}
public String toString() {
return aValue;
}
private String aValue;
public static Status valueFor(String str) {
for (Status val : Status.values())
if (val.toString().equals(str))
return val;
return null;
}
}
}