Project

General

Profile

1 32307 claudio.at
package eu.dnetlib.data.download;
2 26600 sandro.lab
3 37568 sandro.lab
import java.util.List;
4 26600 sandro.lab
import javax.annotation.Resource;
5
6 37568 sandro.lab
import com.google.gson.Gson;
7 38937 claudio.at
import com.google.gson.reflect.TypeToken;
8 32307 claudio.at
import eu.dnetlib.data.download.rmi.DownloadServiceActions;
9
import eu.dnetlib.data.download.rmi.DownloadServiceException;
10
import eu.dnetlib.data.download.rmi.DownloadServiceFeeder;
11 26600 sandro.lab
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
12
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerAction;
13
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
14 40366 claudio.at
import org.apache.commons.codec.binary.Base64;
15
import org.apache.commons.lang.StringUtils;
16
import org.apache.commons.logging.Log;
17
import org.apache.commons.logging.LogFactory;
18 26600 sandro.lab
19
public class DownloadAction implements BlackboardServerAction<DownloadServiceActions> {
20
21
	/** The Constant log. */
22
	private static final Log log = LogFactory.getLog(DownloadAction.class);
23 40366 claudio.at
	private static String DEFAULT_NUMBER_OF_THREAD = "5";
24 26600 sandro.lab
	@Resource
25 38937 claudio.at
	private DownloadServiceFeeder downloadServiceFeeder;
26 26600 sandro.lab
27
	@Override
28
	public void execute(final BlackboardServerHandler handler, final BlackboardJob job) throws Exception {
29 32909 sandro.lab
		try {
30
			String epr = job.getParameters().get("epr");
31
			String plugin = job.getParameters().get("plugin");
32
			String objectStoreID = job.getParameters().get("objectStoreID");
33
			String protocol = job.getParameters().get("protocol");
34
			String mimeType = job.getParameters().get("mimeType");
35
			String numberOfThreads = job.getParameters().get("thread");
36 33251 sandro.lab
			String basePath = job.getParameters().get("basePath");
37 37568 sandro.lab
			String regularExpression = job.getParameters().get("regularExpressions");
38 38937 claudio.at
			log.debug("regular Expression: " + regularExpression);
39 37586 sandro.lab
40 37568 sandro.lab
			List<String> expressions = null;
41 33251 sandro.lab
42 37586 sandro.lab
			if (!StringUtils.isBlank(regularExpression)) {
43 38937 claudio.at
				expressions = parseRegexList(regularExpression);
44 37568 sandro.lab
			}
45
46 38937 claudio.at
			if (StringUtils.isBlank(numberOfThreads)) {
47 32909 sandro.lab
				log.warn("Cannot find numberOfThread, using default value " + DEFAULT_NUMBER_OF_THREAD);
48
				numberOfThreads = DEFAULT_NUMBER_OF_THREAD;
49
			}
50
			log.info(String.format("downloading using plugin %s , protocol : %s into ObjectStore id %s  ", plugin, protocol, objectStoreID));
51
			handler.ongoing(job);
52 33251 sandro.lab
			DownloadReportMap response = downloadServiceFeeder.download(epr, plugin, objectStoreID, protocol, mimeType, Integer.parseInt(numberOfThreads),
53 37568 sandro.lab
					basePath, expressions);
54 32909 sandro.lab
			if (response.getStatus()) {
55 38937 claudio.at
				log.info(String.format("Completed Download, plugin: %s, protocol: %s, objectStoreID: %s", plugin, protocol, objectStoreID));
56
				job.getParameters().put("total", "" + response.getTotalDownloaded());
57 40366 claudio.at
				job.getParameters().put("report", Base64.encodeBase64String(response.toString().getBytes()));
58 32909 sandro.lab
				handler.done(job);
59
			} else {
60 38937 claudio.at
				log.error("download response is false" + response);
61 33251 sandro.lab
62 40366 claudio.at
				handler.failed(job, new DownloadServiceException(
63
						"oops! something bad happen to our download hamsters, downlaoded so far: " + response.getTotalDownloaded()));
64 32909 sandro.lab
			}
65 33251 sandro.lab
		} catch (Exception e) {
66 38937 claudio.at
			log.error("An error occur while starting download", e);
67 33251 sandro.lab
			handler.failed(job, new DownloadServiceException(e));
68 26600 sandro.lab
		}
69
	}
70
71 38937 claudio.at
	private List<String> parseRegexList(final String regularExpression) {
72
		log.info("parsing regex list: " + regularExpression);
73
		return new Gson().fromJson(regularExpression, new TypeToken<List<String>>() {}.getType());
74
	}
75
76 26600 sandro.lab
}