package models; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.TimeZone; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Transient; import play.data.validation.Constraints.Required; import play.db.ebean.Model; import uk.bl.Const; import com.avaje.ebean.ExpressionList; import com.avaje.ebean.Page; import com.fasterxml.jackson.annotation.JsonIgnore; /** * This class allows archivist to manage nominations. */ @Entity @Table(name = "nomination") public class Nomination extends ActModel { /** * file id */ private static final long serialVersionUID = -2357699575463702989L; /** * The name of the nomination. Derived from UKWA Nomination Form > Full name */ @Required(message="Name is required") @Column(columnDefinition = "text") public String name; /** * The title of the nomination. Derived from UKWA Nomination Form > Title of website */ @Required(message="Website title is required") @Column(columnDefinition = "text") public String title; /** * The URL of the nomination. Derived from UKWA Nomination Form > URL of website */ @Required(message="Web address is required") @Column(columnDefinition = "text") public String websiteUrl; /** * The email of the nomination. Derived from UKWA Nomination Form > Email address */ @Required(message="Email is required") @Column(columnDefinition = "text") public String email; /** * The telephone number of the nomination. Derived from UKWA Nomination Form > Telephone number */ @Column(columnDefinition = "text") public String tel; /** * The address of the nomination. Derived from UKWA Nomination Form > Address */ @Column(columnDefinition = "text") public String address; /** * The nominated website owner of the nomination. Indicates whether nominator is also site * owner or not. Derived from UKWA Nomination Form > * Are you the copyright holder or owner of the website? */ public Boolean nominatedWebsiteOwner; /** * The justification of the nomination. Derived from UKWA Nomination Form > Your justification... */ @Column(columnDefinition = "text") public String justification; /** * Allows the notes regarding nomination description. * Derived from UKWA Nomination Form > Notes about your... */ @Column(columnDefinition = "text") public String notes; /** * Indicates that the new nomination has been inspected by Archivist. */ @JsonIgnore public Boolean nominationChecked; public Date nominationDate; @Transient public String nominationDateText; public static final Model.Finder<Long, Nomination> find = new Model.Finder<Long, Nomination>(Long.class, Nomination.class); public Nomination() { super(); } // public String validate() { // if (StringUtils.isEmpty(this.title)) { // return "Title is blank"; // } // if (StringUtils.isEmpty(this.name)) { // return "Name is blank"; // } // if (StringUtils.isEmpty(this.websiteUrl)) { // return "WebsiteUrl is blank"; // } // if (StringUtils.isEmpty(this.email)) { // return "Email is blank"; // } // return null; // } /** * Retrieve all nominations. */ public static List<Nomination> findAll() { return find.all(); } public static Nomination findByName(String name) { return find.where().eq("name", name).findUnique(); } /** * Retrieve an object by Id (id). * @param nid * @return object */ public static Nomination findById(Long id) { Nomination res = find.where().eq(Const.ID, id).findUnique(); return res; } /** * Retrieve a permission refusal by URL. * @param url * @return permission refusal name */ public static Nomination findByUrl(String url) { Nomination res = new Nomination(); if (url != null && url.length() > 0 && !url.equals(Const.NONE)) { res = find.where().eq(Const.URL, url).findUnique(); } else { res.name = Const.NONE; } return res; } /** * This method filters permission refusals by name and returns a list * of filtered Nomination objects. * @param name * @return */ public static List<Nomination> filterByName(String name) { List<Nomination> res = new ArrayList<Nomination>(); ExpressionList<Nomination> ll = find.where().icontains(Const.NAME, name); res = ll.findList(); return res; } public String getNominationDateText() { if (nominationDate != null) { DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); return dateFormat.format(nominationDate); } return null; } @Override public String toString() { return "Nomination(" + name + ")" + " id:" + id; } /** * Return a page of User * * @param page Page to display * @param pageSize Number of Nominations per page * @param sortBy User property used for sorting * @param order Sort order (either or asc or desc) * @param filter Filter applied on the name column */ public static Page<Nomination> page(int page, int pageSize, String sortBy, String order, String filter) { return find.where().icontains("name", filter) .orderBy(sortBy + " " + order) .findPagingList(pageSize) .setFetchAhead(false) .getPage(page); } }