Project

General

Profile

1
package eu.dnetlib.resolver;
2

    
3
import java.util.ArrayList;
4
import java.util.Arrays;
5
import java.util.List;
6

    
7
import com.ximpleware.AutoPilot;
8
import com.ximpleware.VTDGen;
9
import com.ximpleware.VTDNav;
10
import eu.dnetlib.resolver.model.ResolvedObject;
11
import eu.dnetlib.resolver.model.SubjectType;
12
import eu.dnetlib.resolver.parser.AbstractResolverParser;
13
import eu.dnetlib.resolver.parser.UtilityParser;
14
import eu.dnetlib.resolver.parser.UtilityParser.Node;
15
import org.apache.commons.logging.Log;
16
import org.apache.commons.logging.LogFactory;
17

    
18
/**
19
 * Created by sandro on 10/3/16.
20
 */
21
public class OpenAireParser extends AbstractResolverParser {
22

    
23
	private static final Log log = LogFactory.getLog(OpenAireParser.class);
24

    
25
	@Override
26
	public ResolvedObject parseObject(final String record) {
27
		try {
28
			final ResolvedObject currentObject = new ResolvedObject();
29
			final VTDGen vg = new VTDGen();
30
			vg.setDoc(record.getBytes());
31
			vg.parse(true);
32

    
33
			final VTDNav vn = vg.getNav();
34
			final AutoPilot ap = new AutoPilot(vn);
35

    
36
			ap.declareXPathNameSpace("oaf", "http://namespace.openaire.eu/oaf");
37

    
38
			final List<Node> subjectNodes =
39
					UtilityParser.getTextValuesWithAttributes(ap, vn, "//oaf:result//subject", Arrays.asList("classname", "schemename"));
40

    
41
			//Setting subjects
42
			if (subjectNodes != null && subjectNodes.size() > 0) {
43
				final List<SubjectType> currentSubjects = new ArrayList<>();
44

    
45
				subjectNodes.forEach(it ->
46
						currentSubjects.add(new SubjectType(it.getAttributes().get("schemename"), it.getTextValue()))
47
				);
48
				currentObject.setSubjects(currentSubjects);
49
			}
50

    
51
			//Setting Titles
52

    
53
			final List<String> titles = UtilityParser.getTextValue(ap, vn, "//oaf:result/title");
54

    
55
			if (titles != null && titles.size() > 0) {
56

    
57
				currentObject.setTitles(titles);
58
			}
59

    
60
			//Setting authors
61
			final List<String> authorNodes = UtilityParser.getTextValue(ap, vn, "//oaf:result//fullname");
62

    
63
			if (authorNodes != null && authorNodes.size() > 0) {
64
				currentObject.setAuthors(authorNodes);
65
			}
66

    
67
			//Setting descriptions
68
			final List<String> descriptions = UtilityParser.getTextValue(ap, vn, "//oaf:result//description");
69

    
70
			if (descriptions != null && descriptions.size() > 0) {
71
				currentObject.setDescription(descriptions.get(0));
72
			}
73

    
74
			//resulttype classid
75
			final List<Node> resutlTypes = UtilityParser.getTextValuesWithAttributes(ap, vn, "//oaf:result/resulttype", Arrays.asList("classid"));
76

    
77
			if (resutlTypes != null && resutlTypes.size() > 0) {
78
				final String type = resutlTypes.get(0).getAttributes().get("classid");
79
				setType(currentObject, type);
80
			}
81

    
82
			return currentObject;
83
		} catch (Throwable e) {
84
			log.error("Error on parsing object ", e);
85
			return null;
86
		}
87

    
88
	}
89

    
90
}
(8-8/14)