Project

General

Profile

1 26600 sandro.lab
package eu.dnetlib.msro.workflows.nodes.db;
2
3 29933 michele.ar
import java.io.IOException;
4
5 26600 sandro.lab
import javax.xml.ws.wsaddressing.W3CEndpointReference;
6
7
import org.apache.commons.io.IOUtils;
8 29933 michele.ar
import org.apache.commons.lang.StringUtils;
9 26600 sandro.lab
import org.springframework.beans.factory.annotation.Required;
10
11
import com.googlecode.sarasvati.Arc;
12
import com.googlecode.sarasvati.NodeToken;
13
14
import eu.dnetlib.enabling.database.rmi.DatabaseService;
15
import eu.dnetlib.enabling.tools.ServiceLocator;
16
import eu.dnetlib.msro.workflows.nodes.AsyncJobNode;
17
18
public class QueryDbJobNode extends AsyncJobNode {
19
20
	private String db;
21
	private String dbParam;
22
	private String dbProperty;
23
24
	private String sql;
25 29933 michele.ar
	private String sqlForSize;
26 26600 sandro.lab
	private String xslt;
27
	private String outputEprParam;
28
29
	private ServiceLocator<DatabaseService> dbServiceLocator;
30
31
	@Override
32
	protected String execute(final NodeToken token) throws Exception {
33 29933 michele.ar
		final String sqlText = fetchSqlAsText(sql);
34
35 26600 sandro.lab
		W3CEndpointReference epr = null;
36
37 29933 michele.ar
		if (StringUtils.isNotBlank(xslt)) {
38 26600 sandro.lab
			final String xsltText = IOUtils.toString(getClass().getResourceAsStream(xslt));
39 29933 michele.ar
40
			if (StringUtils.isBlank(sqlForSize)) {
41
				epr = dbServiceLocator.getService().xsltSearchSQL(findDb(token), sqlText, xsltText);
42
			} else {
43
				epr = dbServiceLocator.getService().alternativeXsltSearchSQL(findDb(token), sqlText, fetchSqlAsText(sqlForSize),xsltText);
44
			}
45 26600 sandro.lab
		} else {
46 29933 michele.ar
			if (StringUtils.isBlank(sqlForSize)) {
47
				epr = dbServiceLocator.getService().searchSQL(findDb(token), sqlText);
48
			} else {
49
				epr = dbServiceLocator.getService().alternativeSearchSQL(findDb(token), sqlText, fetchSqlAsText(sqlForSize));
50
			}
51 26600 sandro.lab
		}
52
53
		token.getEnv().setAttribute(outputEprParam, epr.toString());
54
55
		return Arc.DEFAULT_ARC;
56
	}
57
58 29933 michele.ar
59
	private String fetchSqlAsText(final String path) throws IOException {
60
		return IOUtils.toString(getClass().getResourceAsStream(path));
61
	}
62
63 26600 sandro.lab
	private String findDb(final NodeToken token) {
64
		if (dbParam != null && !dbParam.isEmpty()) {
65
			return token.getEnv().getAttribute(dbParam);
66
		} else if (dbProperty != null && !dbProperty.isEmpty()) {
67
			return getPropertyFetcher().getProperty(dbProperty);
68
		} else {
69
			return db;
70
		}
71
	}
72
73
	public String getDb() {
74
		return db;
75
	}
76
77
	public void setDb(final String db) {
78
		this.db = db;
79
	}
80
81
	public String getDbParam() {
82
		return dbParam;
83
	}
84
85
	public void setDbParam(final String dbParam) {
86
		this.dbParam = dbParam;
87
	}
88
89
	public String getSql() {
90
		return sql;
91
	}
92
93
	public void setSql(final String sql) {
94
		this.sql = sql;
95
	}
96
97
	public String getXslt() {
98
		return xslt;
99
	}
100
101
	public void setXslt(final String xslt) {
102
		this.xslt = xslt;
103
	}
104
105
	public String getOutputEprParam() {
106
		return outputEprParam;
107
	}
108
109
	public void setOutputEprParam(final String outputEprParam) {
110
		this.outputEprParam = outputEprParam;
111
	}
112
113
	public ServiceLocator<DatabaseService> getDbServiceLocator() {
114
		return dbServiceLocator;
115
	}
116
117
	@Required
118
	public void setDbServiceLocator(final ServiceLocator<DatabaseService> dbServiceLocator) {
119
		this.dbServiceLocator = dbServiceLocator;
120
	}
121
122
	public String getDbProperty() {
123
		return dbProperty;
124
	}
125
126
	public void setDbProperty(final String dbProperty) {
127
		this.dbProperty = dbProperty;
128
	}
129
130 29933 michele.ar
	public String getSqlForSize() {
131
		return sqlForSize;
132
	}
133
134
	public void setSqlForSize(String sqlForSize) {
135
		this.sqlForSize = sqlForSize;
136
	}
137
138 26600 sandro.lab
}