Project

General

Profile

« Previous | Next » 

Revision 51857

View differences:

modules/dnet-isti/trunk/src/main/java/eu/dnetlib/data/utils/CsvConverter.java
1 1
package eu.dnetlib.data.utils;
2 2

  
3
import java.io.StringWriter;
4
import java.util.Collection;
5
import java.util.stream.Collectors;
6

  
7
import org.apache.commons.lang3.StringUtils;
8

  
9
import eu.dnetlib.data.mdstore.plugins.objects.MdRecord;
10

  
3 11
public class CsvConverter {
4 12

  
5
	public static String asCsv(final String string) {
6
		// TODO Auto-generated method stub
7
		return null;
13
	public static String asCsv(final MdRecord record) {
14

  
15
		final StringWriter sw = new StringWriter();
16
		sw.append(record.getId());
17
		sw.append("\t");
18
		sw.append(record.getTitle());
19
		sw.append("\t");
20
		sw.append(prepareValue(record.getCreators()));
21
		sw.append("\t");
22
		sw.append(record.getPublisher());
23
		sw.append("\t");
24
		sw.append(record.getType());
25
		sw.append("\t");
26
		sw.append("" + record.getDate());
27
		sw.append("\t");
28
		sw.append(prepareValue(record.getDois()));
29

  
30
		return sw.toString();
8 31
	}
9 32

  
33
	private static String prepareValue(final Collection<String> list) {
34
		return list.stream().map(String::trim).filter(StringUtils::isNotBlank).collect(Collectors.joining(", "));
35
	}
36

  
10 37
}
modules/dnet-isti/trunk/src/main/java/eu/dnetlib/data/utils/BibTexConverter.java
1 1
package eu.dnetlib.data.utils;
2 2

  
3 3
import java.io.IOException;
4
import java.io.StringReader;
5 4
import java.io.StringWriter;
6 5
import java.io.Writer;
7
import java.util.List;
6
import java.util.Collection;
8 7
import java.util.stream.Collectors;
9 8

  
10 9
import org.apache.commons.lang3.StringUtils;
11 10
import org.apache.commons.logging.Log;
12 11
import org.apache.commons.logging.LogFactory;
13
import org.dom4j.Document;
14
import org.dom4j.DocumentException;
15
import org.dom4j.Node;
16
import org.dom4j.io.SAXReader;
17 12
import org.jbibtex.BibTeXDatabase;
18 13
import org.jbibtex.BibTeXEntry;
19 14
import org.jbibtex.BibTeXFormatter;
......
21 16
import org.jbibtex.StringValue;
22 17
import org.jbibtex.StringValue.Style;
23 18

  
19
import eu.dnetlib.data.mdstore.plugins.objects.MdRecord;
20

  
24 21
public class BibTexConverter {
25 22

  
26 23
	private static final Log log = LogFactory.getLog(BibTexConverter.class);
27 24

  
28
	public static String asBibTex(final String xml) {
25
	public static String asBibTex(final MdRecord record) {
29 26
		try {
30
			final Document doc = new SAXReader().read(new StringReader(xml));
31 27

  
32
			final BibTeXEntry dbEntry = new BibTeXEntry(
33
					findBibTexType(doc.valueOf("//*[local-name() = 'resourceType']")),
34
					new Key(doc.valueOf("//*[local-name() = 'identifier']")));
28
			final BibTeXEntry dbEntry = new BibTeXEntry(findBibTexType(record.getType()), new Key(record.getId()));
35 29

  
36
			addSimpleStringValue(dbEntry, BibTeXEntry.KEY_TITLE, doc, "//*[local-name() = 'title']");
37
			addMultipleStringValue(dbEntry, BibTeXEntry.KEY_AUTHOR, doc, "//*[local-name() = 'creator']");
38
			addSimpleStringValue(dbEntry, BibTeXEntry.KEY_YEAR, doc, "//*[local-name() = 'date']");
30
			addSimpleStringValue(dbEntry, BibTeXEntry.KEY_TITLE, record.getTitle());
31
			addMultipleStringValue(dbEntry, BibTeXEntry.KEY_AUTHOR, record.getCreators());
32
			addSimpleStringValue(dbEntry, BibTeXEntry.KEY_PUBLISHER, record.getPublisher());
33
			addSimpleStringValue(dbEntry, BibTeXEntry.KEY_YEAR, record.getDate());
34
			addMultipleStringValue(dbEntry, BibTeXEntry.KEY_DOI, record.getDois());
39 35

  
40 36
			final BibTeXFormatter formatter = new BibTeXFormatter();
41 37
			final Writer res = new StringWriter();
......
43 39
			db.addObject(dbEntry);
44 40
			formatter.format(db, res);
45 41
			return res.toString();
46
		} catch (final DocumentException | IOException e) {
42
		} catch (final IOException e) {
47 43
			log.warn("Error generating bibtex", e);
48 44
			return "";
49 45
		}
50 46
	}
51 47

  
52
	private static void addSimpleStringValue(final BibTeXEntry dbEntry, final Key key, final Document doc, final String xpath) {
53
		final String val = doc.valueOf(xpath).trim();
54
		if (StringUtils.isNotBlank(val)) {
55
			dbEntry.addField(key, new StringValue(val, Style.BRACED));
48
	private static void addSimpleStringValue(final BibTeXEntry dbEntry, final Key key, final Object value) {
49
		if ((value != null) && StringUtils.isNotBlank(value.toString())) {
50
			dbEntry.addField(key, new StringValue(value.toString(), Style.BRACED));
56 51
		}
57 52
	}
58 53

  
59
	@SuppressWarnings("unchecked")
60
	private static void addMultipleStringValue(final BibTeXEntry dbEntry, final Key key, final Document doc, final String xpath) {
61
		final String val = ((List<Node>) doc.selectNodes(xpath))
62
				.stream()
63
				.map(Node::getText)
54
	private static void addMultipleStringValue(final BibTeXEntry dbEntry, final Key key, final Collection<String> list) {
55
		final String val = list.stream()
64 56
				.map(String::trim)
65
				.filter(StringUtils::isNotEmpty)
57
				.filter(StringUtils::isNotBlank)
66 58
				.collect(Collectors.joining(" and "));
67 59

  
68 60
		if (StringUtils.isNotBlank(val)) {
modules/dnet-isti/trunk/src/main/java/eu/dnetlib/data/mdstore/plugins/FreezeMDStorePlugin.java
46 46
				final MdRecord record = MdRecordConvertUtils.fromString(xml);
47 47
				doc.append("id", id);
48 48
				doc.append("xml", xml);
49
				doc.append("bibtex", BibTexConverter.asBibTex(obj.get("body").toString()));
50
				doc.append("csv", CsvConverter.asCsv(obj.get("body").toString()));
49
				doc.append("bibtex", BibTexConverter.asBibTex(record));
50
				doc.append("csv", CsvConverter.asCsv(record));
51 51
				doc.append("json", gson.toJson(record));
52 52

  
53 53
				freezeColl.insertOne(doc);

Also available in: Unified diff