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

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

    
16
import eu.dnetlib.enabling.datasources.rmi.DatasourceManagerService;
17
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
18
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
19
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
20

    
21
public class ObjectStoreToApiExtraFieldJobNode extends SimpleJobNode {
22

    
23
	private String objId;
24
	private String datasourceId;
25
	private String datasourceInterface;
26
	private String extraFieldForTotal;
27
	private String extraFieldForDate;
28
	private String extraFieldForObjId;
29

    
30
	@Resource
31
	private UniqueServiceLocator serviceLocator;
32

    
33
	@Override
34
	protected String execute(final NodeToken token) throws Exception {
35
		final String xq = "for $x in collection('/db/DRIVER/ObjectStoreDSResources/ObjectStoreDSResourceType') " + "where $x//RESOURCE_IDENTIFIER/@value='"
36
				+ objId + "' " + "return concat($x//COUNT_STORE, ' @=@ ', $x//LAST_STORAGE_DATE)";
37

    
38
		final String s = serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xq);
39

    
40
		final String[] arr = s.split(" @=@ ");
41

    
42
		final Map<String, String> map = getCurrentExtraFields(datasourceId, datasourceInterface);
43
		map.put(extraFieldForTotal, arr[0].trim());
44
		map.put(extraFieldForDate, arr[1].trim());
45
		map.put(extraFieldForObjId, objId);
46

    
47
		serviceLocator.getService(DatasourceManagerService.class).bulkUpdateApiExtraFields(datasourceId, datasourceInterface, map);
48

    
49
		return Arc.DEFAULT_ARC;
50
	}
51

    
52
	private Map<String, String> getCurrentExtraFields(final String repoId, final String ifaceId) throws Exception {
53
		final Map<String, String> res = Maps.newHashMap();
54

    
55
		final String profile = serviceLocator.getService(ISLookUpService.class).getResourceProfile(repoId);
56

    
57
		final SAXReader reader = new SAXReader();
58
		final Document doc = reader.read(new StringReader(profile));
59

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

    
67
		return res;
68
	}
69

    
70
	public String getDatasourceId() {
71
		return datasourceId;
72
	}
73

    
74
	public void setDatasourceId(final String datasourceId) {
75
		this.datasourceId = datasourceId;
76
	}
77

    
78
	public String getDatasourceInterface() {
79
		return datasourceInterface;
80
	}
81

    
82
	public void setDatasourceInterface(final String datasourceInterface) {
83
		this.datasourceInterface = datasourceInterface;
84
	}
85

    
86
	public String getExtraFieldForTotal() {
87
		return extraFieldForTotal;
88
	}
89

    
90
	public void setExtraFieldForTotal(final String extraFieldForTotal) {
91
		this.extraFieldForTotal = extraFieldForTotal;
92
	}
93

    
94
	public String getExtraFieldForDate() {
95
		return extraFieldForDate;
96
	}
97

    
98
	public void setExtraFieldForDate(final String extraFieldForDate) {
99
		this.extraFieldForDate = extraFieldForDate;
100
	}
101

    
102
	/**
103
	 * @return the objId
104
	 */
105
	public String getObjId() {
106
		return objId;
107
	}
108

    
109
	/**
110
	 * @param objId
111
	 *            the objId to set
112
	 */
113
	public void setObjId(final String objId) {
114
		this.objId = objId;
115
	}
116

    
117
	/**
118
	 * @return the extraFieldForObjId
119
	 */
120
	public String getExtraFieldForObjId() {
121
		return extraFieldForObjId;
122
	}
123

    
124
	/**
125
	 * @param extraFieldForObjId
126
	 *            the extraFieldForObjId to set
127
	 */
128
	public void setExtraFieldForObjId(final String extraFieldForObjId) {
129
		this.extraFieldForObjId = extraFieldForObjId;
130
	}
131

    
132
}
(2-2/4)