package fr.openwide.core.jpa.externallinkchecker.business.model; import java.util.Date; import java.util.Map; import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Transient; import org.bindgen.Bindable; import org.hibernate.annotations.Type; import org.hibernate.search.annotations.DocumentId; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.Maps; import fr.openwide.core.commons.util.CloneUtils; import fr.openwide.core.jpa.business.generic.model.GenericEntity; import fr.openwide.core.jpa.externallinkchecker.util.binding.CoreJpaExternalLinkCheckerBindings; @Bindable @Cacheable @Entity public class ExternalLinkWrapper extends GenericEntity<Long, ExternalLinkWrapper> { private static final long serialVersionUID = -4558332826839419557L; @Id @GeneratedValue @DocumentId private Long id; @Column(nullable = false) @Type(type = "fr.openwide.core.jpa.hibernate.usertype.StringClobType") // SQL type "text" (unknown size) private String url; @Column(nullable = false) @Enumerated(EnumType.STRING) private ExternalLinkStatus status = ExternalLinkStatus.ONLINE; @Column(nullable = false) private int consecutiveFailures = 0; @Column @Enumerated(EnumType.STRING) private ExternalLinkErrorType lastErrorType; @Column private Integer lastStatusCode; @Column private Date lastCheckDate; @Column @Type(type = "fr.openwide.core.jpa.hibernate.usertype.StringClobType") // SQL type "text" (unknown size) private String failureAudit; protected ExternalLinkWrapper() { } public ExternalLinkWrapper(String url) { this.url = url; } public ExternalLinkWrapper(ExternalLinkWrapper link) { setUrl(link.getUrl()); setStatus(link.getStatus()); setConsecutiveFailures(link.getConsecutiveFailures()); setLastErrorType(link.getLastErrorType()); setLastStatusCode(link.getLastStatusCode()); setLastCheckDate(link.getLastCheckDate()); setFailureAudit(link.getFailureAudit()); } @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public ExternalLinkStatus getStatus() { return status; } public void setStatus(ExternalLinkStatus status) { this.status = status; } public int getConsecutiveFailures() { return consecutiveFailures; } public void setConsecutiveFailures(int consecutiveFailures) { this.consecutiveFailures = consecutiveFailures; } public ExternalLinkErrorType getLastErrorType() { return lastErrorType; } public void setLastErrorType(ExternalLinkErrorType lastErrorType) { this.lastErrorType = lastErrorType; } public Integer getLastStatusCode() { return lastStatusCode; } public void setLastStatusCode(Integer lastStatusCode) { this.lastStatusCode = lastStatusCode; } public Date getLastCheckDate() { return CloneUtils.clone(lastCheckDate); } public void setLastCheckDate(Date lastCheckDate) { this.lastCheckDate = CloneUtils.clone(lastCheckDate); } public String getFailureAudit() { return failureAudit; } public void setFailureAudit(String failureAudit) { this.failureAudit = failureAudit; } @Override @JsonIgnore public String getNameForToString() { return url; } @Override @JsonIgnore public String getDisplayName() { return url; } @Override public int compareTo(ExternalLinkWrapper other) { if (this.equals(other)) { return 0; } return this.url.compareToIgnoreCase(other.getUrl()); } @Transient public void resetStatus() { status = ExternalLinkStatus.ONLINE; consecutiveFailures = 0; lastStatusCode = null; lastCheckDate = null; lastErrorType = null; failureAudit = null; } @Transient public Map<String, Object> getResetStatusPropertyValues() { Map<String, Object> changes = Maps.newHashMap(); changes.put(CoreJpaExternalLinkCheckerBindings.externalLinkWrapper().status().getPath(), ExternalLinkStatus.ONLINE); changes.put(CoreJpaExternalLinkCheckerBindings.externalLinkWrapper().consecutiveFailures().getPath(), 0); changes.put(CoreJpaExternalLinkCheckerBindings.externalLinkWrapper().lastStatusCode().getPath(), null); changes.put(CoreJpaExternalLinkCheckerBindings.externalLinkWrapper().lastCheckDate().getPath(), null); changes.put(CoreJpaExternalLinkCheckerBindings.externalLinkWrapper().lastErrorType().getPath(), null); changes.put(CoreJpaExternalLinkCheckerBindings.externalLinkWrapper().failureAudit().getPath(), null); return changes; } }