Project

General

Profile

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

    
3
import java.io.StringReader;
4
import java.util.HashMap;
5
import java.util.Map;
6

    
7
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
8
import eu.dnetlib.msro.workflows.graph.Arc;
9
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
10
import eu.dnetlib.msro.workflows.procs.Env;
11
import eu.dnetlib.rmi.datasource.DatasourceManagerService;
12
import eu.dnetlib.rmi.enabling.ISLookUpService;
13
import org.dom4j.Document;
14
import org.dom4j.Node;
15
import org.dom4j.io.SAXReader;
16
import org.springframework.beans.factory.annotation.Autowired;
17

    
18
public class MDStoreToApiExtraFieldJobNode extends SimpleJobNode {
19

    
20
	private String mdId;
21
	private String datasourceId;
22
	private String datasourceInterface;
23
	private String extraFieldForTotal;
24
	private String extraFieldForDate;
25
	private String extraFieldForMdId;
26

    
27
	@Autowired
28
	private UniqueServiceLocator serviceLocator;
29

    
30
	@Override
31
	protected String execute(final Env env) throws Exception {
32
		final String xq = "for $x in collection('/db/DRIVER/MDStoreDSResources/MDStoreDSResourceType') " +
33
				"where $x//RESOURCE_IDENTIFIER/@value='" + this.mdId + "' " +
34
				"return concat($x//NUMBER_OF_RECORDS, ' @=@ ', $x//LAST_STORAGE_DATE)";
35

    
36
		final String s = this.serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xq);
37

    
38
		final String[] arr = s.split(" @=@ ");
39

    
40
		final Map<String, String> map = getCurrentExtraFields(this.datasourceId, this.datasourceInterface);
41
		map.put(this.extraFieldForTotal, arr[0].trim());
42
		map.put(this.extraFieldForDate, arr[1].trim());
43
		map.put(this.extraFieldForMdId, this.mdId);
44

    
45
		this.serviceLocator.getService(DatasourceManagerService.class).bulkUpdateApiExtraFields(this.datasourceId, this.datasourceInterface, map);
46

    
47
		return Arc.DEFAULT_ARC;
48
	}
49

    
50
	private Map<String, String> getCurrentExtraFields(final String repoId, final String ifaceId) throws Exception {
51
		final Map<String, String> res = new HashMap<>();
52

    
53
		final String profile = this.serviceLocator.getService(ISLookUpService.class).getResourceProfile(repoId);
54

    
55
		final SAXReader reader = new SAXReader();
56
		final Document doc = reader.read(new StringReader(profile));
57

    
58
		final Node ifcNode = doc.selectSingleNode("//INTERFACE[@id='" + ifaceId + "']");
59
		if (ifcNode != null) {
60
			for (final Object o : ifcNode.selectNodes("./INTERFACE_EXTRA_FIELD")) {
61
				res.put(((Node) o).valueOf("@name"), ((Node) o).getText());
62
			}
63
		}
64

    
65
		return res;
66
	}
67

    
68
	public String getMdId() {
69
		return this.mdId;
70
	}
71

    
72
	public void setMdId(final String mdId) {
73
		this.mdId = mdId;
74
	}
75

    
76
	public String getDatasourceId() {
77
		return this.datasourceId;
78
	}
79

    
80
	public void setDatasourceId(final String datasourceId) {
81
		this.datasourceId = datasourceId;
82
	}
83

    
84
	public String getDatasourceInterface() {
85
		return this.datasourceInterface;
86
	}
87

    
88
	public void setDatasourceInterface(final String datasourceInterface) {
89
		this.datasourceInterface = datasourceInterface;
90
	}
91

    
92
	public String getExtraFieldForTotal() {
93
		return this.extraFieldForTotal;
94
	}
95

    
96
	public void setExtraFieldForTotal(final String extraFieldForTotal) {
97
		this.extraFieldForTotal = extraFieldForTotal;
98
	}
99

    
100
	public String getExtraFieldForDate() {
101
		return this.extraFieldForDate;
102
	}
103

    
104
	public void setExtraFieldForDate(final String extraFieldForDate) {
105
		this.extraFieldForDate = extraFieldForDate;
106
	}
107

    
108
	public String getExtraFieldForMdId() {
109
		return this.extraFieldForMdId;
110
	}
111

    
112
	public void setExtraFieldForMdId(final String extraFieldForMdId) {
113
		this.extraFieldForMdId = extraFieldForMdId;
114
	}
115

    
116
}
(1-1/3)