package edu.harvard.iq.dataverse.search.savedsearch; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(indexes = {@Index(columnList="definitionpoint_id") , @Index(columnList="creator_id")}) public class SavedSearch implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * Must be non-null but a "*" (wildcard) can be used. * * https://wiki.apache.org/solr/CommonQueryParameters#q */ @Column(nullable = false, columnDefinition = "TEXT") private String query; /** * "fq" stands for Filter Query: * https://wiki.apache.org/solr/CommonQueryParameters#fq */ @OneToMany(mappedBy = "savedSearch", cascade = CascadeType.ALL) private List<SavedSearchFilterQuery> savedSearchFilterQueries; /** * Saved searches are associated with a Dataverse, not a user. */ @JoinColumn(nullable = false) private Dataverse definitionPoint; @JoinColumn(nullable = false) private AuthenticatedUser creator; public List<String> getFilterQueriesAsStrings() { List<String> filterQueries = new ArrayList<>(); for (SavedSearchFilterQuery filterQueryToAdd : getSavedSearchFilterQueries()) { filterQueries.add(filterQueryToAdd.getFilterQuery()); } return filterQueries; } /** * This default constructor is only here to prevent this error at * deployment: * * Exception Description: The instance creation method * [edu.harvard.iq.dataverse.search.savedsearch.SavedSearch.<Default Constructor>], * with no parameters, does not exist, or is not accessible * * Don't use it. */ @Deprecated public SavedSearch() { } public SavedSearch(String query, Dataverse definitionPoint, AuthenticatedUser creator) { this.query = query; this.definitionPoint = definitionPoint; this.creator = creator; } @Override public String toString() { return "SavedSearch{" + "id=" + id + ", query=" + query + ", savedSearchFilterQueries=" + savedSearchFilterQueries + ", definitionPoint=" + definitionPoint + '}'; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getQuery() { return query; } public void setQuery(String query) { this.query = query; } public Dataverse getDefinitionPoint() { return definitionPoint; } public void setDefinitionPoint(Dataverse definitionPoint) { this.definitionPoint = definitionPoint; } public AuthenticatedUser getCreator() { return creator; } public void setCreator(AuthenticatedUser creator) { this.creator = creator; } public List<SavedSearchFilterQuery> getSavedSearchFilterQueries() { return savedSearchFilterQueries; } public void setSavedSearchFilterQueries(List<SavedSearchFilterQuery> savedSearchFilterQueries) { this.savedSearchFilterQueries = savedSearchFilterQueries; } }