Project

General

Profile

1
package eu.dnetlib.msro.workers.aggregation.collect.plugins.sftp;
2

    
3
import java.util.Iterator;
4
import java.util.Set;
5
import java.util.stream.Stream;
6

    
7
import org.springframework.stereotype.Component;
8

    
9
import com.google.common.base.Splitter;
10
import com.google.common.collect.Sets;
11

    
12
import eu.dnetlib.clients.msro.ProtocolParameterType;
13
import eu.dnetlib.miscutils.streams.DnetStreamSupport;
14
import eu.dnetlib.msro.workers.aggregation.collect.CollectException;
15
import eu.dnetlib.msro.workers.aggregation.collect.plugins.CollectorPlugin;
16
import eu.dnetlib.msro.workers.aggregation.collect.plugins.DnetCollectorParam;
17
import eu.dnetlib.msro.workers.aggregation.collect.plugins.DnetCollectorPlugin;
18
import eu.dnetlib.msro.workers.aggregation.objects.InterfaceDescriptor;
19

    
20
/**
21
 * Created by andrea on 11/01/16.
22
 */
23
@Component
24
@DnetCollectorPlugin(value = "sftp", parameters = {
25
		@DnetCollectorParam("username"),
26
		@DnetCollectorParam("password"),
27
		@DnetCollectorParam(value = "recursive", type = ProtocolParameterType.BOOLEAN),
28
		@DnetCollectorParam(value = "extensions", type = ProtocolParameterType.LIST)
29
})
30
public class SftpCollectorPlugin implements CollectorPlugin {
31

    
32
	private SftpIteratorFactory sftpIteratorFactory;
33

    
34
	@Override
35
	public Stream<String> collect(final InterfaceDescriptor interfaceDescriptor, final String fromDate, final String toDate)
36
			throws CollectException {
37
		final String baseUrl = interfaceDescriptor.getBaseUrl();
38
		final String username = interfaceDescriptor.getParams().get("username");
39
		final String password = interfaceDescriptor.getParams().get("password");
40
		final String recursive = interfaceDescriptor.getParams().get("recursive");
41
		final String extensions = interfaceDescriptor.getParams().get("extensions");
42

    
43
		if ((baseUrl == null) || baseUrl.isEmpty()) { throw new CollectException("Param 'baseurl' is null or empty"); }
44
		if ((username == null) || username.isEmpty()) { throw new CollectException("Param 'username' is null or empty"); }
45
		if ((password == null) || password.isEmpty()) { throw new CollectException("Param 'password' is null or empty"); }
46
		if ((recursive == null) || recursive.isEmpty()) { throw new CollectException("Param 'recursive' is null or empty"); }
47
		if ((extensions == null) || extensions.isEmpty()) { throw new CollectException("Param 'extensions' is null or empty"); }
48
		if ((fromDate != null) && !fromDate.matches("\\d{4}-\\d{2}-\\d{2}")) { throw new CollectException("Invalid date (YYYY-MM-DD): " + fromDate); }
49

    
50
		// final int fromDateIntSeconds =
51

    
52
		final boolean isRecursive = "true".equals(recursive);
53

    
54
		final Set<String> extensionsSet = parseSet(extensions);
55

    
56
		final Iterator<String> iter = getSftpIteratorFactory().newIterator(baseUrl, username, password, isRecursive, extensionsSet, fromDate);
57

    
58
		return DnetStreamSupport.generateStreamFromIterator(iter);
59
	}
60

    
61
	private Set<String> parseSet(final String extensions) {
62
		return Sets.newHashSet(Splitter.on(",").omitEmptyStrings().trimResults().split(extensions));
63
	}
64

    
65
	public SftpIteratorFactory getSftpIteratorFactory() {
66
		return sftpIteratorFactory;
67
	}
68

    
69
	public void setSftpIteratorFactory(final SftpIteratorFactory sftpIteratorFactory) {
70
		this.sftpIteratorFactory = sftpIteratorFactory;
71
	}
72
}
(1-1/3)