/*
* Copyright 2016 Hewlett-Packard Development Company, L.P.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
*/
package com.hp.autonomy.frontend.find.core.savedsearches.query;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.hp.autonomy.frontend.find.core.savedsearches.SavedSearch;
import com.hp.autonomy.frontend.find.core.savedsearches.SavedSearchType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.jadira.usertype.dateandtime.joda.PersistentDateTime;
import org.joda.time.DateTime;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue(SavedSearchType.Values.QUERY)
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@JsonDeserialize(builder = SavedQuery.Builder.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
@TypeDefs(@TypeDef(name = SavedSearch.JADIRA_TYPE_NAME, typeClass = PersistentDateTime.class))
public class SavedQuery extends SavedSearch<SavedQuery, SavedQuery.Builder> {
@Column(name = "last_fetched_new_date")
@Type(type = JADIRA_TYPE_NAME)
private DateTime dateNewDocsLastFetched;
@Column(name = "last_fetched_date")
@Type(type = JADIRA_TYPE_NAME)
private DateTime dateDocsLastFetched;
private SavedQuery(final Builder builder) {
super(builder);
dateNewDocsLastFetched = builder.dateNewDocsLastFetched;
dateDocsLastFetched = builder.dateDocsLastFetched;
}
@Override
public Builder toBuilder() {
return new Builder(this);
}
@Override
protected void mergeInternal(final SavedQuery other) {
dateNewDocsLastFetched = other.dateNewDocsLastFetched == null ? dateNewDocsLastFetched : other.dateNewDocsLastFetched;
dateDocsLastFetched = other.dateDocsLastFetched == null ? dateDocsLastFetched : other.dateDocsLastFetched;
}
@NoArgsConstructor
@Setter
@Accessors(chain = true)
@JsonPOJOBuilder(withPrefix = "set")
public static class Builder extends SavedSearch.Builder<SavedQuery, Builder> {
private DateTime dateNewDocsLastFetched;
private DateTime dateDocsLastFetched;
public Builder(final SavedQuery query) {
super(query);
dateNewDocsLastFetched = query.dateNewDocsLastFetched;
dateDocsLastFetched = query.dateDocsLastFetched;
}
@Override
public SavedQuery build() {
return new SavedQuery(this);
}
}
}