Project

General

Profile

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

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

    
6
import javax.annotation.Resource;
7

    
8
import org.dom4j.Document;
9
import org.dom4j.Node;
10
import org.dom4j.io.SAXReader;
11
import org.springframework.beans.factory.annotation.Required;
12

    
13
import com.google.common.collect.Maps;
14
import com.googlecode.sarasvati.Arc;
15
import com.googlecode.sarasvati.NodeToken;
16

    
17
import eu.dnetlib.datasource.common.utils.DatasourceUpdater;
18
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
19
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
20
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
21

    
22
public class MDStoreToApiExtraFieldJobNode extends SimpleJobNode {
23

    
24
	private String mdId;
25
	private String datasourceId;
26
	private String datasourceInterface;
27
	private String extraFieldForTotal;
28
	private String extraFieldForDate;
29
	private String extraFieldForMdId;
30

    
31
	@Resource
32
	private UniqueServiceLocator serviceLocator;
33

    
34
	private DatasourceUpdater datasourceUpdater;
35

    
36
	@Override
37
	protected String execute(final NodeToken token) throws Exception {
38
		final String xq = "for $x in collection('/db/DRIVER/MDStoreDSResources/MDStoreDSResourceType') " +
39
				"where $x//RESOURCE_IDENTIFIER/@value='" + mdId + "' " +
40
				"return concat($x//NUMBER_OF_RECORDS, ' @=@ ', $x//LAST_STORAGE_DATE)";
41

    
42
		final String s = serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xq);
43

    
44
		final String[] arr = s.split(" @=@ ");
45

    
46
		final Map<String, String> map = getCurrentExtraFields(datasourceId, datasourceInterface);
47
		map.put(extraFieldForTotal, arr[0].trim());
48
		map.put(extraFieldForDate, arr[1].trim());
49
		map.put(extraFieldForMdId, mdId);
50

    
51
		datasourceUpdater.updateApiExtraFields(datasourceId, datasourceInterface, map);
52

    
53
		return Arc.DEFAULT_ARC;
54
	}
55

    
56
	private Map<String, String> getCurrentExtraFields(final String repoId, final String ifaceId) throws Exception {
57
		final Map<String, String> res = Maps.newHashMap();
58

    
59
		final String profile = serviceLocator.getService(ISLookUpService.class).getResourceProfile(repoId);
60

    
61
		final SAXReader reader = new SAXReader();
62
		final Document doc = reader.read(new StringReader(profile));
63

    
64
		final Node ifcNode = doc.selectSingleNode("//INTERFACE[@id='" + ifaceId + "']");
65
		if (ifcNode != null) {
66
			for (Object o : ifcNode.selectNodes("./INTERFACE_EXTRA_FIELD")) {
67
				res.put(((Node) o).valueOf("@name"), ((Node) o).getText());
68
			}
69
		}
70

    
71
		return res;
72
	}
73

    
74
	public String getMdId() {
75
		return mdId;
76
	}
77

    
78
	public void setMdId(final String mdId) {
79
		this.mdId = mdId;
80
	}
81

    
82
	public String getDatasourceId() {
83
		return datasourceId;
84
	}
85

    
86
	public void setDatasourceId(final String datasourceId) {
87
		this.datasourceId = datasourceId;
88
	}
89

    
90
	public String getDatasourceInterface() {
91
		return datasourceInterface;
92
	}
93

    
94
	public void setDatasourceInterface(final String datasourceInterface) {
95
		this.datasourceInterface = datasourceInterface;
96
	}
97

    
98
	public String getExtraFieldForTotal() {
99
		return extraFieldForTotal;
100
	}
101

    
102
	public void setExtraFieldForTotal(final String extraFieldForTotal) {
103
		this.extraFieldForTotal = extraFieldForTotal;
104
	}
105

    
106
	public String getExtraFieldForDate() {
107
		return extraFieldForDate;
108
	}
109

    
110
	public void setExtraFieldForDate(final String extraFieldForDate) {
111
		this.extraFieldForDate = extraFieldForDate;
112
	}
113

    
114
	public String getExtraFieldForMdId() {
115
		return extraFieldForMdId;
116
	}
117

    
118
	public void setExtraFieldForMdId(final String extraFieldForMdId) {
119
		this.extraFieldForMdId = extraFieldForMdId;
120
	}
121

    
122
	public DatasourceUpdater getDatasourceUpdater() {
123
		return datasourceUpdater;
124
	}
125

    
126
	@Required
127
	public void setDatasourceUpdater(final DatasourceUpdater datasourceUpdater) {
128
		this.datasourceUpdater = datasourceUpdater;
129
	}
130

    
131
}
(1-1/4)