dnet-core/dnet-core-components/src/main/java/eu/dnetlib/data/download/rmi/AbstractDownloadPlugin.java

104 lines
2.9 KiB
Java

package eu.dnetlib.data.download.rmi;
import java.util.List;
import com.google.gson.Gson;
import eu.dnetlib.data.download.rmi.DownloadItem.OpenAccessValues;
import org.joda.time.DateTime;
import org.joda.time.Days;
// TODO: Auto-generated Javadoc
/**
* The Class AbstractDownloadPlugin.
*/
public abstract class AbstractDownloadPlugin {
public static final int DEFAULT_TIMEOUT = 5000;
/**
* The regular expression.
*/
protected List<String> regularExpression;
/**
* Check open access.
*
* @param input the input
* @return the download item
*/
public DownloadItem checkOpenAccess(final DownloadItem input) {
if (input != null) {
OpenAccessValues openAccess = OpenAccessValues.valueOf(input.getOpenAccess());
switch (openAccess) {
case OPEN:
return input;
case CLOSED:
case RESTRICTED:
case UNKNOWN:
return null;
case EMBARGO:
if (input.getEmbargoDate() == null) return null;
DateTime embargoDate = new DateTime(input.getEmbargoDate());
DateTime today = new DateTime();
Days days = Days.daysBetween(embargoDate, today);
if (days.getDays() <= 0) return input;
return null;
}
}
return null;
}
public DownloadItem filterByRegexp(final DownloadItem input) {
if (this.regularExpression != null && this.regularExpression.size() > 0) {
final String baseURLs = input.getUrl();
final List<String> urlsList = new Gson().fromJson(baseURLs, List.class);
for (final String baseURL : urlsList) {
for (final String regExp : regularExpression) {
if (baseURL.matches(regExp))
return input;
}
}
return null;
} else return input;
}
protected boolean checkUrlsNotNull(DownloadItem input, List<String> urls) {
for (String s : urls) {
String newURL = extractURL(s);
if (newURL != null) {
input.setOriginalUrl(s);
input.setUrl(newURL);
return true;
}
}
return false;
}
public abstract String extractURL(final String baseURL) throws DownloadPluginException;
/**
* Gets the regular expression.
*
* @return the regular expression
*/
public List<String> getRegularExpression() {
return regularExpression;
}
/**
* Sets the regular expression.
*
* @param regularExpression the new regular expression
*/
public void setRegularExpression(final List<String> regularExpression) {
this.regularExpression = regularExpression;
}
}