Project

General

Profile

1
package eu.dnetlib.msro.openaireplus.workflows.nodes;
2

    
3
import java.util.List;
4
import java.util.Map;
5

    
6
import javax.annotation.Resource;
7

    
8
import com.google.common.collect.Maps;
9
import com.googlecode.sarasvati.Arc;
10
import com.googlecode.sarasvati.NodeToken;
11

    
12
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
13
import eu.dnetlib.enabling.tools.ServiceLocator;
14
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
15

    
16
public class FindExistingRepositoriesJobNode extends SimpleJobNode {
17
	
18
	@Resource(name="lookupLocator")
19
	private ServiceLocator<ISLookUpService> lookupLocator;
20

    
21
	private String existingReposParam = "existingRepos";
22
	
23
	class RepositoryInfo {
24
		public String resourceKind;
25
		public String repoId;
26

    
27
		public RepositoryInfo(String resourceKind, String repoId) {
28
			this.resourceKind = resourceKind;
29
			this.repoId = repoId;
30
		}
31
		@Override
32
		public String toString() {
33
			return "[" + resourceKind + ", " + repoId + "]";
34
		}
35
	}
36

    
37
	@Override
38
	protected String execute(NodeToken token) throws Exception {
39
		String xquery = 
40
				"for $x in /*[.//RESOURCE_TYPE/@value='RepositoryServiceResourceType'] " +
41
				"return concat (" +
42
				"$x//RESOURCE_IDENTIFIER/@value, " +
43
				"'@@@', " +
44
				"$x//RESOURCE_KIND/@value, " +
45
				"'@@@', " +
46
				"$x//EXTRA_FIELDS/FIELD[./key='OpenAireDataSourceId']/value)";
47
		final List<String> list = lookupLocator.getService().quickSearchProfile(xquery);
48
		
49
		final Map<String, RepositoryInfo> map = Maps.newHashMap();
50
		for (String s : list) {
51
			String[] arr = s.split("@@@");
52
			if (arr.length == 3) {
53
				map.put(arr[2], new RepositoryInfo(arr[1], arr[0]));
54
			}
55
		}
56
		token.getEnv().setTransientAttribute(getExistingReposParam(), map);
57
		
58
		return Arc.DEFAULT_ARC;
59
	}
60

    
61
	public String getExistingReposParam() {
62
		return existingReposParam;
63
	}
64

    
65
	public void setExistingReposParam(String existingReposParam) {
66
		this.existingReposParam = existingReposParam;
67
	}
68

    
69
}
(3-3/16)