Project

General

Profile

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

    
3
import java.io.IOException;
4

    
5
import javax.xml.ws.wsaddressing.W3CEndpointReference;
6

    
7
import org.apache.commons.io.IOUtils;
8
import org.apache.commons.lang.StringUtils;
9
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
	private String sqlForSize;
26
	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
		final String sqlText = fetchSqlAsText(sql);
34
				
35
		W3CEndpointReference epr = null;
36

    
37
		if (StringUtils.isNotBlank(xslt)) {
38
			final String xsltText = IOUtils.toString(getClass().getResourceAsStream(xslt));
39
			
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
		} else {
46
			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
		}
52

    
53
		token.getEnv().setAttribute(outputEprParam, epr.toString());
54

    
55
		return Arc.DEFAULT_ARC;
56
	}
57

    
58
	
59
	private String fetchSqlAsText(final String path) throws IOException {
60
		return IOUtils.toString(getClass().getResourceAsStream(path));
61
	}
62
	
63
	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
	public String getSqlForSize() {
131
		return sqlForSize;
132
	}
133

    
134
	public void setSqlForSize(String sqlForSize) {
135
		this.sqlForSize = sqlForSize;
136
	}
137

    
138
}
(2-2/3)