package no.niths.domain.development; import java.util.ArrayList; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import no.niths.common.constants.DomainConstantNames; import no.niths.common.constants.ValidationConstants; import no.niths.domain.Domain; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import org.hibernate.annotations.Parameter; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.validator.constraints.Email; import org.jasypt.hibernate4.type.EncryptedStringType; /** * Domain class for Developer * * <p> * Developer has these variables: * email = example developer@nith.no (can not be null), * name = example Ola Normann (can not be null), * enabled = example true, * developerToken = example, * developerKey = example * </p> * <p> * And relations too: * Application * </p> * <p> * For access to the API, the developer must be enabled * and have key+token provided in the request header * together with the application key+token * </p> */ @TypeDef(name = "encryptedString", typeClass = EncryptedStringType.class, parameters = { @Parameter(name = "encryptorRegisteredName", value = "strongHibernateStringEncryptor") }) @XmlRootElement @Entity @Table(name = DomainConstantNames.DEVELOPERS) @XmlAccessorType(XmlAccessType.FIELD) @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class Developer implements Domain { @Transient private static final long serialVersionUID = -85961208307674962L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique = true) @Email @NotNull private String email; @Column(unique = true) @NotNull @Pattern( regexp = ValidationConstants.REGULAR, message = "Invalid name (should be 2 - 50 alphanumeric characters") private String name; @JsonIgnore @XmlTransient @Column private Boolean enabled; @JsonIgnore @XmlTransient @Column(name = "developer_token") @Type(type = "encryptedString") private String developerToken; @JsonIgnore @XmlTransient @Column(name = "developer_key") private String developerKey; @OneToMany(fetch = FetchType.LAZY, targetEntity = Application.class) @JoinTable( name = "developers_applications", joinColumns = @JoinColumn(name = "developers_id"), inverseJoinColumns = @JoinColumn(name = "applications_id")) @Cascade(CascadeType.ALL) private List<Application> apps = new ArrayList<Application>(); public Developer() { this.id = null; this.name = null; this.email = null; this.enabled = null; this.developerToken = null; this.apps = null; } public Developer(String name) { this.name = name; } public Developer(String name, String email) { this.name = name; this.email = email; } public List<Application> getApps() { return apps; } public void setApps(List<Application> apps) { this.apps = apps; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public String toString() { return String.format("[%s][%s][%s]", id, email, name); } @Override public boolean equals(Object that) { if (!(that instanceof Developer)) return false; Developer s = (Developer) that; return s == this ? true : s.getId() == id ? true : false; } public String getDeveloperToken() { return developerToken; } public void setDeveloperToken(String developerToken) { this.developerToken = developerToken; } public Boolean getEnabled() { return enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } public String getDeveloperKey() { return developerKey; } public void setDeveloperKey(String developerKey) { this.developerKey = developerKey; } }