package com.anjlab.ping.entities;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.datanucleus.jpa.annotations.Extension;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
import com.anjlab.ping.services.Utils;
@Entity
public class Account implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3714340195981301403L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Transient
private Ref ref;
@Column(nullable=false)
private String email;
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private String timeZoneCity;
// Since 13.05.2010
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private Date lastVisitDate;
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private Date creationDate;
// Since 26.02.2012
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private String quotaLimits;
public Account() {
}
public int getMaxNumberOfJobs(String cronString) {
Map<String, String> limits = parseQuotaLimits();
if (!limits.containsKey(cronString)) {
return 0;
}
return Integer.parseInt(limits.get(cronString));
}
public void setMaxNumberOfJobs(String cronString, int value) {
setQuotaLimit(cronString, String.valueOf(value));
}
private Map<String, String> parseQuotaLimits() {
Map<String, String> limits = new HashMap<String, String>();
if (quotaLimits != null) {
String[] pairs = quotaLimits.split(";");
for (String pair : pairs) {
String[] keyValue = pair.split("=");
if (keyValue.length == 2) {
limits.put(keyValue[0], keyValue[1]);
}
}
}
return limits;
}
private void setQuotaLimit(String quota, String limit) {
Map<String, String> limits = parseQuotaLimits();
limits.put(quota, limit);
StringBuilder builder = new StringBuilder();
for (String key : limits.keySet()) {
builder.append(key).append("=").append(limits.get(key)).append(";");
}
quotaLimits = builder.toString();
}
public String getEmail() {
return email == null ? null : email.toLowerCase();
}
public void setEmail(String email) {
this.email = email == null ? null : email.toLowerCase();
}
public Long getId() {
return id;
}
public void setRef(Ref ref) {
this.ref = ref;
}
public Ref getRef() {
return ref;
}
public String getRefAccessType() {
return ref.getAccessTypeFriendly();
}
public void setTimeZoneCity(String timeZoneCity) {
this.timeZoneCity = timeZoneCity;
}
public String getTimeZoneCity() {
return timeZoneCity;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getLastVisitDate() {
return lastVisitDate;
}
public void setLastVisitDate(Date lastVisitDate) {
this.lastVisitDate = lastVisitDate;
}
public boolean isSystem() {
return "system".equals(email);
}
public void setDefaultQuotas() {
setMaxNumberOfJobs(Utils.EVERY_1_HOURS, 25);
setMaxNumberOfJobs(Utils.EVERY_DAY_00_00, 10);
}
public boolean hasAnyQuotaLimitsApplied() {
return !Utils.isNullOrEmpty(quotaLimits);
}
}