Project

General

Profile

« Previous | Next » 

Revision 37860

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

View differences:

modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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, NHMRC, ARC
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
		case NHMRC:
162
			if (StringUtils.isBlank(suffix)) return "ands________::NHMRC::";
163
			else return "ands________::NHMRC::" + suffix;
164
		case ARC:
165
			if (StringUtils.isBlank(suffix)) return "arc_________::ARC::";
166
			else return "arc_________::ARC::" + suffix;
167
		default:
168
			throw new IllegalArgumentException("Invalid funding " + funding + " (valid are: FP7, H2020, WT, FCT, NHMRC, ARC)");
169
		}
170
	}
171

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

  
175
		IterableResultSetClient iter = resultSetClientFactory.getClient(epr);
176

  
177
		for (String s : new MappedCollection<String, String>(iter, new ApplyXslt(xslt))) {
178
			out.write(s.getBytes());
179
		}
180
	}
181

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

  
185
		final List<String> fields = Lists.newArrayList(Splitter.on(",").omitEmptyStrings().trimResults().split(tsvFields));
186
		writeCSVLine(out, fields);
187

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

  
200
	private void writeCSVLine(final OutputStream out, final List<String> list) throws Exception {
201
		out.write(Joiner.on('\t').useForNull("").join(list).getBytes());
202
		out.write('\n');
203
	}
204

  
205
	private String setDateParameters(final String query, final ProjectQueryParams params) {
206
		String queryWithDates = query;
207
		if (params.getStartFrom() != null) {
208
			queryWithDates += " AND p.startdate >= '" + params.getStartFrom() + "'";
209
		}
210
		if (params.getStartUntil() != null) {
211
			queryWithDates += " AND p.startdate <= '" + params.getStartUntil() + "'";
212
		}
213
		if (params.getEndFrom() != null) {
214
			queryWithDates += " AND p.enddate >= '" + params.getEndFrom() + "'";
215
		}
216
		if (params.getEndUntil() != null) {
217
			queryWithDates += " AND p.enddate <= '" + params.getEndUntil() + "'";
218
		}
219
		return queryWithDates;
220
	}
221

  
222
	public String getDbName() {
223
		return dbName;
224
	}
225

  
226
	public void setDbName(final String dbName) {
227
		this.dbName = dbName;
228
	}
229

  
230
	public Resource getDspaceXslt() {
231
		return dspaceXslt;
232
	}
233

  
234
	public void setDspaceXslt(final Resource dspaceXslt) {
235
		this.dspaceXslt = dspaceXslt;
236
	}
237

  
238
	public Resource getEprintsXslt() {
239
		return eprintsXslt;
240
	}
241

  
242
	public void setEprintsXslt(final Resource eprintsXslt) {
243
		this.eprintsXslt = eprintsXslt;
244
	}
245

  
246
	public ProjectQueryParamsFactory getProjectQueryParamsFactory() {
247
		return projectQueryParamsFactory;
248
	}
249

  
250
	public void setProjectQueryParamsFactory(final ProjectQueryParamsFactory projectQueryParamsFactory) {
251
		this.projectQueryParamsFactory = projectQueryParamsFactory;
252
	}
253

  
254
	public Resource getProjectsFundingQueryTemplate() {
255
		return projectsFundingQueryTemplate;
256
	}
257

  
258
	public void setProjectsFundingQueryTemplate(final Resource projectsFundingQueryTemplate) {
259
		this.projectsFundingQueryTemplate = projectsFundingQueryTemplate;
260
	}
261

  
262
	public Resource getProjects2tsvQueryTemplate() {
263
		return projects2tsvQueryTemplate;
264
	}
265

  
266
	public void setProjects2tsvQueryTemplate(final Resource projects2tsvQueryTemplate) {
267
		this.projects2tsvQueryTemplate = projects2tsvQueryTemplate;
268
	}
269
}
modules/cnr-openaire-exporter/tags/cnr-openaire-exporter-5.0.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4</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.4</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