/*
* Copyright 2012-2013, CMM, University of Queensland.
*
* This file is part of Paul.
*
* Paul is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Paul is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Paul. If not, see <http://www.gnu.org/licenses/>.
*/
package au.edu.uq.cmm.paul;
import java.net.UnknownHostException;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NoResultException;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.annotations.GenericGenerator;
import au.edu.uq.cmm.paul.queue.QueueFileManager;
import au.edu.uq.cmm.paul.queue.QueueFileManager.Strategy;
/**
* This class represents the configuration details of a DataGrabber instance.
* The details are persisted using Hibernate / JPA.
*
* @author scrawley
*/
@Entity
@Table(name = "CONFIGURATION")
public class PaulConfiguration implements GrabberConfiguration {
private Long id;
private String captureDirectory;
private String archiveDirectory;
private int grabberTimeout;
private String baseFileUrl;
private String feedId;
private String feedTitle;
private String feedAuthor;
private String feedAuthorEmail;
private String feedUrl;
private int feedPageSize = 20;
private long queueExpiryTime;
private long queueExpiryInterval;
private boolean expireByDeleting;
private boolean holdDatasetsWithNoUser = true;
private String primaryRepositoryUrl;
private String aclsUrl;
private Strategy queueFileStrategy = QueueFileManager.Strategy.COPY_FILES;
private Long queueFileSizeThreshold;
public PaulConfiguration() {
super();
}
public PaulConfiguration(StaticPaulConfiguration staticConfig) throws UnknownHostException {
setBaseFileUrl(staticConfig.getBaseFileUrl());
setCaptureDirectory(staticConfig.getCaptureDirectory());
setArchiveDirectory(staticConfig.getArchiveDirectory());
setGrabberTimeout(staticConfig.getGrabberTimeout());
setFeedId(staticConfig.getFeedId());
setFeedTitle(staticConfig.getFeedTitle());
setFeedAuthor(staticConfig.getFeedAuthor());
setFeedAuthorEmail(staticConfig.getFeedAuthorEmail());
setFeedUrl(staticConfig.getFeedUrl());
setFeedPageSize(staticConfig.getFeedPageSize());
setQueueExpiryInterval(staticConfig.getQueueExpiryInterval());
setQueueExpiryTime(staticConfig.getQueueExpiryTime());
setExpireByDeleting(staticConfig.isExpireByDeleting());
setHoldDatasetsWithNoUser(staticConfig.isHoldDatasetsWithNoUser());
setPrimaryRepositoryUrl(staticConfig.getPrimaryRepositoryUrl());
setAclsUrl(staticConfig.getAclsUrl());
setQueueFileStrategy(staticConfig.getQueueFileStrategy());
setQueueFileSizeThreshold(staticConfig.getQueueFileSizeThreshold());
}
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String getCaptureDirectory() {
return captureDirectory;
}
public void setCaptureDirectory(String captureDirectory) {
this.captureDirectory = captureDirectory;
}
@Override
public String getArchiveDirectory() {
return archiveDirectory;
}
public void setArchiveDirectory(String archiveDirectory) {
this.archiveDirectory = archiveDirectory;
}
@Override
public int getGrabberTimeout() {
return grabberTimeout;
}
public void setGrabberTimeout(int grabberTimeout) {
this.grabberTimeout = grabberTimeout;
}
@Override
public String getBaseFileUrl() {
return baseFileUrl;
}
public void setBaseFileUrl(String baseFileUrl) {
this.baseFileUrl = baseFileUrl;
}
@Override
public String getFeedId() {
return feedId;
}
public void setFeedId(String feedId) {
this.feedId = feedId;
}
@Override
public String getFeedTitle() {
return feedTitle;
}
public void setFeedTitle(String feedTitle) {
this.feedTitle = feedTitle;
}
@Override
public String getFeedAuthor() {
return feedAuthor;
}
public void setFeedAuthor(String feedAuthor) {
this.feedAuthor = feedAuthor;
}
@Override
public String getFeedAuthorEmail() {
return feedAuthorEmail;
}
public void setFeedAuthorEmail(String feedAuthorEmail) {
this.feedAuthorEmail = feedAuthorEmail;
}
@Override
public String getFeedUrl() {
return feedUrl;
}
public void setFeedUrl(String feedUrl) {
this.feedUrl = feedUrl;
}
@Override
public int getFeedPageSize() {
return feedPageSize;
}
public void setFeedPageSize(int feedPageSize) {
this.feedPageSize = feedPageSize;
}
@Override
public long getQueueExpiryTime() {
return queueExpiryTime;
}
public void setQueueExpiryTime(long queueExpiryTime) {
this.queueExpiryTime = queueExpiryTime;
}
@Override
public long getQueueExpiryInterval() {
return queueExpiryInterval;
}
public void setQueueExpiryInterval(long queueExpiryInterval) {
this.queueExpiryInterval = queueExpiryInterval;
}
@Override
public boolean isExpireByDeleting() {
return expireByDeleting;
}
public void setExpireByDeleting(boolean expireByDeleting) {
this.expireByDeleting = expireByDeleting;
}
@Override
public boolean isHoldDatasetsWithNoUser() {
return holdDatasetsWithNoUser;
}
public void setHoldDatasetsWithNoUser(boolean holdDatasetsWithNoUser) {
this.holdDatasetsWithNoUser = holdDatasetsWithNoUser;
}
@Override
public String getPrimaryRepositoryUrl() {
return primaryRepositoryUrl;
}
public void setPrimaryRepositoryUrl(String primaryRepositoryUrl) {
this.primaryRepositoryUrl = primaryRepositoryUrl;
}
@Override
public String getAclsUrl() {
return aclsUrl;
}
public void setAclsUrl(String aclsUrl) {
this.aclsUrl = aclsUrl;
}
@Override
@Enumerated(EnumType.STRING)
public QueueFileManager.Strategy getQueueFileStrategy() {
return this.queueFileStrategy == null ?
QueueFileManager.Strategy.COPY_FILES :
this.queueFileStrategy;
}
public void setQueueFileStrategy(Strategy queueFileStrategy) {
this.queueFileStrategy = queueFileStrategy;
}
@Override
@Column(nullable=true)
public Long getQueueFileSizeThreshold() {
return this.queueFileSizeThreshold == null ? 0L : this.queueFileSizeThreshold;
}
public void setQueueFileSizeThreshold(Long queueFileSizeThreshold) {
this.queueFileSizeThreshold = queueFileSizeThreshold;
}
public static PaulConfiguration load(EntityManagerFactory entityManagerFactory) {
EntityManager em = entityManagerFactory.createEntityManager();
try {
return em.createQuery("from PaulConfiguration",
PaulConfiguration.class).getSingleResult();
} catch (NoResultException ex) {
return null;
} finally {
em.close();
}
}
@Transient
public boolean isEmpty() {
return this.equals(new PaulConfiguration());
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((aclsUrl == null) ? 0 : aclsUrl.hashCode());
result = prime
* result
+ ((archiveDirectory == null) ? 0 : archiveDirectory.hashCode());
result = prime * result
+ ((baseFileUrl == null) ? 0 : baseFileUrl.hashCode());
result = prime
* result
+ ((captureDirectory == null) ? 0 : captureDirectory.hashCode());
result = prime * result + (expireByDeleting ? 1231 : 1237);
result = prime * result
+ ((feedAuthor == null) ? 0 : feedAuthor.hashCode());
result = prime * result
+ ((feedAuthorEmail == null) ? 0 : feedAuthorEmail.hashCode());
result = prime * result + ((feedId == null) ? 0 : feedId.hashCode());
result = prime * result + feedPageSize;
result = prime * result
+ ((feedTitle == null) ? 0 : feedTitle.hashCode());
result = prime * result + ((feedUrl == null) ? 0 : feedUrl.hashCode());
result = prime * result + grabberTimeout;
result = prime * result + (holdDatasetsWithNoUser ? 1231 : 1237);
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime
* result
+ ((primaryRepositoryUrl == null) ? 0 : primaryRepositoryUrl
.hashCode());
result = prime * result
+ (int) (queueExpiryInterval ^ (queueExpiryInterval >>> 32));
result = prime * result
+ (int) (queueExpiryTime ^ (queueExpiryTime >>> 32));
result = prime
* result
+ ((queueFileStrategy == null) ? 0 : queueFileStrategy
.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PaulConfiguration other = (PaulConfiguration) obj;
if (aclsUrl == null) {
if (other.aclsUrl != null) {
return false;
}
} else if (!aclsUrl.equals(other.aclsUrl)) {
return false;
}
if (archiveDirectory == null) {
if (other.archiveDirectory != null) {
return false;
}
} else if (!archiveDirectory.equals(other.archiveDirectory)) {
return false;
}
if (baseFileUrl == null) {
if (other.baseFileUrl != null) {
return false;
}
} else if (!baseFileUrl.equals(other.baseFileUrl)) {
return false;
}
if (captureDirectory == null) {
if (other.captureDirectory != null) {
return false;
}
} else if (!captureDirectory.equals(other.captureDirectory)) {
return false;
}
if (expireByDeleting != other.expireByDeleting) {
return false;
}
if (feedAuthor == null) {
if (other.feedAuthor != null) {
return false;
}
} else if (!feedAuthor.equals(other.feedAuthor)) {
return false;
}
if (feedAuthorEmail == null) {
if (other.feedAuthorEmail != null) {
return false;
}
} else if (!feedAuthorEmail.equals(other.feedAuthorEmail)) {
return false;
}
if (feedId == null) {
if (other.feedId != null) {
return false;
}
} else if (!feedId.equals(other.feedId)) {
return false;
}
if (feedPageSize != other.feedPageSize) {
return false;
}
if (feedTitle == null) {
if (other.feedTitle != null) {
return false;
}
} else if (!feedTitle.equals(other.feedTitle)) {
return false;
}
if (feedUrl == null) {
if (other.feedUrl != null) {
return false;
}
} else if (!feedUrl.equals(other.feedUrl)) {
return false;
}
if (grabberTimeout != other.grabberTimeout) {
return false;
}
if (holdDatasetsWithNoUser != other.holdDatasetsWithNoUser) {
return false;
}
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
if (primaryRepositoryUrl == null) {
if (other.primaryRepositoryUrl != null) {
return false;
}
} else if (!primaryRepositoryUrl.equals(other.primaryRepositoryUrl)) {
return false;
}
if (queueExpiryInterval != other.queueExpiryInterval) {
return false;
}
if (queueExpiryTime != other.queueExpiryTime) {
return false;
}
if (queueFileStrategy != other.queueFileStrategy) {
return false;
}
return true;
}
@Override
public String toString() {
return "PaulConfiguration [id=" + id + ", captureDirectory="
+ captureDirectory + ", archiveDirectory=" + archiveDirectory
+ ", grabberTimeout=" + grabberTimeout + ", baseFileUrl="
+ baseFileUrl + ", feedId=" + feedId + ", feedTitle="
+ feedTitle + ", feedAuthor=" + feedAuthor
+ ", feedAuthorEmail=" + feedAuthorEmail + ", feedUrl="
+ feedUrl + ", feedPageSize=" + feedPageSize
+ ", queueExpiryTime=" + queueExpiryTime
+ ", queueExpiryInterval=" + queueExpiryInterval
+ ", expireByDeleting=" + expireByDeleting
+ ", holdDatasetsWithNoUser=" + holdDatasetsWithNoUser
+ ", primaryRepositoryUrl=" + primaryRepositoryUrl
+ ", aclsUrl=" + aclsUrl + ", queueFileStrategy="
+ queueFileStrategy + "]";
}
}