package com.trywildcard.pair.model.summary;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.trywildcard.pair.exception.CardBuilderException;
import com.trywildcard.pair.extraction.MetaTagModel;
import com.trywildcard.pair.model.media.Image;
import com.trywildcard.pair.model.media.Media;
import com.trywildcard.pair.validation.ValidationTool;
import java.util.List;
public class Summary {
@JsonIgnore
protected ValidationTool v = new ValidationTool();
private String title;
private String subtitle;
private String description;
private Media media;
/**
* Needed for Jackson deserialization *
*/
private Summary() { }
public Summary(String title, String description) throws CardBuilderException {
setTitle(title);
setDescription(description);
}
public Summary(MetaTagModel metaTagModel) throws CardBuilderException {
if (metaTagModel == null) {
throw new CardBuilderException("MetaTagModel is required");
}
/* required fields */
setTitle(metaTagModel.getTitle());
setDescription(metaTagModel.getDescription());
/* Trying to set optional fields if found */
try {
setMedia(new Image(metaTagModel.getImageUrl()));
} catch (CardBuilderException cbe) {
//if exception is thrown, let's ignore since media is optional for an article
}
}
public String getDescription() {
return description;
}
public void setDescription(String description) throws CardBuilderException {
boolean isValid = v.required(v.notNullOrEmpty(description), "Description cannot be blank.");
if (isValid) {
this.description = description;
}
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) throws CardBuilderException {
boolean isValid = v.optional(v.notNullOrEmpty(subtitle), "Title cannot be blank.");
if (isValid) {
this.subtitle = subtitle;
}
}
public String getTitle() {
return title;
}
public void setTitle(String title) throws CardBuilderException {
boolean isValid = v.required(v.notNullOrEmpty(title), "Title cannot be blank.");
if (isValid) {
this.title = title;
}
}
public void setMedia(Image media) throws CardBuilderException {
boolean isValid = v.optional(v.notNull(media), "Must specify a image.");
if (isValid) {
this.media = media;
}
}
public Media getMedia() {
return media;
}
/**
* Get a list of validation errors.
* @return the list of errors.
*/
@JsonIgnore
public List<String> getErrors(){
return v.getErrors();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Summary summary = (Summary) o;
if (description != null ? !description.equals(summary.description) : summary.description != null) return false;
if (media != null ? !media.equals(summary.media) : summary.media != null) return false;
if (title != null ? !title.equals(summary.title) : summary.title != null) return false;
if (v != null ? !v.equals(summary.v) : summary.v != null) return false;
return true;
}
@Override
public int hashCode() {
int result = v != null ? v.hashCode() : 0;
result = 31 * result + (title != null ? title.hashCode() : 0);
result = 31 * result + (description != null ? description.hashCode() : 0);
result = 31 * result + (media != null ? media.hashCode() : 0);
return result;
}
}