Project

General

Profile

1 30942 michele.ar
package eu.dnetlib.msro.workflows.nodes.info;
2 30824 michele.ar
3
import java.io.StringReader;
4 41783 michele.ar
import java.util.HashMap;
5 30824 michele.ar
import java.util.Map;
6 41783 michele.ar
7 32639 michele.ar
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
8 40094 michele.ar
import eu.dnetlib.msro.workflows.graph.Arc;
9 30824 michele.ar
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
10 40099 michele.ar
import eu.dnetlib.msro.workflows.procs.Env;
11 41783 michele.ar
import eu.dnetlib.rmi.datasource.DatasourceManagerService;
12
import eu.dnetlib.rmi.enabling.ISLookUpService;
13 42621 sandro.lab
import org.dom4j.Document;
14
import org.dom4j.Node;
15
import org.dom4j.io.SAXReader;
16
import org.springframework.beans.factory.annotation.Autowired;
17 30824 michele.ar
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 30866 michele.ar
	private String extraFieldForMdId;
26 30824 michele.ar
27 42621 sandro.lab
	@Autowired
28 32639 michele.ar
	private UniqueServiceLocator serviceLocator;
29
30 30824 michele.ar
	@Override
31 40094 michele.ar
	protected String execute(final Env env) throws Exception {
32 30824 michele.ar
		final String xq = "for $x in collection('/db/DRIVER/MDStoreDSResources/MDStoreDSResourceType') " +
33 41783 michele.ar
				"where $x//RESOURCE_IDENTIFIER/@value='" + this.mdId + "' " +
34 30824 michele.ar
				"return concat($x//NUMBER_OF_RECORDS, ' @=@ ', $x//LAST_STORAGE_DATE)";
35
36 41783 michele.ar
		final String s = this.serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xq);
37 32639 michele.ar
38 30824 michele.ar
		final String[] arr = s.split(" @=@ ");
39
40 41783 michele.ar
		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 32639 michele.ar
45 41783 michele.ar
		this.serviceLocator.getService(DatasourceManagerService.class).bulkUpdateApiExtraFields(this.datasourceId, this.datasourceInterface, map);
46 32639 michele.ar
47 30824 michele.ar
		return Arc.DEFAULT_ARC;
48
	}
49 32639 michele.ar
50 30824 michele.ar
	private Map<String, String> getCurrentExtraFields(final String repoId, final String ifaceId) throws Exception {
51 41783 michele.ar
		final Map<String, String> res = new HashMap<>();
52 32639 michele.ar
53 41783 michele.ar
		final String profile = this.serviceLocator.getService(ISLookUpService.class).getResourceProfile(repoId);
54 32639 michele.ar
55 30824 michele.ar
		final SAXReader reader = new SAXReader();
56
		final Document doc = reader.read(new StringReader(profile));
57 32639 michele.ar
58 30824 michele.ar
		final Node ifcNode = doc.selectSingleNode("//INTERFACE[@id='" + ifaceId + "']");
59
		if (ifcNode != null) {
60 41783 michele.ar
			for (final Object o : ifcNode.selectNodes("./INTERFACE_EXTRA_FIELD")) {
61 30824 michele.ar
				res.put(((Node) o).valueOf("@name"), ((Node) o).getText());
62
			}
63
		}
64 32639 michele.ar
65 30824 michele.ar
		return res;
66
	}
67
68
	public String getMdId() {
69 41783 michele.ar
		return this.mdId;
70 30824 michele.ar
	}
71
72 32639 michele.ar
	public void setMdId(final String mdId) {
73 30824 michele.ar
		this.mdId = mdId;
74
	}
75
76
	public String getDatasourceId() {
77 41783 michele.ar
		return this.datasourceId;
78 30824 michele.ar
	}
79
80 32639 michele.ar
	public void setDatasourceId(final String datasourceId) {
81 30824 michele.ar
		this.datasourceId = datasourceId;
82
	}
83
84
	public String getDatasourceInterface() {
85 41783 michele.ar
		return this.datasourceInterface;
86 30824 michele.ar
	}
87
88 32639 michele.ar
	public void setDatasourceInterface(final String datasourceInterface) {
89 30824 michele.ar
		this.datasourceInterface = datasourceInterface;
90
	}
91
92
	public String getExtraFieldForTotal() {
93 41783 michele.ar
		return this.extraFieldForTotal;
94 30824 michele.ar
	}
95
96 32639 michele.ar
	public void setExtraFieldForTotal(final String extraFieldForTotal) {
97 30824 michele.ar
		this.extraFieldForTotal = extraFieldForTotal;
98
	}
99
100
	public String getExtraFieldForDate() {
101 41783 michele.ar
		return this.extraFieldForDate;
102 30824 michele.ar
	}
103
104 32639 michele.ar
	public void setExtraFieldForDate(final String extraFieldForDate) {
105 30824 michele.ar
		this.extraFieldForDate = extraFieldForDate;
106
	}
107
108 30866 michele.ar
	public String getExtraFieldForMdId() {
109 41783 michele.ar
		return this.extraFieldForMdId;
110 30866 michele.ar
	}
111
112 32639 michele.ar
	public void setExtraFieldForMdId(final String extraFieldForMdId) {
113 30866 michele.ar
		this.extraFieldForMdId = extraFieldForMdId;
114
	}
115 32639 michele.ar
116 30824 michele.ar
}