Project

General

Profile

1
package eu.dnetlib.dli.resolver;
2

    
3
import com.google.common.collect.Lists;
4
import eu.dnetlib.dli.resolver.model.CompletionStatus;
5
import eu.dnetlib.dli.resolver.model.DLIObjectProvenance;
6
import eu.dnetlib.dli.resolver.model.DLIResolvedObject;
7

    
8
import eu.dnetlib.pid.resolver.model.ObjectType;
9
import org.apache.commons.logging.Log;
10
import org.apache.commons.logging.LogFactory;
11

    
12
import javax.xml.stream.XMLInputFactory;
13
import javax.xml.stream.XMLStreamConstants;
14
import javax.xml.stream.XMLStreamException;
15
import javax.xml.stream.XMLStreamReader;
16
import java.io.ByteArrayInputStream;
17
import java.util.Stack;
18

    
19
/**
20
 * @author sandro
21
 */
22
public class RCSBParser {
23

    
24
	/**
25
	 * The Constant CROSSREF_NS_PREFIX.
26
	 */
27
	public static final String RCBS_NS_PREFIX = "r3d100010327";
28
	/**
29
	 * The Constant log.
30
	 */
31
	private static final Log log = LogFactory.getLog(RCSBParser.class); // NOPMD by marko on 11/24/08 5:02 PM
32

    
33
	/**
34
	 * Parses the record.
35
	 *
36
	 * @param record the record
37
	 * @return the DLI object
38
	 */
39
    public DLIResolvedObject parseRecord(final String record) {
40
        if (record == null) return null;
41
		try {
42
			XMLInputFactory factory = XMLInputFactory.newInstance();
43
			final ByteArrayInputStream stream = new ByteArrayInputStream(record.getBytes());
44
			XMLStreamReader parser = factory.createXMLStreamReader(stream);
45
            DLIResolvedObject object = new DLIResolvedObject();
46
            Stack<String> elementStack = new Stack<>();
47
			elementStack.push("/");
48
			while (parser.hasNext()) {
49
				int event = parser.next();
50
				if (event == XMLStreamConstants.END_ELEMENT) {
51

    
52
					elementStack.pop();
53
				} else if (event == XMLStreamConstants.START_ELEMENT) {
54
					final String localName = parser.getLocalName();
55
					elementStack.push(localName);
56
					if ("dimStructure.structureId".equals(localName)) {
57
						log.debug("found open tag structureId");
58
						parser.next();
59
						if (parser.hasText()) {
60
							object.setPid(parser.getText().trim());
61
							object.setPidType("pdb");
62
						}
63
					} else if ("dimStructure.structureTitle".equals(localName)) {
64
						log.debug("found open tag structureTitle");
65
						parser.next();
66
						if (parser.hasText()) {
67
							String title = parser.getText().trim();
68
							object.setTitles(Lists.newArrayList(title));
69
						}
70
					} else if ("dimStructure.structureAuthor".equals(localName)) {
71
						log.debug("found open tag structureAuthor");
72
						parser.next();
73
						if (parser.hasText()) {
74
							String author = parser.getText().trim();
75
							String[] splittedAuthrs = author.split("#");
76
							if (splittedAuthrs != null) {
77
								object.setAuthors(Lists.newArrayList(splittedAuthrs));
78
							}
79
						}
80
					} else if ("dimStructure.releaseDate".equals(localName)) {
81
						log.debug("found open tag releaseDate");
82
						parser.next();
83
						if (parser.hasText()) {
84
							String date = parser.getText().trim();
85
							object.setDate(date);
86
						}
87
					}
88

    
89
				}
90
			}
91
			if (object.getPid() != null && object.getPidType() != null) {
92
                final DLIObjectProvenance provenance = new DLIObjectProvenance();
93
                DLIPIDResolver.setDatasourceProvenance(provenance, RCBS_NS_PREFIX);
94
                object.setDatasourceProvenance(Lists.newArrayList(provenance));
95
				object.fixContribution(provenance);
96
				object.setType(ObjectType.dataset);
97
				object.setCompletionStatus(CompletionStatus.complete.toString());
98
				return object;
99
			}
100
			return null;
101

    
102
		} catch (XMLStreamException e) {
103
			log.error("error during parsing record " + record, e);
104
			return null;
105
		}
106

    
107
	}
108

    
109
}
(14-14/15)