Project

General

Profile

Download (7.64 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

    
13
import org.apache.commons.lang3.StringUtils;
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.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
import eu.etaxonomy.cdm.model.term.DefinedTerm;
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 = null;
53
        if (StringUtils.isNotBlank(state.getDataHolder().getFieldNumber())){
54
            fieldUnit = state.getFieldUnit(state.getDataHolder().getFieldNumber());
55
        }
56
        if (fieldUnit == null){
57
            fieldUnit = state.getLastFieldUnit();
58
            if (fieldUnit == null){
59
                fieldUnit = FieldUnit.NewInstance();
60
                if (StringUtils.isNotBlank(state.getDataHolder().getFieldNumber())){
61
                    fieldUnit.setFieldNumber(state.getDataHolder().getFieldNumber());
62
                }
63
            }
64

    
65
            state.setFieldUnit(fieldUnit);
66
            state.setLastFieldUnit(fieldUnit);
67
        }
68
        DnaSample dnaSample = DnaSample.NewInstance();
69
        DerivationEvent.NewSimpleInstance(fieldUnit, dnaSample, DerivationEventType.DNA_EXTRACTION());
70

    
71
        //specimen unit
72
        NodeList specimenUnitList = item.getElementsByTagName(prefix+"SpecimenUnit");
73
        if(specimenUnitList.item(0)!=null && specimenUnitList.item(0) instanceof Element){
74
            parseSpecimenUnit((Element)specimenUnitList.item(0), dnaSample);
75
        }
76
        NodeList unitExtensions = item.getElementsByTagName(prefix+"UnitExtensions");
77
        System.err.println(item.toString());
78
        for(int i=0;i<unitExtensions.getLength();i++){
79
            if(unitExtensions.item(i) instanceof Element){
80
                Element unitExtension = (Element) unitExtensions.item(i);
81
                NodeList ggbn = unitExtension.getElementsByTagName("ggbn:GGBN");
82
                if(ggbn.getLength()>0){
83
                    AbcdGgbnParser ggbnParser = new AbcdGgbnParser(report, cdmAppController);
84
                    ggbnParser.parse(ggbn, dnaSample, state);
85
                }
86
            }
87
        }
88

    
89
        return dnaSample;
90
    }
91

    
92
    private void parseSpecimenUnit(Element item, DnaSample dnaSample) {
93
        NodeList preparationsList = item.getElementsByTagName(prefix+"Preparations");
94
        if(preparationsList.item(0)!=null && preparationsList.item(0) instanceof Element){
95
            parsePreparations((Element) preparationsList.item(0), dnaSample);
96
        }
97
        NodeList preservationsList = item.getElementsByTagName(prefix+"Preservations");
98
        if(preservationsList.item(0)!=null && preservationsList.item(0) instanceof Element){
99
            parsePreservations((Element) preservationsList.item(0), dnaSample);
100
        }
101
    }
102

    
103
    private void parsePreparations(Element item, DnaSample dnaSample) {
104
        NodeList preparationList = item.getElementsByTagName(prefix+"preparation");
105
        for(int i=0;i<preparationList.getLength();i++){
106
            Node node = preparationList.item(i);
107
            if(node instanceof Element){
108
                DerivationEvent derivedFrom = dnaSample.getDerivedFrom();
109

    
110
                String preparationType = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preparationType"));
111

    
112
                //preparation materials
113
                String preparationMaterials = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preparationMaterials"));
114
                derivedFrom.setDescription(preparationMaterials);
115
                //preparation actor
116
                NodeList preparationAgentList = ((Element) node).getElementsByTagName(prefix+"preparationAgent");
117
                if(preparationAgentList.item(0)!=null && preparationAgentList.item(0) instanceof Element){
118
                    AgentBase<?> preparationAgent = parsePreparationAgent((Element)preparationAgentList.item(0));
119
                    derivedFrom.setActor(preparationAgent);
120
                }
121
                //preparation date
122
                Date preparationDate = AbcdParseUtility.parseFirstDate(((Element) node).getElementsByTagName(prefix+"preparationDate"));
123
                derivedFrom.setTimeperiod(TimePeriod.NewInstance(preparationDate, null));
124
                //sample designation
125
                NodeList sampleDesignationsList = ((Element) node).getElementsByTagName(prefix+"sampleDesignations");
126
                if(sampleDesignationsList.item(0)!=null && sampleDesignationsList.item(0) instanceof Element){
127
                    parseSampleDesignations((Element)sampleDesignationsList.item(0), dnaSample);
128
                }
129
            }
130
        }
131
    }
132

    
133
    /**
134
     * @param item
135
     * @param dnaSample
136
     */
137
    private void parseSampleDesignations(Element item, DnaSample dnaSample) {
138
        NodeList sampleDesignationList = item.getElementsByTagName(prefix+"sampleDesignation");
139
        for(int i=0;i<sampleDesignationList.getLength();i++){
140
            dnaSample.addIdentifier(sampleDesignationList.item(i).getTextContent(), (DefinedTerm)cdmAppController.getTermService().find(DefinedTerm.uuidSampleDesignation));
141
        }
142

    
143
    }
144

    
145
    private AgentBase<?> parsePreparationAgent(Element item) {
146
        AgentBase<?> agentBase = null;
147
        NodeList personList = item.getElementsByTagName(prefix+"Person");
148
        if(personList.item(0)!=null && personList.item(0) instanceof Element){
149
            agentBase = new AbcdPersonParser(prefix,report, cdmAppController).parse((Element)personList.item(0));
150
        }
151
        return agentBase;
152
    }
153

    
154
    private void parsePreservations(Element item, DnaSample dnaSample) {
155
        NodeList preservationList = item.getElementsByTagName(prefix+"preservation");
156
        for(int i=0;i<preservationList.getLength();i++){
157
            Node node = preservationList.item(i);
158
            if(node instanceof Element){
159
                PreservationMethod preservation = PreservationMethod.NewInstance();
160
                dnaSample.setPreservation(preservation);
161

    
162
                String preservationType = AbcdParseUtility.parseFirstTextContent(((Element) node).getElementsByTagName(prefix+"preservationType"));
163

    
164
                Double preservationTemperature = AbcdParseUtility.parseFirstDouble(((Element) node).getElementsByTagName(prefix+"preservationTemperature"), report);
165
                preservation.setTemperature(preservationTemperature);
166
            }
167
        }
168
    }
169

    
170

    
171

    
172

    
173

    
174
}
(1-1/2)