Project

General

Profile

1
package eu.dnetlib.data.download;
2

    
3
import java.util.List;
4
import javax.annotation.Resource;
5

    
6
import com.google.gson.Gson;
7
import com.google.gson.reflect.TypeToken;
8
import eu.dnetlib.data.download.rmi.DownloadServiceActions;
9
import eu.dnetlib.data.download.rmi.DownloadServiceException;
10
import eu.dnetlib.data.download.rmi.DownloadServiceFeeder;
11
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
12
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerAction;
13
import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
14
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

    
19
public class DownloadAction implements BlackboardServerAction<DownloadServiceActions> {
20

    
21
	/** The Constant log. */
22
	private static final Log log = LogFactory.getLog(DownloadAction.class);
23
	private static String DEFAULT_NUMBER_OF_THREAD = "5";
24
	@Resource
25
	private DownloadServiceFeeder downloadServiceFeeder;
26

    
27
	@Override
28
	public void execute(final BlackboardServerHandler handler, final BlackboardJob job) throws Exception {
29
		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
			String basePath = job.getParameters().get("basePath");
37
			String regularExpression = job.getParameters().get("regularExpressions");
38
			log.debug("regular Expression: " + regularExpression);
39

    
40
			List<String> expressions = null;
41

    
42
			if (!StringUtils.isBlank(regularExpression)) {
43
				expressions = parseRegexList(regularExpression);
44
			}
45

    
46
			if (StringUtils.isBlank(numberOfThreads)) {
47
				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
			DownloadReportMap response = downloadServiceFeeder.download(epr, plugin, objectStoreID, protocol, mimeType, Integer.parseInt(numberOfThreads),
53
					basePath, expressions);
54
			if (response.getStatus()) {
55
				log.info(String.format("Completed Download, plugin: %s, protocol: %s, objectStoreID: %s", plugin, protocol, objectStoreID));
56
				job.getParameters().put("total", "" + response.getTotalDownloaded());
57
				job.getParameters().put("report", Base64.encodeBase64String(response.toString().getBytes()));
58
				handler.done(job);
59
			} else {
60
				log.error("download response is false" + response);
61

    
62
				handler.failed(job, new DownloadServiceException(
63
						"oops! something bad happen to our download hamsters, downlaoded so far: " + response.getTotalDownloaded()));
64
			}
65
		} catch (Exception e) {
66
			log.error("An error occur while starting download", e);
67
			handler.failed(job, new DownloadServiceException(e));
68
		}
69
	}
70

    
71
	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
}
(1-1/5)