/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.core.data.v2.index;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import org.roda.core.data.common.RodaConstants;
import org.roda.core.data.v2.formats.Format;
import org.roda.core.data.v2.index.facet.FacetFieldResult;
import org.roda.core.data.v2.ip.DIPFile;
import org.roda.core.data.v2.ip.IndexedAIP;
import org.roda.core.data.v2.ip.IndexedDIP;
import org.roda.core.data.v2.ip.IndexedFile;
import org.roda.core.data.v2.ip.IndexedRepresentation;
import org.roda.core.data.v2.ip.TransferredResource;
import org.roda.core.data.v2.ip.metadata.IndexedPreservationAgent;
import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent;
import org.roda.core.data.v2.jobs.IndexedReport;
import org.roda.core.data.v2.jobs.Job;
import org.roda.core.data.v2.log.LogEntry;
import org.roda.core.data.v2.notifications.Notification;
import org.roda.core.data.v2.risks.IndexedRisk;
import org.roda.core.data.v2.risks.RiskIncidence;
import org.roda.core.data.v2.user.Group;
import org.roda.core.data.v2.user.User;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
@XmlRootElement(name = RodaConstants.RODA_OBJECT_INDEX_RESULT)
@JsonInclude(JsonInclude.Include.ALWAYS)
@JsonIgnoreProperties(ignoreUnknown = true)
public class IndexResult<T extends Serializable> implements Serializable {
private static final long serialVersionUID = -7896294396414765557L;
private long offset;
private long limit;
private long totalCount;
private List<T> results;
private List<FacetFieldResult> facetResults;
private Date date;
public IndexResult() {
super();
date = new Date();
}
public IndexResult(long offset, long limit, long totalCount, List<T> results, List<FacetFieldResult> facetResults) {
super();
this.offset = offset;
this.limit = limit;
this.totalCount = totalCount;
this.results = results;
this.facetResults = facetResults;
date = new Date();
}
/**
* @return the offset
*/
public long getOffset() {
return offset;
}
/**
* @return the limit
*/
public long getLimit() {
return limit;
}
/**
* @return the totalCount
*/
public long getTotalCount() {
return totalCount;
}
/**
* @return the results
*/
@XmlElementWrapper(name = "results")
@XmlElements({@XmlElement(name = RodaConstants.RODA_OBJECT_AIP, type = IndexedAIP.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_REPRESENTATION, type = IndexedRepresentation.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_FILE, type = IndexedFile.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_DIP, type = IndexedDIP.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_DIPFILE, type = DIPFile.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_PRESERVATION_AGENT, type = IndexedPreservationAgent.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_PRESERVATION_EVENT, type = IndexedPreservationEvent.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_JOB, type = Job.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_REPORT, type = IndexedReport.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_LOG, type = LogEntry.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_NOTIFICATION, type = Notification.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_RISK, type = IndexedRisk.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_INCIDENCE, type = RiskIncidence.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_FORMAT, type = Format.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_TRANSFERRED_RESOURCE, type = TransferredResource.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_USER, type = User.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_GROUP, type = Group.class),
@XmlElement(name = RodaConstants.RODA_OBJECT_OTHER, type = Object.class)})
public List<T> getResults() {
return results;
}
public void setOffset(long offset) {
this.offset = offset;
}
public void setLimit(long limit) {
this.limit = limit;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public void setResults(List<T> results) {
this.results = results;
}
public List<FacetFieldResult> getFacetResults() {
return facetResults;
}
public void setFacetResults(List<FacetFieldResult> facetResults) {
this.facetResults = facetResults;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "IndexResult [offset=" + offset + ", limit=" + limit + ", totalCount=" + totalCount + ", results=" + results
+ ", facetResults=" + facetResults + ", date=" + date + "]";
}
}