package org.jboss.seam.rest.examples.tasks.entity; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.validation.GroupSequence; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.jboss.seam.rest.examples.tasks.json.JsonDateSerializer; /** * @author <a href="http://community.jboss.org/people/jharting">Jozef Hartinger</a> */ @Entity @GroupSequence({Task.class, TaskValidationGroup.class}) @NamedQueries({ @NamedQuery(name = "taskById", query = "select task from Task task where task.id = :tid"), @NamedQuery(name = "taskByCategoryAndId", query = "select task from Task task where task.id = :tid and task.category.name = :category"), @NamedQuery(name = "tasks", query = "select task from Task task where task.resolved in (:r1, :r2) order by task.id"), @NamedQuery(name = "tasksByCategory", query = "select task from Task task where task.category.name = :category and task.resolved in (:r1, :r2) order by task.id")}) public class Task { @Id @GeneratedValue private Long id; @NotNull @Size(min = 1, max = 100, groups = TaskValidationGroup.class) private String name; @NotNull private Boolean resolved; @Temporal(TemporalType.TIMESTAMP) @NotNull private Date created; @Temporal(TemporalType.TIMESTAMP) @NotNull private Date updated; @ManyToOne @NotNull private Category category; public Task() { } public Task(String name, Boolean resolved, Date created, Date updated, Category category) { this.name = name; this.resolved = resolved; this.created = created; this.updated = updated; this.category = category; } public Task(Long id, String name, Boolean resolved, Date created, Date updated, Category category) { this(name, resolved, created, updated, category); this.id = 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 Boolean isResolved() { return resolved; } public void setResolved(Boolean resolved) { this.resolved = resolved; } @XmlElement(name = "created") @JsonSerialize(using = JsonDateSerializer.class) public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } @XmlElement(name = "updated") @JsonSerialize(using = JsonDateSerializer.class) public Date getUpdated() { return updated; } public void setUpdated(Date updated) { this.updated = updated; } @XmlTransient public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } @Transient @XmlElement(name = "category") @JsonProperty("category") public String getCategoryName() { return category.getName(); } }