Project

General

Profile

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

    
3
import java.io.IOException;
4

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

    
7
import org.antlr.stringtemplate.StringTemplate;
8
import org.apache.commons.io.IOUtils;
9
import org.springframework.beans.factory.annotation.Required;
10
import org.springframework.core.io.Resource;
11

    
12
import com.googlecode.sarasvati.Arc;
13
import com.googlecode.sarasvati.NodeToken;
14

    
15
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpDocumentNotFoundException;
16
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
17
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
18
import eu.dnetlib.enabling.resultset.XSLTMappedResultSetFactory;
19
import eu.dnetlib.enabling.resultset.client.utils.EPRUtils;
20
import eu.dnetlib.enabling.tools.ServiceLocator;
21
import eu.dnetlib.msro.rmi.MSROException;
22
import eu.dnetlib.msro.workflows.nodes.SimpleJobNode;
23

    
24
public class MdBuilderJobNode extends SimpleJobNode {
25

    
26
	@javax.annotation.Resource(name = "mdBuilderTemplateXslt")
27
	private Resource mdBuilderTemplateXslt;
28

    
29
	private String inputEprParam;
30
	private String outputEprParam;
31
	private String datasourceId;
32
	private String datasourceInterface;
33

    
34
	private XSLTMappedResultSetFactory xsltMappedResultSetFactory;
35

    
36
	@javax.annotation.Resource(name = "lookupLocator")
37
	private ServiceLocator<ISLookUpService> lookupLocator;
38

    
39
	@Override
40
	protected String execute(final NodeToken token) throws MSROException {
41
		final String inputEpr = token.getEnv().getAttribute(inputEprParam);
42
		
43
		if ((inputEpr == null) || inputEpr.isEmpty()) throw new MSROException("InputEprParam (" + inputEprParam + ") not found in ENV");
44
		
45
		String xQuery = "for $x in collection('/db/DRIVER/RepositoryServiceResources/RepositoryServiceResourceType') "
46
				+ "return $x//INTERFACE[@id='{interfaceId}']/INTERFACE_EXTRA_FIELD[@name='metadata_identifier_path']/string()";
47
		xQuery = xQuery.replace("{interfaceId}", datasourceInterface);
48
		try {
49
			final StringTemplate st = new StringTemplate(IOUtils.toString(getMdBuilderTemplateXslt().getInputStream()));
50
			st.setAttribute("xpath", lookupLocator.getService().getResourceProfileByQuery(xQuery));
51
			st.setAttribute("datasourceId", datasourceId);
52
			if (token.getEnv().hasAttribute("namespacePrefix")) {
53
				st.setAttribute("namespacePrefix", token.getEnv().getAttribute("namespacePrefix"));
54
			} else {
55
				st.setAttribute("namespacePrefix", datasourceId);
56
			}
57
			final W3CEndpointReference epr = xsltMappedResultSetFactory.createMappedResultSet((new EPRUtils()).getEpr(inputEpr), st.toString());
58
	
59
			token.getEnv().setAttribute(outputEprParam, epr.toString());
60
	
61
			return Arc.DEFAULT_ARC;
62
		} catch (ISLookUpDocumentNotFoundException e) {
63
			throw new MSROException("Missing metadata_identifier_path extra field for ds: " + datasourceId, e);
64
		} catch (ISLookUpException e) {
65
			throw new MSROException("Error searching metadata_identifier_path extra field for ds: " + datasourceId, e);
66
		} catch (IOException e) {
67
			throw new MSROException("Error parsing template: " + getMdBuilderTemplateXslt().getFilename(), e);
68
		}
69
	}
70

    
71
	public String getInputEprParam() {
72
		return inputEprParam;
73
	}
74

    
75
	public void setInputEprParam(final String inputEprParam) {
76
		this.inputEprParam = inputEprParam;
77
	}
78

    
79
	public String getOutputEprParam() {
80
		return outputEprParam;
81
	}
82

    
83
	public void setOutputEprParam(final String outputEprParam) {
84
		this.outputEprParam = outputEprParam;
85
	}
86

    
87
	public XSLTMappedResultSetFactory getXsltMappedResultSetFactory() {
88
		return xsltMappedResultSetFactory;
89
	}
90

    
91
	public String getDatasourceId() {
92
		return datasourceId;
93
	}
94

    
95
	public void setDatasourceId(final String datasourceId) {
96
		this.datasourceId = datasourceId;
97
	}
98

    
99
	public String getDatasourceInterface() {
100
		return datasourceInterface;
101
	}
102

    
103
	public void setDatasourceInterface(final String datasourceInterface) {
104
		this.datasourceInterface = datasourceInterface;
105
	}
106

    
107
	@Required
108
	public void setXsltMappedResultSetFactory(final XSLTMappedResultSetFactory xsltMappedResultSetFactory) {
109
		this.xsltMappedResultSetFactory = xsltMappedResultSetFactory;
110
	}
111

    
112
	public Resource getMdBuilderTemplateXslt() {
113
		return mdBuilderTemplateXslt;
114
	}
115

    
116
	public void setMdBuilderTemplateXslt(final Resource mdBuilderTemplateXslt) {
117
		this.mdBuilderTemplateXslt = mdBuilderTemplateXslt;
118
	}
119

    
120
}
(5-5/6)