Project

General

Profile

1
package eu.dnetlib.dli.resolver;
2

    
3
import com.google.common.collect.Lists;
4
import com.ximpleware.AutoPilot;
5
import com.ximpleware.VTDGen;
6
import com.ximpleware.VTDNav;
7
import eu.dnetlib.data.transform.VtdUtilityParser;
8
import eu.dnetlib.dli.resolver.model.*;
9
import eu.dnetlib.pid.resolver.model.ObjectType;
10
import eu.dnetlib.pid.resolver.model.SubjectType;
11

    
12
import java.util.Arrays;
13
import java.util.List;
14

    
15
/**
16
 * Created by sandro on 3/6/17.
17
 */
18
public class ENAParser {
19
    private static String ENA_NS_PREFIX = "r3d100010527";
20

    
21
    public DLIResolvedObject parser(final String record, final String pid, final String pidType) throws Exception {
22
        final VTDGen vg = new VTDGen();
23
        vg.setDoc(record.getBytes());
24
        vg.parse(true);
25
        final VTDNav vn = vg.getNav();
26
        final AutoPilot ap = new AutoPilot(vn);
27

    
28
        final DLIResolvedObject result = new DLIResolvedObject();
29
        List<VtdUtilityParser.Node> textValuesWithAttributes = VtdUtilityParser.getTextValuesWithAttributes(ap, vn, "//ROOT/entry", Arrays.asList("taxonomicDivision", "moleculeType", "firstPublic"));
30

    
31

    
32
        if (textValuesWithAttributes != null && !textValuesWithAttributes.isEmpty()) {
33
            result.setType(ObjectType.dataset);
34
            final VtdUtilityParser.Node firstNode = textValuesWithAttributes.get(0);
35
            result.setDate(firstNode.getAttributes().get("firstPublic"));
36

    
37
            final String moleculeType = firstNode.getAttributes().get("moleculeType");
38
            final String taxonomicDivision = firstNode.getAttributes().get("taxonomicDivision");
39
            result.setSubjects(Arrays.asList(new SubjectType("moleculeType", moleculeType), new SubjectType("taxonomicDivision", taxonomicDivision)));
40

    
41

    
42
        } else return null;
43
        result.setTitles(Arrays.asList(VtdUtilityParser.getSingleValue(ap, vn, "//ROOT/entry/description")));
44

    
45
        result.setPid(pid);
46
        result.setPidType(pidType);
47

    
48
        result.setCompletionStatus(CompletionStatus.complete.toString());
49
        final DLIObjectProvenance provenance = new DLIObjectProvenance();
50
        provenance.setCompletionStatus(CompletionStatus.complete.toString());
51
        provenance.setProvisionMode(ObjectProvisionMode.resolved.toString());
52
        DLIPIDResolver.setDatasourceProvenance(provenance, ENA_NS_PREFIX);
53
        result.setDatasourceProvenance(Lists.newArrayList(provenance));
54

    
55
        return result;
56
    }
57

    
58
}
(8-8/16)