Project

General

Profile

1 31886 sandro.lab
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 32639 michele.ar
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
20 31886 sandro.lab
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
21
22
public class ObjectStoreToApiExtraFieldJobNode extends SimpleJobNode {
23
24
	private String objId;
25
	private String datasourceId;
26
	private String datasourceInterface;
27
	private String extraFieldForTotal;
28
	private String extraFieldForDate;
29
	private String extraFieldForObjId;
30
31 32639 michele.ar
	@Resource
32
	private UniqueServiceLocator serviceLocator;
33 31886 sandro.lab
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/ObjectStoreDSResources/ObjectStoreDSResourceType') " + "where $x//RESOURCE_IDENTIFIER/@value='"
39
				+ objId + "' " + "return concat($x//COUNT_STORE, ' @=@ ', $x//LAST_STORAGE_DATE)";
40
41 32639 michele.ar
		final String s = serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xq);
42 31886 sandro.lab
43
		final String[] arr = s.split(" @=@ ");
44
45
		final Map<String, String> map = getCurrentExtraFields(datasourceId, datasourceInterface);
46
		map.put(extraFieldForTotal, arr[0].trim());
47
		map.put(extraFieldForDate, arr[1].trim());
48
		map.put(extraFieldForObjId, objId);
49
50
		datasourceUpdater.updateApiExtraFields(datasourceId, datasourceInterface, map);
51
52
		return Arc.DEFAULT_ARC;
53
	}
54
55
	private Map<String, String> getCurrentExtraFields(final String repoId, final String ifaceId) throws Exception {
56
		final Map<String, String> res = Maps.newHashMap();
57
58 32639 michele.ar
		final String profile = serviceLocator.getService(ISLookUpService.class).getResourceProfile(repoId);
59 31886 sandro.lab
60
		final SAXReader reader = new SAXReader();
61
		final Document doc = reader.read(new StringReader(profile));
62
63
		final Node ifcNode = doc.selectSingleNode("//INTERFACE[@id='" + ifaceId + "']");
64
		if (ifcNode != null) {
65
			for (Object o : ifcNode.selectNodes("./INTERFACE_EXTRA_FIELD")) {
66
				res.put(((Node) o).valueOf("@name"), ((Node) o).getText());
67
			}
68
		}
69
70
		return res;
71
	}
72
73
	public String getDatasourceId() {
74
		return datasourceId;
75
	}
76
77
	public void setDatasourceId(final String datasourceId) {
78
		this.datasourceId = datasourceId;
79
	}
80
81
	public String getDatasourceInterface() {
82
		return datasourceInterface;
83
	}
84
85
	public void setDatasourceInterface(final String datasourceInterface) {
86
		this.datasourceInterface = datasourceInterface;
87
	}
88
89
	public String getExtraFieldForTotal() {
90
		return extraFieldForTotal;
91
	}
92
93
	public void setExtraFieldForTotal(final String extraFieldForTotal) {
94
		this.extraFieldForTotal = extraFieldForTotal;
95
	}
96
97
	public String getExtraFieldForDate() {
98
		return extraFieldForDate;
99
	}
100
101
	public void setExtraFieldForDate(final String extraFieldForDate) {
102
		this.extraFieldForDate = extraFieldForDate;
103
	}
104
105
	public DatasourceUpdater getDatasourceUpdater() {
106
		return datasourceUpdater;
107
	}
108
109
	@Required
110
	public void setDatasourceUpdater(final DatasourceUpdater datasourceUpdater) {
111
		this.datasourceUpdater = datasourceUpdater;
112
	}
113
114
	/**
115
	 * @return the objId
116
	 */
117
	public String getObjId() {
118
		return objId;
119
	}
120
121
	/**
122
	 * @param objId
123
	 *            the objId to set
124
	 */
125
	public void setObjId(final String objId) {
126
		this.objId = objId;
127
	}
128
129
	/**
130
	 * @return the extraFieldForObjId
131
	 */
132
	public String getExtraFieldForObjId() {
133
		return extraFieldForObjId;
134
	}
135
136
	/**
137
	 * @param extraFieldForObjId
138
	 *            the extraFieldForObjId to set
139
	 */
140
	public void setExtraFieldForObjId(final String extraFieldForObjId) {
141
		this.extraFieldForObjId = extraFieldForObjId;
142
	}
143
144
}