Project

General

Profile

Download (6.97 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2015 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.io.specimen.abcd206.in.molecular;
10

    
11
import java.util.UUID;
12

    
13
import org.w3c.dom.Element;
14
import org.w3c.dom.Node;
15
import org.w3c.dom.NodeList;
16

    
17
import eu.etaxonomy.cdm.api.application.ICdmRepository;
18
import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportState;
19
import eu.etaxonomy.cdm.io.specimen.abcd206.in.AbcdParseUtility;
20
import eu.etaxonomy.cdm.io.specimen.abcd206.in.AbcdPersonParser;
21
import eu.etaxonomy.cdm.io.specimen.abcd206.in.SpecimenImportReport;
22
import eu.etaxonomy.cdm.model.agent.AgentBase;
23
import eu.etaxonomy.cdm.model.common.DefinedTerm;
24
import eu.etaxonomy.cdm.model.common.TimePeriod;
25
import eu.etaxonomy.cdm.model.molecular.DnaSample;
26
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
27
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
28
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
29
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
30

    
31
/**
32
 * @author pplitzner
33
 * @date 15.06.2015
34
 *
35
 */
36
public class AbcdDnaParser {
37

    
38
    private final String prefix;
39

    
40
    private final SpecimenImportReport report;
41

    
42
    private final ICdmRepository cdmAppController;
43

    
44
    public AbcdDnaParser(String prefix, SpecimenImportReport report, ICdmRepository cdmAppController) {
45
        this.prefix = prefix;
46
        this.report = report;
47
        this.cdmAppController = cdmAppController;
48
    }
49

    
50
    public DnaSample parse(Element item, Abcd206ImportState state) {
51
        FieldUnit fieldUnit = FieldUnit.NewInstance();
52
        DnaSample dnaSample = DnaSample.NewInstance();
53
        DerivationEvent.NewSimpleInstance(fieldUnit, dnaSample, DerivationEventType.DNA_EXTRACTION());
54

    
55
        //specimen unit
56
        NodeList specimenUnitList = item.getElementsByTagName(prefix+"SpecimenUnit");
57
        if(specimenUnitList.item(0)!=null && specimenUnitList.item(0) instanceof Element){
58
            parseSpecimenUnit((Element)specimenUnitList.item(0), dnaSample);
59
        }
60
        NodeList unitExtensions = item.getElementsByTagName(prefix+"UnitExtension");
61
        for(int i=0;i<unitExtensions.getLength();i++){
62
            if(unitExtensions.item(i) instanceof Element){
63
                Element unitExtension = (Element) unitExtensions.item(i);
64
                NodeList ggbn = unitExtension.getElementsByTagName("ggbn:GGBN");
65
                if(ggbn.getLength()>0){
66
                    AbcdGgbnParser ggbnParser = new AbcdGgbnParser(report, cdmAppController);
67
                    ggbnParser.parse(ggbn, dnaSample, state);
68
                }
69
            }
70
        }
71
        return dnaSample;
72
    }
73

    
74
    private void parseSpecimenUnit(Element item, DnaSample dnaSample) {
75
        NodeList preparationsList = item.getElementsByTagName(prefix+"Preparations");
76
        if(preparationsList.item(0)!=null && preparationsList.item(0) instanceof Element){
77
            parsePreparations((Element) preparationsList.item(0), dnaSample);
78
        }
79
        NodeList preservationsList = item.getElementsByTagName(prefix+"Preservations");
80
        if(preservationsList.item(0)!=null && preservationsList.item(0) instanceof Element){
81
            parsePreservations((Element) preservationsList.item(0), dnaSample);
82
        }
83
    }
84

    
85
    private void parsePreparations(Element item, DnaSample dnaSample) {
86
        NodeList preparationList = item.getElementsByTagName(prefix+"preparation");
87
        for(int i=0;i<preparationList.getLength();i++){
88
            Node node = preparationList.item(i);
89
            if(node instanceof Element){
90
                DerivationEvent derivedFrom = dnaSample.getDerivedFrom();
91

    
92
                String preparationType = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preparationType"));
93
                //preparation materials
94
                String preparationMaterials = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preparationMaterials"));
95
                derivedFrom.setDescription(preparationMaterials);
96
                //preparation actor
97
                NodeList preparationAgentList = ((Element) node).getElementsByTagName(prefix+"preparationAgent");
98
                if(preparationAgentList.item(0)!=null && preparationAgentList.item(0) instanceof Element){
99
                    AgentBase<?> preparationAgent = parsePreparationAgent((Element)preparationAgentList.item(0));
100
                    derivedFrom.setActor(preparationAgent);
101
                }
102
                //preparation date
103
                java.time.LocalDate preparationDate = AbcdParseUtility.parseFirstDate(((Element) node).getElementsByTagName(prefix+"preparationDate"));
104
                derivedFrom.setTimeperiod(TimePeriod.NewInstance(preparationDate, null));
105
                //sample designation
106
                NodeList sampleDesignationsList = ((Element) node).getElementsByTagName(prefix+"sampleDesignations");
107
                if(sampleDesignationsList.item(0)!=null && sampleDesignationsList.item(0) instanceof Element){
108
                    parseSampleDesignations((Element)sampleDesignationsList.item(0), dnaSample);
109
                }
110
            }
111
        }
112
    }
113

    
114
    /**
115
     * @param item
116
     * @param dnaSample
117
     */
118
    private void parseSampleDesignations(Element item, DnaSample dnaSample) {
119
        NodeList sampleDesignationList = item.getElementsByTagName(prefix+"sampleDesignation");
120
        for(int i=0;i<sampleDesignationList.getLength();i++){
121
            dnaSample.addIdentifier(sampleDesignationList.item(i).getTextContent(), (DefinedTerm)cdmAppController.getTermService().find(UUID.fromString("fadeba12-1be3-4bc7-9ff5-361b088d86fc")));
122
        }
123

    
124
    }
125

    
126
    private AgentBase<?> parsePreparationAgent(Element item) {
127
        AgentBase<?> agentBase = null;
128
        NodeList personList = item.getElementsByTagName(prefix+"Person");
129
        if(personList.item(0)!=null && personList.item(0) instanceof Element){
130
            agentBase = new AbcdPersonParser(prefix,report, cdmAppController).parse((Element)personList.item(0));
131
        }
132
        return agentBase;
133
    }
134

    
135
    private void parsePreservations(Element item, DnaSample dnaSample) {
136
        NodeList preservationList = item.getElementsByTagName(prefix+"preservation");
137
        for(int i=0;i<preservationList.getLength();i++){
138
            Node node = preservationList.item(i);
139
            if(node instanceof Element){
140
                PreservationMethod preservation = PreservationMethod.NewInstance();
141
                dnaSample.setPreservation(preservation);
142

    
143
                String preservationType = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preservationType"));
144

    
145
                Double preservationTemperature = AbcdParseUtility.parseFirstDouble(((Element) node).getElementsByTagName(prefix+"preservationTemperature"), report);
146
                preservation.setTemperature(preservationTemperature);
147
            }
148
        }
149
    }
150

    
151

    
152
}
(1-1/2)