Project

General

Profile

Download (7.11 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.Date;
12
import java.util.UUID;
13

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

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

    
32
/**
33
 * @author pplitzner
34
 \* @since 15.06.2015
35
 *
36
 */
37
public class AbcdDnaParser {
38

    
39
    private final String prefix;
40

    
41
    private final SpecimenImportReport report;
42

    
43
    private final ICdmRepository cdmAppController;
44

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

    
51
    public DnaSample parse(Element item, Abcd206ImportState state) {
52
        FieldUnit fieldUnit = state.getFieldUnit(state.getDataHolder().getFieldNumber());
53
        if (fieldUnit == null){
54
            fieldUnit = FieldUnit.NewInstance();
55
        }
56
        DnaSample dnaSample = DnaSample.NewInstance();
57
        DerivationEvent.NewSimpleInstance(fieldUnit, dnaSample, DerivationEventType.DNA_EXTRACTION());
58

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

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

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

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

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

    
128
    }
129

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

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

    
147
                String preservationType = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preservationType"));
148

    
149
                Double preservationTemperature = AbcdParseUtility.parseFirstDouble(((Element) node).getElementsByTagName(prefix+"preservationTemperature"), report);
150
                preservation.setTemperature(preservationTemperature);
151
            }
152
        }
153
    }
154

    
155

    
156
}
(1-1/2)