Project

General

Profile

« Previous | Next » 

Revision 37856

[maven-release-plugin] copy for tag cnr-openaire-exporter-5.0.3

View differences:

modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/deploy.info
1
{"type_source": "SVN", 
2
"goal": "package -U source:jar", 
3
"url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet40/modules/cnr-openaire-exporter/trunk/", 
4
"deploy_repository": "dnet4-snapshots", 
5
"version": "4", 
6
"mail": "alessia.bardi@isti.cnr.it", 
7
"deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-snapshots", "name": "cnr-openaire-exporter"}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/java/eu/dnetlib/openaire/exporter/DSpaceTest.java
1
package eu.dnetlib.openaire.exporter;
2

  
3
import java.io.IOException;
4
import java.io.StringWriter;
5

  
6
import org.apache.commons.io.IOUtils;
7
import org.junit.Before;
8
import org.junit.Test;
9
import org.springframework.core.io.ClassPathResource;
10
import org.springframework.core.io.Resource;
11

  
12
import eu.dnetlib.miscutils.functional.xml.ApplyXslt;
13

  
14
public class DSpaceTest {
15

  
16
	private Resource wtProject = new ClassPathResource("eu/dnetlib/openaire/exporter/WT-project.xml");
17
	private Resource fctProject = new ClassPathResource("eu/dnetlib/openaire/exporter/FCT-project.xml");
18
	private Resource fp7Project = new ClassPathResource("eu/dnetlib/openaire/exporter/FP7-project.xml");
19

  
20
	private Resource dspaceXslt;
21

  
22
	@Before
23
	public void setUp() throws Exception {
24
		dspaceXslt = new ClassPathResource("xslt/projects_dspace.xslt", getClass());
25
	}
26

  
27
	@Test
28
	public void testWTdspace() throws IOException {
29
		ApplyXslt applyXslt = new ApplyXslt(dspaceXslt);
30
		StringWriter w = new StringWriter();
31
		IOUtils.copy(wtProject.getInputStream(), w);
32
		String result = applyXslt.evaluate(w.toString());
33
		System.out.println("<?xml version='1.0' encoding='UTF-8'?>\n\n" + "<form-value-pairs>\n"
34
				+ "	<value-pairs value-pairs-name='WTprojects' dc-term='relation'>\n");
35
		System.out.println(result);
36
		System.out.println("	</value-pairs>\n" + "</form-value-pairs>\n");
37
	}
38

  
39
	@Test
40
	public void testFCTdspace() throws IOException {
41
		ApplyXslt applyXslt = new ApplyXslt(dspaceXslt);
42
		StringWriter w = new StringWriter();
43
		IOUtils.copy(fctProject.getInputStream(), w);
44
		String result = applyXslt.evaluate(w.toString());
45
		System.out.println(result);
46
	}
47

  
48
	@Test
49
	public void testFP7dspace() throws IOException {
50
		ApplyXslt applyXslt = new ApplyXslt(dspaceXslt);
51
		StringWriter w = new StringWriter();
52
		IOUtils.copy(fp7Project.getInputStream(), w);
53
		String result = applyXslt.evaluate(w.toString());
54
		System.out.println(result);
55
	}
56

  
57
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/java/eu/dnetlib/openaire/exporter/EPrintsTest.java
1
package eu.dnetlib.openaire.exporter;
2

  
3
import java.io.IOException;
4
import java.io.StringWriter;
5

  
6
import org.apache.commons.io.IOUtils;
7
import org.junit.Before;
8
import org.junit.Test;
9
import org.springframework.core.io.ClassPathResource;
10
import org.springframework.core.io.Resource;
11

  
12
import eu.dnetlib.miscutils.functional.xml.ApplyXslt;
13

  
14
public class EPrintsTest {
15

  
16
	private Resource wtProject = new ClassPathResource("eu/dnetlib/openaire/exporter/WT-project.xml");
17
	private Resource fctProject = new ClassPathResource("eu/dnetlib/openaire/exporter/FCT-project.xml");
18
	private Resource fp7Project = new ClassPathResource("eu/dnetlib/openaire/exporter/FP7-project.xml");
19

  
20
	private Resource ePrintsXslt;
21

  
22
	@Before
23
	public void setUp() throws Exception {
24
		ePrintsXslt = new ClassPathResource("xslt/projects_eprints.xslt", getClass());
25
	}
26

  
27
	@Test
28
	public void testWTePrints() throws IOException {
29
		ApplyXslt applyXslt = new ApplyXslt(ePrintsXslt);
30
		StringWriter w = new StringWriter();
31
		IOUtils.copy(wtProject.getInputStream(), w);
32
		String res = applyXslt.evaluate(w.toString());
33
		assertTab(res);
34
	}
35

  
36
	@Test
37
	public void testFCTePrints() throws IOException {
38
		ApplyXslt applyXslt = new ApplyXslt(ePrintsXslt);
39
		StringWriter w = new StringWriter();
40
		IOUtils.copy(fctProject.getInputStream(), w);
41
		String res = applyXslt.evaluate(w.toString());
42
		assertTab(res);
43
	}
44

  
45
	@Test
46
	public void testFP7ePrints() throws IOException {
47
		ApplyXslt applyXslt = new ApplyXslt(ePrintsXslt);
48
		StringWriter w = new StringWriter();
49
		IOUtils.copy(fp7Project.getInputStream(), w);
50
		String res = applyXslt.evaluate(w.toString());
51
		assertTab(res);
52
	}
53

  
54
	private void assertTab(final String str) {
55
		System.out.println(str);
56
		String[] splitOnTab = str.split("\t");
57
		org.junit.Assert.assertTrue(splitOnTab.length > 1);
58
		System.out.println(splitOnTab[0]);
59
		System.out.println("According to the Java split function, now there is a tab, followed by:");
60
		System.out.println(splitOnTab[1]);
61
	}
62
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/java/eu/dnetlib/openaire/exporter/ProjectsControllerTest.java
1
package eu.dnetlib.openaire.exporter;
2

  
3
import static org.junit.Assert.assertEquals;
4

  
5
import java.io.IOException;
6

  
7
import org.antlr.stringtemplate.StringTemplate;
8
import org.apache.commons.io.IOUtils;
9
import org.junit.Before;
10
import org.junit.Test;
11
import org.springframework.core.io.ClassPathResource;
12
import org.springframework.core.io.Resource;
13

  
14
public class ProjectsControllerTest {
15

  
16
	private String queryTemplate = "/eu/dnetlib/openaire/exporter/sql/projects_fundings.sql.st";
17
	private Resource expectedQueryTemplate = new ClassPathResource("/eu/dnetlib/openaire/exporter/sql/expected_projects_fundings.sql.st");
18

  
19
	private ProjectsController controller;
20
	private ProjectQueryParams params;
21

  
22
	@Before
23
	public void setup() {
24
		controller = new ProjectsController();
25
		Resource template = new ClassPathResource(queryTemplate);
26

  
27
		controller.setProjectsFundingQueryTemplate(template);
28
		params = new ProjectQueryParams();
29
	}
30

  
31
	@Test
32
	public void testObtainFP7Query() throws IllegalArgumentException, IOException {
33
		params.setFundingProgramme("FP7");
34
		params.setFundingPath(null);
35
		String res = controller.obtainQuery(params);
36
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
37
		st.setAttribute("fundingprefix", "ec__________::EC::FP7::");
38
		System.out.println(res);
39
		System.out.println(st);
40
		assertEquals(st.toString(), res);
41
	}
42

  
43
	@Test
44
	public void testObtainFP7QuerySP1() throws IllegalArgumentException, IOException {
45
		params.setFundingProgramme("FP7");
46
		params.setFundingPath("SP1");
47
		String res = controller.obtainQuery(params);
48
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
49
		st.setAttribute("fundingprefix", "ec__________::EC::FP7::SP1");
50
		System.out.println(res);
51
		assertEquals(st.toString(), res);
52
	}
53

  
54
	@Test
55
	public void testObtainFP7QueryHealth() throws IllegalArgumentException, IOException {
56
		params.setFundingProgramme("FP7");
57
		params.setFundingPath("SP1::HEALTH");
58
		String res = controller.obtainQuery(params);
59
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
60
		st.setAttribute("fundingprefix", "ec__________::EC::FP7::SP1::HEALTH");
61
		System.out.println(res);
62
		assertEquals(st.toString(), res);
63
	}
64

  
65
	@Test
66
	public void testObtainFP7QueryHealth2() throws IllegalArgumentException, IOException {
67
		params.setFundingProgramme("FP7");
68
		params.setFundingPath("%::HEALTH");
69
		String res = controller.obtainQuery(params);
70
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
71
		st.setAttribute("fundingprefix", "ec__________::EC::FP7::%::HEALTH");
72
		System.out.println(res);
73
		assertEquals(st.toString(), res);
74
	}
75

  
76
	@Test
77
	public void testObtainWellcomeTrustQuery() throws IllegalArgumentException, IOException {
78
		params.setFundingProgramme("WT");
79
		params.setFundingPath(null);
80
		String res = controller.obtainQuery(params);
81
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
82
		st.setAttribute("fundingprefix", "wt__________::WT::");
83
		System.out.println(res);
84
		assertEquals(st.toString(), res);
85
	}
86

  
87
	@Test
88
	public void testObtainFCTQuery() throws IllegalArgumentException, IOException {
89
		params.setFundingProgramme("FCT");
90
		params.setFundingPath(null);
91
		String res = controller.obtainQuery(params);
92
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
93
		st.setAttribute("fundingprefix", "fct_________::FCT::");
94
		System.out.println(res);
95
		assertEquals(st.toString() + "", res);
96
	}
97

  
98
	@Test
99
	public void testQueryWithDateParams() throws IllegalArgumentException, IOException {
100
		params.setFundingProgramme("WT");
101
		params.setFundingPath(null);
102
		params.setStartFrom("2015");
103
		String res = controller.obtainQuery(params);
104
		System.out.println(res);
105
		final StringTemplate st = new StringTemplate(IOUtils.toString(expectedQueryTemplate.getInputStream()));
106
		st.setAttribute("fundingprefix", "wt__________::WT::");
107
		String q = st.toString() + " AND p.startdate >= '2015'";
108
		assertEquals(q, res);
109
	}
110

  
111
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/resources/eu/dnetlib/openaire/exporter/FCT-project.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<ROW>
3
	<FIELD name="funder">FCT</FIELD>
4
	<FIELD name="jurisdiction">PT</FIELD>
5
	<FIELD name="end_date">2003-10-31</FIELD>
6
	<FIELD name="grant_agreement_number">32639</FIELD>
7
	<FIELD name="title">Neural Network Controllers for Pneumatic Actuators</FIELD>
8
	<FIELD name="fundingpathid">fct_________::FCT::3599-PPCDT</FIELD>
9
	<FIELD name="acronym">PTDC/FIL-FIL/109889/2009</FIELD>
10
	<FIELD name="start_date">2000-11-01</FIELD>
11
	<FIELD name="description">description of the funding path</FIELD>
12
</ROW> 
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/resources/eu/dnetlib/openaire/exporter/FP7-project.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<ROW>
3
	<FIELD name="funder">EC</FIELD>
4
	<FIELD name="jurisdiction">EU</FIELD>
5
	<FIELD name="end_date">2012-07-31</FIELD>
6
	<FIELD name="grant_agreement_number">255646</FIELD>
7
	<FIELD name="title">Semiconductor lasers for generation of non-diffracting (Bessel) beams.</FIELD>
8
	<FIELD name="fundingpathid">ec__________::EC::FP7::SP3::PEOPLE</FIELD>
9
	<FIELD name="acronym">SENDBEAMS</FIELD>
10
	<FIELD name="start_date">2010-08-01</FIELD>
11
	<FIELD name="description">description of the funding path</FIELD>
12
</ROW> 
13

  
14
	
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/resources/eu/dnetlib/openaire/exporter/sql/expected_projects_fundings.sql.st
1
SELECT
2
	org.legalshortname as funder, 
3
	fp.jurisdiction as jurisdiction, 
4
	p.acronym as acronym, 
5
	p.title as title, 
6
	p.code as grant_agreement_number,
7
	p.startdate as start_date,
8
	p.enddate as end_date,
9
	fp.id as fundingpathid
10
FROM projects p 
11
	left outer join project_fundingpath pfp  on (p.id = pfp.project) 
12
	left outer join fundingpaths fp on (pfp.funding=fp.id)
13
	left outer join organizations org on (org.id = fp.funder)
14
WHERE fp.id like '$fundingprefix$%'
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/test/resources/eu/dnetlib/openaire/exporter/WT-project.xml
1
<ROW>
2
	<FIELD name="funder">WT</FIELD>
3
	<FIELD name="end_date">2013-07-29</FIELD>
4
	<FIELD name="grant_agreement_number">098241</FIELD>
5
	<FIELD name="title">EYEDIO DIGI - DEVELOPMENT OF AN INNOVATIVE, AFFORDABLE, EASY TO USE, HANDHELD RETINAL IMAGING PRODUCT FOR THE DIAGNOSIS OF DIABETIC RETINOPATHY.</FIELD>
6
	<FIELD name="acronym"></FIELD>
7
	<FIELD name="fundingpathid">wt__________::WT::Immunology and Infectious Disease</FIELD>
8
	<FIELD name="start_date">2012-01-30</FIELD>
9
	<FIELD name="jurisdiction"/>
10
	<FIELD name="description">description of the funding path</FIELD>
11
</ROW> 
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/java/eu/dnetlib/openaire/exporter/ProjectQueryParams.java
1
package eu.dnetlib.openaire.exporter;
2

  
3
import java.util.regex.Pattern;
4

  
5
import org.apache.commons.logging.Log;
6
import org.apache.commons.logging.LogFactory;
7

  
8
public class ProjectQueryParams {
9

  
10
	private String fundingProgramme = null;
11
	/** Whatever is following the fundingProgramme **/
12
	private String fundingPath = null;
13

  
14
	private String startFrom = null;
15
	private String startUntil = null;
16
	private String endFrom = null;
17
	private String endUntil = null;
18

  
19
	private static final Log log = LogFactory.getLog(ProjectQueryParams.class); // NOPMD by marko on 11/24/08 5:02 PM
20

  
21
	public String getFundingProgramme() {
22
		return fundingProgramme;
23
	}
24

  
25
	public void setFundingProgramme(final String fundingProgramme) {
26
		this.fundingProgramme = verifyParam(fundingProgramme);
27
	}
28

  
29
	public String getFundingPath() {
30
		return fundingPath;
31
	}
32

  
33
	public void setFundingPath(final String fundingPath) {
34
		this.fundingPath = verifyParam(fundingPath);
35
	}
36

  
37
	public String getStartFrom() {
38
		return startFrom;
39
	}
40

  
41
	public void setStartFrom(final String startFrom) {
42
		this.startFrom = verifyParam(startFrom);
43
	}
44

  
45
	public String getStartUntil() {
46
		return startUntil;
47
	}
48

  
49
	public void setStartUntil(final String startUntil) {
50
		this.startUntil = verifyParam(startUntil);
51
	}
52

  
53
	public String getEndFrom() {
54
		return endFrom;
55
	}
56

  
57
	public void setEndFrom(final String endFrom) {
58
		this.endFrom = verifyParam(endFrom);
59
	}
60

  
61
	public String getEndUntil() {
62
		return endUntil;
63
	}
64

  
65
	public void setEndUntil(final String endUntil) {
66
		this.endUntil = verifyParam(endUntil);
67
	}
68

  
69
	private String verifyParam(final String p) {
70
		Pattern pattern = Pattern.compile("(\\w*(::|%)*)*");
71
		log.debug("TESTING SQL PARAM: " + p);
72
		if ((p != null) && !pattern.matcher(p).matches()) throw new IllegalArgumentException("Parameter contains an invalid character");
73
		log.debug("TEST OK");
74

  
75
		return p;
76
	}
77
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/java/eu/dnetlib/openaire/exporter/ProjectQueryParamsFactory.java
1
package eu.dnetlib.openaire.exporter;
2

  
3
import javax.servlet.http.HttpServletRequest;
4

  
5
public class ProjectQueryParamsFactory {
6

  
7
	private static final String BASE_PATH = "/openaire/export/";
8
	private static final String NO_FILTER = "ALL";
9

  
10
	public ProjectQueryParams generateParams(final HttpServletRequest request,
11
			final String startFrom,
12
			final String startUntil,
13
			final String endFrom,
14
			final String endUntil) {
15
		ProjectQueryParams params = new ProjectQueryParams();
16

  
17
		String[] arr = request.getPathInfo().replace(BASE_PATH, "").split("\\/");
18
		if (arr.length != 5) throw new IllegalArgumentException("Invalid url");
19

  
20
		params.setFundingProgramme(arr[0]);
21
		String stream = NO_FILTER.equals(arr[1]) ? null : arr[1];
22
		String substream = NO_FILTER.equals(arr[2]) ? null : arr[2];
23
		if (substream == null) {
24
			params.setFundingPath(stream);
25
		} else {
26
			if (stream == null) {
27
				stream = "%";
28
			}
29
			params.setFundingPath(stream + "::" + substream);
30
		}
31
		// params.setSpecificProgramme(NO_FILTER.equals(arr[1]) ? null : arr[1]);
32
		// params.setSubdivision(NO_FILTER.equals(arr[2]) ? null : arr[2]);
33
		// NB: arr[3] should be 'projects'
34
		// NB: arr[4] should be '[file].do'
35
		params.setStartFrom(startFrom);
36
		params.setStartUntil(startUntil);
37
		params.setEndFrom(endFrom);
38
		params.setEndUntil(endUntil);
39

  
40
		return params;
41
	}
42
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/java/eu/dnetlib/openaire/exporter/ProjectsController.java
1
package eu.dnetlib.openaire.exporter;
2

  
3
import java.io.IOException;
4
import java.io.OutputStream;
5
import java.io.StringReader;
6
import java.text.SimpleDateFormat;
7
import java.util.Date;
8
import java.util.List;
9

  
10
import javax.servlet.ServletOutputStream;
11
import javax.servlet.ServletResponse;
12
import javax.servlet.http.HttpServletRequest;
13
import javax.servlet.http.HttpServletResponse;
14
import javax.xml.ws.wsaddressing.W3CEndpointReference;
15

  
16
import org.antlr.stringtemplate.StringTemplate;
17
import org.apache.commons.io.IOUtils;
18
import org.apache.commons.lang.StringUtils;
19
import org.apache.commons.logging.Log;
20
import org.apache.commons.logging.LogFactory;
21
import org.dom4j.Document;
22
import org.dom4j.io.SAXReader;
23
import org.springframework.beans.factory.annotation.Autowired;
24
import org.springframework.beans.factory.annotation.Value;
25
import org.springframework.core.io.Resource;
26
import org.springframework.stereotype.Controller;
27
import org.springframework.web.bind.annotation.RequestMapping;
28
import org.springframework.web.bind.annotation.RequestParam;
29

  
30
import com.google.common.base.Joiner;
31
import com.google.common.base.Splitter;
32
import com.google.common.collect.Lists;
33

  
34
import eu.dnetlib.enabling.database.rmi.DatabaseService;
35
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
36
import eu.dnetlib.enabling.resultset.client.IterableResultSetClient;
37
import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
38
import eu.dnetlib.miscutils.collections.MappedCollection;
39
import eu.dnetlib.miscutils.functional.xml.ApplyXslt;
40

  
41
@Controller
42
public class ProjectsController {
43

  
44
	private enum Funding {
45
		FP7, WT, FCT, H2020
46
	}
47

  
48
	@javax.annotation.Resource
49
	private UniqueServiceLocator serviceLocator;
50

  
51
	@Value("${dnet.openaire.db.name}")
52
	private String dbName;
53
	@Value("${openaire.exporter.dspace.xslt}")
54
	private Resource dspaceXslt;
55
	@Value("${openaire.exporter.eprints.xslt}")
56
	private Resource eprintsXslt;
57
	@Value("${openaire.exporter.projectsfundings.sql.template}")
58
	private Resource projectsFundingQueryTemplate;
59
	@Value("${openaire.exporter.projects2tsv.sql.template}")
60
	private Resource projects2tsvQueryTemplate;
61
	@Value("${openaire.exporter.projects2tsv.fields}")
62
	private String tsvFields;
63

  
64
	@Autowired
65
	private ResultSetClientFactory resultSetClientFactory;
66
	@Autowired
67
	private ProjectQueryParamsFactory projectQueryParamsFactory;
68

  
69
	private static final Log log = LogFactory.getLog(ProjectsController.class); // NOPMD by marko on 11/24/08 5:02 PM
70

  
71
	@RequestMapping(value = "/openaire/export/**/project/dspace.do")
72
	void processDspace(final HttpServletRequest request,
73
			final ServletResponse response,
74
			@RequestParam(value = "startFrom", required = false) final String startFrom,
75
			@RequestParam(value = "startUntil", required = false) final String startUntil,
76
			@RequestParam(value = "endFrom", required = false) final String endFrom,
77
			@RequestParam(value = "endUntil", required = false) final String endUntil) throws Exception {
78

  
79
		response.setContentType("text/xml");
80

  
81
		ProjectQueryParams params = projectQueryParamsFactory.generateParams(request, startFrom, startUntil, endFrom, endUntil);
82

  
83
		ServletOutputStream out = response.getOutputStream();
84

  
85
		String head = "<?xml version='1.0' encoding='UTF-8'?>\n\n" + "<form-value-pairs>\n" + "	<value-pairs value-pairs-name='" + params.getFundingProgramme()
86
				+ "projects' dc-term='relation'>\n";
87

  
88
		String tail = "	</value-pairs>\n" + "</form-value-pairs>\n";
89

  
90
		IOUtils.copy(new StringReader(head), out);
91
		emit(out, dspaceXslt, obtainQuery(params));
92
		IOUtils.copy(new StringReader(tail), out);
93
	}
94

  
95
	@RequestMapping(value = "/openaire/export/**/project/eprints.do")
96
	void processEprints(final HttpServletRequest request,
97
			final ServletResponse response,
98
			@RequestParam(value = "startFrom", required = false) final String startFrom,
99
			@RequestParam(value = "startUntil", required = false) final String startUntil,
100
			@RequestParam(value = "endFrom", required = false) final String endFrom,
101
			@RequestParam(value = "endUntil", required = false) final String endUntil) throws Exception {
102

  
103
		response.setContentType("text/html");
104
		emit(response.getOutputStream(), eprintsXslt, obtainQuery(projectQueryParamsFactory.generateParams(request, startFrom, startUntil, endFrom, endUntil)));
105
	}
106

  
107
	@RequestMapping(value = "/openaire/export/project2tsv.do")
108
	void processTsv(final HttpServletRequest request, final HttpServletResponse response, @RequestParam(value = "funding", required = true) final String funding)
109
			throws Exception {
110

  
111
		final String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
112
		response.setContentType("text/tab-separated-values");
113
		response.setHeader("Content-Disposition", "attachment; filename=\"projects_" + funding + "_" + date + ".tsv\"");
114

  
115
		final StringTemplate st = new StringTemplate(IOUtils.toString(projects2tsvQueryTemplate.getInputStream()));
116
		Funding requestedFunding = Funding.valueOf(funding.toUpperCase());
117
		String fundingPrefix = getFundingPrefix(requestedFunding, null);
118
		log.debug("Setting fundingprefix to " + fundingPrefix);
119
		st.setAttribute("fundingprefix", fundingPrefix);
120
		emitAsTsv(response.getOutputStream(), st.toString());
121
	}
122

  
123
	/**
124
	 * Creates the query on the fundingProgramme specified in the given parameters.
125
	 * 
126
	 * @param params
127
	 *            request parameters
128
	 * @return the query string
129
	 * @throws IllegalArgumentException
130
	 *             if the funding program is not recognized
131
	 * @throws IOException
132
	 *             if there are problem loading the query temlate
133
	 * @throws IllegalArgumentException
134
	 *             if the funding program is not recognized
135
	 */
136
	protected String obtainQuery(final ProjectQueryParams params) throws IllegalArgumentException, IOException {
137
		String funding = params.getFundingProgramme();
138
		String suffix = params.getFundingPath();
139
		String fundingPrefix = getFundingPrefix(Funding.valueOf(funding.toUpperCase()), suffix);
140
		final StringTemplate st = new StringTemplate(IOUtils.toString(projectsFundingQueryTemplate.getInputStream()));
141
		st.setAttribute("fundingprefix", fundingPrefix);
142
		String theQuery = setDateParameters(st.toString(), params);
143
		log.debug("Generated query: " + theQuery);
144
		return theQuery;
145
	}
146

  
147
	private String getFundingPrefix(final Funding funding, final String suffix) throws IllegalArgumentException {
148
		switch (funding) {
149
		case FCT:
150
			if (StringUtils.isBlank(suffix)) return "fct_________::FCT::";
151
			else return "fct_________::FCT::" + suffix;
152
		case WT:
153
			if (StringUtils.isBlank(suffix)) return "wt__________::WT::";
154
			else return "wt__________::WT::" + suffix;
155
		case FP7:
156
			if (StringUtils.isBlank(suffix)) return "ec__________::EC::FP7::";
157
			else return "ec__________::EC::FP7::" + suffix;
158
		case H2020:
159
			if (StringUtils.isBlank(suffix)) return "ec__________::EC::H2020::";
160
			else return "ec__________::EC::H2020::" + suffix;
161
		default:
162
			throw new IllegalArgumentException("Invalid funding " + funding + " (valid are: FP7, H2020, WT, FCT)");
163
		}
164
	}
165

  
166
	void emit(final OutputStream out, final Resource xslt, final String query) throws IOException {
167
		W3CEndpointReference epr = serviceLocator.getService(DatabaseService.class).searchSQL(dbName, query);
168

  
169
		IterableResultSetClient iter = resultSetClientFactory.getClient(epr);
170

  
171
		for (String s : new MappedCollection<String, String>(iter, new ApplyXslt(xslt))) {
172
			out.write(s.getBytes());
173
		}
174
	}
175

  
176
	void emitAsTsv(final OutputStream out, final String query) throws Exception {
177
		W3CEndpointReference epr = serviceLocator.getService(DatabaseService.class).searchSQL(dbName, query);
178

  
179
		final List<String> fields = Lists.newArrayList(Splitter.on(",").omitEmptyStrings().trimResults().split(tsvFields));
180
		writeCSVLine(out, fields);
181

  
182
		final SAXReader reader = new SAXReader();
183
		for (String s : resultSetClientFactory.getClient(epr)) {
184
			final Document doc = reader.read(new StringReader(s));
185
			final List<String> list = Lists.newArrayList();
186
			for (String f : fields) {
187
				list.add(doc.valueOf("//FIELD[@name='" + f + "']").replaceAll("\\n|\\t", " ").replaceAll("\\s+", " ").trim());
188
			}
189
			writeCSVLine(out, list);
190
		}
191
		out.flush();
192
	}
193

  
194
	private void writeCSVLine(final OutputStream out, final List<String> list) throws Exception {
195
		out.write(Joiner.on('\t').useForNull("").join(list).getBytes());
196
		out.write('\n');
197
	}
198

  
199
	private String setDateParameters(final String query, final ProjectQueryParams params) {
200
		String queryWithDates = query;
201
		if (params.getStartFrom() != null) {
202
			queryWithDates += " AND p.startdate >= '" + params.getStartFrom() + "'";
203
		}
204
		if (params.getStartUntil() != null) {
205
			queryWithDates += " AND p.startdate <= '" + params.getStartUntil() + "'";
206
		}
207
		if (params.getEndFrom() != null) {
208
			queryWithDates += " AND p.enddate >= '" + params.getEndFrom() + "'";
209
		}
210
		if (params.getEndUntil() != null) {
211
			queryWithDates += " AND p.enddate <= '" + params.getEndUntil() + "'";
212
		}
213
		return queryWithDates;
214
	}
215

  
216
	public String getDbName() {
217
		return dbName;
218
	}
219

  
220
	public void setDbName(final String dbName) {
221
		this.dbName = dbName;
222
	}
223

  
224
	public Resource getDspaceXslt() {
225
		return dspaceXslt;
226
	}
227

  
228
	public void setDspaceXslt(final Resource dspaceXslt) {
229
		this.dspaceXslt = dspaceXslt;
230
	}
231

  
232
	public Resource getEprintsXslt() {
233
		return eprintsXslt;
234
	}
235

  
236
	public void setEprintsXslt(final Resource eprintsXslt) {
237
		this.eprintsXslt = eprintsXslt;
238
	}
239

  
240
	public ProjectQueryParamsFactory getProjectQueryParamsFactory() {
241
		return projectQueryParamsFactory;
242
	}
243

  
244
	public void setProjectQueryParamsFactory(final ProjectQueryParamsFactory projectQueryParamsFactory) {
245
		this.projectQueryParamsFactory = projectQueryParamsFactory;
246
	}
247

  
248
	public Resource getProjectsFundingQueryTemplate() {
249
		return projectsFundingQueryTemplate;
250
	}
251

  
252
	public void setProjectsFundingQueryTemplate(final Resource projectsFundingQueryTemplate) {
253
		this.projectsFundingQueryTemplate = projectsFundingQueryTemplate;
254
	}
255

  
256
	public Resource getProjects2tsvQueryTemplate() {
257
		return projects2tsvQueryTemplate;
258
	}
259

  
260
	public void setProjects2tsvQueryTemplate(final Resource projects2tsvQueryTemplate) {
261
		this.projects2tsvQueryTemplate = projects2tsvQueryTemplate;
262
	}
263
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/resources/eu/dnetlib/openaire/exporter/sql/projects_tsv.sql.st
1
select
2
	pr.code                                                           AS "Grant Agreement Number", 
3
	pr.acronym                                                        AS "Project Acronym",  
4
	pr.title                                                          AS "Project Title", 
5
	pr.call_identifier                                                AS "Call ID", 
6
	pr.enddate                                                        AS "Start Date",
7
	pr.startdate                                                      AS "End Date", 
8
	pr.ec_sc39                                                        AS "ec_sc39",
9
	f.description                                                     AS "Discipline",
10
	org.legalname                                                     AS "Organization",
11
	org.countryclass                                                  AS "Country",
12
	CASE WHEN po.participantnumber = 1 THEN 'coordinator' ELSE '' END AS "Role",
13
	pe.firstname                                                      AS "Person Name", 
14
	pe.secondnames                                                    AS "Person Second Names",  
15
	pe.email                                                          AS "Person Email"
16
from projects pr
17
	left outer join project_organization po on (pr.id = po.project)
18
	left outer join persons pe on (po.contactperson=pe.id)
19
	left outer join organizations org on (po.resporganization = org.id)
20
	left outer join project_fundingpath pf on (pr.id = pf.project)
21
	left outer join fundingpaths f on (pf.funding = f.id)
22
where f.id like '$fundingprefix$%'
23
order by pr.acronym
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/resources/eu/dnetlib/openaire/exporter/sql/projects_fundings.sql.st
1
SELECT
2
	org.legalshortname as funder, 
3
	fp.jurisdiction as jurisdiction, 
4
	p.acronym as acronym, 
5
	p.title as title, 
6
	p.code as grant_agreement_number,
7
	p.startdate as start_date,
8
	p.enddate as end_date,
9
	fp.id as fundingpathid
10
FROM projects p 
11
	left outer join project_fundingpath pfp  on (p.id = pfp.project) 
12
	left outer join fundingpaths fp on (pfp.funding=fp.id)
13
	left outer join organizations org on (org.id = fp.funder)
14
WHERE fp.id like '$fundingprefix$%'
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/resources/eu/dnetlib/openaire/exporter/webContext-openaire-exporter.xml
1
<beans xmlns="http://www.springframework.org/schema/beans"
2
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
3
	xmlns:context="http://www.springframework.org/schema/context"
4
	xmlns:util="http://www.springframework.org/schema/util"
5
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
6
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
7
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
8

  
9
	<bean id="projectQueryParamsFactory" class="eu.dnetlib.openaire.exporter.ProjectQueryParamsFactory" />
10
	
11
</beans>
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/resources/eu/dnetlib/openaire/exporter/applicationContext-openaire-exporter.properties
1
openaire.exporter.dspace.xslt=classpath:/eu/dnetlib/openaire/exporter/xslt/projects_dspace.xslt
2
openaire.exporter.eprints.xslt=classpath:/eu/dnetlib/openaire/exporter/xslt/projects_eprints.xslt
3
openaire.exporter.projects2tsv.sql.template=classpath:/eu/dnetlib/openaire/exporter/sql/projects_tsv.sql.st
4
openaire.exporter.projects2tsv.fields = Grant Agreement Number, Project Acronym, Project Title, Call ID, Start Date, End Date, ec_sc39, Discipline, Organization, Country, Role, Person Name, Person Second Names, Person Email
5
openaire.exporter.projectsfundings.sql.template=classpath:/eu/dnetlib/openaire/exporter/sql/projects_fundings.sql.st
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/resources/eu/dnetlib/openaire/exporter/xslt/projects_dspace.xslt
1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
3
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="xsl xsi">
4

  
5
	<xsl:output omit-xml-declaration="yes" standalone="omit" indent="yes"/>
6
	
7
	<xsl:template match="/">
8
		<xsl:variable name="jurisdiction" select="//FIELD[@name='jurisdiction']"/>
9
		<xsl:variable name="id" select="//FIELD[@name='grant_agreement_number']" />
10
		<xsl:variable name="title" select="//FIELD[@name='title']" />
11
		<xsl:variable name="acronym" select="//FIELD[@name='acronym']" />
12
		<xsl:variable name="funder" select="//FIELD[@name='funder']" />
13
		<xsl:variable name="fundingProgramme">
14
			<xsl:value-of select="tokenize(//FIELD[@name='fundingpathid'],'::')[3]"/>
15
		</xsl:variable>
16
		
17
		<xsl:variable name="idnamespace">
18
		<!-- info:eu-repo/grantAgreement/Funder/FundingProgram/ProjectID /[Jurisdiction]/[ProjectName]/[ProjectAcronym]  -->
19
		<xsl:choose>
20
				<xsl:when test="$jurisdiction != ''"><xsl:value-of select="concat('info:eu-repo/grantAgreement/', $funder, '/', $fundingProgramme, '/', $id, '/', $jurisdiction)" /></xsl:when>
21
				<xsl:otherwise><xsl:value-of select="concat('info:eu-repo/grantAgreement/', $funder, '/', $id)" /></xsl:otherwise>
22
			</xsl:choose>
23
		</xsl:variable>
24
		<pair>
25
			<displayed-value><xsl:value-of select="concat($id, ' - ', $acronym, ' - ', $title)" /></displayed-value>
26
			<stored-value><xsl:value-of select="$idnamespace" /></stored-value>
27
		</pair>
28
	</xsl:template>
29

  
30
</xsl:stylesheet>
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/src/main/resources/eu/dnetlib/openaire/exporter/xslt/projects_eprints.xslt
1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
3
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="xsl xsi">
4

  
5
<!-- DO NOT REINDENT THIS FILE: IT IS IMPORTANT THAT EACH PROJECT IS ON ONE SINGLE LINE -->
6
	<xsl:output omit-xml-declaration="yes" standalone="omit" indent="no"/>
7
	
8
	<xsl:template match="/">
9
		<xsl:variable name="jurisdiction" select="//FIELD[@name='jurisdiction']"/>
10
		<xsl:variable name="id" select="//FIELD[@name='grant_agreement_number']" />
11
		<xsl:variable name="title" select="//FIELD[@name='title']" />
12
		<xsl:variable name="acronym" select="//FIELD[@name='acronym']" />
13
		<xsl:variable name="funder" select="//FIELD[@name='funder']" />
14
		<xsl:variable name="fundingProgramme">
15
			<xsl:value-of select="tokenize(//FIELD[@name='fundingpathid'],'::')[3]"/>
16
		</xsl:variable>
17
		<xsl:variable name="idnamespace">
18
		<!-- info:eu-repo/grantAgreement/Funder/FundingProgram/ProjectID /[Jurisdiction]/[ProjectName]/[ProjectAcronym]  -->
19
			<xsl:choose>
20
				<xsl:when test="$jurisdiction != ''"><xsl:value-of select="concat('info:eu-repo/grantAgreement/', $funder, '/', $fundingProgramme, '/', $id, '/', $jurisdiction )" /></xsl:when>
21
				<xsl:otherwise><xsl:value-of select="concat('info:eu-repo/grantAgreement/', $funder, '/', $id)" /></xsl:otherwise>
22
			</xsl:choose>
23
		</xsl:variable>
24
		<xsl:variable name="listLabel">
25
		<xsl:choose>
26
				<xsl:when test="$fundingProgramme = 'FP7'">for:value:component:_fp7_project_id</xsl:when>
27
				<xsl:when test="$fundingProgramme = 'H2020'">for:value:component:_h2020_project_id</xsl:when>
28
				<xsl:when test="$funder = 'WT'">for:value:component:_wt_project_id</xsl:when>
29
				<xsl:when test="$funder = 'FCT'">for:value:component:_fct_project_id</xsl:when>
30
				<xsl:when test="$funder = 'NHMRC'">for:value:component:_nhmrc_project_id</xsl:when>
31
				<xsl:when test="$funder = 'ARC'">for:value:component:_arc_project_id</xsl:when>
32
				<xsl:otherwise>info:eu-repo/grantAgreement/</xsl:otherwise>
33
			</xsl:choose>
34
		</xsl:variable>
35
		<xsl:value-of select="concat($acronym, ' - ', $title,  '&#9;')" /><li style='border-right: solid 50px #30FF30' ><xsl:value-of select="concat($id, ' - ', $acronym, ' - ', $title)" /><ul><li id="{$listLabel}"><xsl:value-of select="$idnamespace" /></li></ul></li><xsl:text> 
36
</xsl:text>
37
	</xsl:template>
38
	
39
</xsl:stylesheet>
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3/pom.xml
1
<?xml version="1.0" ?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
	<parent>
4
		<groupId>eu.dnetlib</groupId>
5
		<artifactId>dnet-parent</artifactId>
6
		<version>1.0.0</version>
7
		<relativePath />
8
	</parent>
9
	<modelVersion>4.0.0</modelVersion>
10
	<groupId>eu.dnetlib</groupId>
11
	<artifactId>cnr-openaire-exporter</artifactId>
12
	<packaging>jar</packaging>
13
	<version>5.0.3</version>
14
	<scm>
15
	  <developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.3</developerConnection>
16
	</scm>
17
	<dependencies>
18
		<dependency>
19
			<groupId>eu.dnetlib</groupId>
20
			<artifactId>cnr-service-common</artifactId>
21
			<version>[2.1.2,3.0.0)</version>
22
		</dependency>
23
		<dependency>
24
			<groupId>eu.dnetlib</groupId>
25
			<artifactId>cnr-resultset-client</artifactId>
26
			<version>[2.0.0,3.0.0)</version>
27
		</dependency>
28
		<dependency>
29
			<groupId>eu.dnetlib</groupId>
30
			<artifactId>cnr-enabling-database-api</artifactId>
31
			<version>[1.0.0,2.0.0)</version>
32
		</dependency>
33
		<dependency>
34
			<groupId>javax.servlet</groupId>
35
			<artifactId>javax.servlet-api</artifactId>
36
			<version>${javax.servlet.version}</version>
37
			<scope>provided</scope>
38
		</dependency>
39
		<dependency>
40
			<groupId>junit</groupId>
41
			<artifactId>junit</artifactId>
42
			<version>${junit.version}</version>
43
			<scope>test</scope>
44
		</dependency>
45
	</dependencies>
46
</project>

Also available in: Unified diff