Project

General

Profile

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

    
12
import java.util.Date;
13
import java.util.UUID;
14

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

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

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

    
40
    private final String prefix;
41

    
42
    private final Abcd206ImportReport report;
43

    
44
    private final ICdmApplicationConfiguration cdmAppController;
45

    
46
    public AbcdDnaParser(String prefix, Abcd206ImportReport report, ICdmApplicationConfiguration cdmAppController) {
47
        this.prefix = prefix;
48
        this.report = report;
49
        this.cdmAppController = cdmAppController;
50
    }
51

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

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

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

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

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

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

    
126
    }
127

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

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

    
145
                String preservationType = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preservationType"));
146

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

    
153

    
154
}
(1-1/2)