/* * Copyright (c) 2006-2012 by Public Library of Science http://plos.org http://ambraproject.org * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ambraproject.views; import org.apache.commons.lang.StringUtils; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; /** * Value object that holds the result of a single search item * */ public class SavedSearchHit implements Serializable { private static final long serialVersionUID = 2450207404766765639L; private final String uri; private final String title; private final String creator; private final Collection<String> subjectsPolyhierarchy; private final Collection<String> subjects; /** * Create a search hit with the values set * * @param uri Article ID * @param title Article title * @param creators Creators * @param subjects Subjects */ private SavedSearchHit(String uri, String title, String creators, Collection<String> subjects, Collection<String> subjectsPolyhierarchy) { this.uri = uri; this.title = title; this.creator = creators; this.subjects = subjects; this.subjectsPolyhierarchy = subjectsPolyhierarchy; } /** * @return the hit object's uri */ public String getUri() { return uri; } /** * Getter for property 'creator'. * @return Value for property 'creator'. */ public String getCreator() { return creator; } /** * Getter for property 'title'. * @return Value for property 'title'. */ public String getTitle() { return title; } /** * Getter for property 'subjects'. * @return Value for property 'subjects'. */ public Collection<String> getSubjects() { return subjects; } /** * Getter for property 'subjectsPolyhierarchy'. * @return Value for property 'subjectsPolyhierarchy'. */ public Collection<String> getSubjectsPolyhierarchy() { return subjectsPolyhierarchy; } @Override public String toString() { return "SearchHit{" + ", uri='" + uri + '\'' + ", title='" + title + '\'' + ", creator='" + creator + '\'' + ", subjects='" + (subjects == null ? null : Arrays.asList(subjects)) + "'" + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SavedSearchHit searchHit = (SavedSearchHit) o; return uri.equals(searchHit.uri); } @Override public int hashCode() { return uri.hashCode(); } public static Builder builder() { return new Builder(); } public static class Builder { private String uri; private String title; private String creator; private Collection<String> subjectsPolyhierarchy; private Collection<String> subjects; private Builder() { super(); } public Builder setUri(String uri) { this.uri = uri; return this; } public Builder setTitle(String title) { this.title = title; return this; } public Builder setCreator(String creator) { this.creator = creator; return this; } public Builder setSubjectsPolyhierarchy(Collection<String> subjectsPolyhierarchy) { this.subjectsPolyhierarchy = subjectsPolyhierarchy; return this; } public Builder setSubjects(Collection<String> subjects) { this.subjects = subjects; return this; } public SavedSearchHit build() { return new SavedSearchHit( uri, title, creator, subjects, subjectsPolyhierarchy ); } } }