Project

General

Profile

Download (4.67 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
d* Copyright (C) 2007 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

    
10
package eu.etaxonomy.cdm.io.dwca.out;
11

    
12
import java.io.FileNotFoundException;
13
import java.io.IOException;
14
import java.io.PrintWriter;
15
import java.io.UnsupportedEncodingException;
16

    
17
import org.apache.commons.lang.StringUtils;
18
import org.apache.log4j.Logger;
19

    
20
import eu.etaxonomy.cdm.model.common.CdmBase;
21
import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
22
import eu.etaxonomy.cdm.model.reference.Reference;
23
import eu.etaxonomy.cdm.model.taxon.Taxon;
24
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
25

    
26
/**
27
 * @author a.mueller
28
 * @since 20.04.2011
29
 */
30
public class DwcaReferenceExport extends DwcaDataExportBase {
31

    
32
    private static final long serialVersionUID = -8334741499089219441L;
33

    
34
    private static final Logger logger = Logger.getLogger(DwcaReferenceExport.class);
35

    
36
	protected static final String fileName = "reference.txt";
37
	private static final String ROW_TYPE = "http://rs.gbif.org/terms/1.0/Reference";
38

    
39
	private DwcaMetaDataRecord metaRecord;
40

    
41
	/**
42
	 * Constructor
43
	 */
44
	public DwcaReferenceExport(DwcaTaxExportState state) {
45
		super();
46
		this.ioName = this.getClass().getSimpleName();
47
		metaRecord = new DwcaMetaDataRecord(! IS_CORE, fileName, ROW_TYPE);
48
        state.addMetaRecord(metaRecord);
49
        file = DwcaTaxExportFile.REFERENCE;
50
	}
51

    
52
	@Override
53
	protected void doInvoke(DwcaTaxExportState state){}
54

    
55
    /**
56
     * @param state
57
     * @param node
58
     * @throws IOException
59
     * @throws FileNotFoundException
60
     * @throws UnsupportedEncodingException
61
     */
62
    @Override
63
    protected void handleTaxonNode(DwcaTaxExportState state,
64
            TaxonNode node)
65
            throws IOException, FileNotFoundException, UnsupportedEncodingException {
66
        try {
67
            //sec
68
            DwcaReferenceRecord record = new DwcaReferenceRecord(metaRecord, state.getConfig());
69
            Taxon taxon = CdmBase.deproxy(node.getTaxon());
70
            Reference sec = taxon.getSec();
71
            if (sec != null && ! state.recordExists(file, sec)){
72
            	handleReference(state, record, sec, taxon);
73
            	PrintWriter writer = createPrintWriter(state, file);
74
                record.write(state, writer);
75
            	state.addExistingRecord(file, sec);
76
            }
77

    
78
            //nomRef
79
            record = new DwcaReferenceRecord(metaRecord, state.getConfig());
80
            INomenclaturalReference nomRefI = taxon.getName().getNomenclaturalReference();
81
            Reference nomRef = CdmBase.deproxy(nomRefI, Reference.class);
82
            if (nomRef != null && ! state.recordExists(file, nomRef)){
83
            	handleReference(state, record, nomRef, taxon);
84
            	PrintWriter writer = createPrintWriter(state, file);
85
                record.write(state, writer);
86
            	state.addExistingRecord(file, nomRef);
87
            }
88

    
89
        } catch (Exception e) {
90
            String message = "Unexpected exception: " + e.getMessage();
91
            state.getResult().addException(e, message);
92
        }finally{
93
            flushWriter(state, file);
94
        }
95
    }
96

    
97
	private void handleReference(DwcaTaxExportState state, DwcaReferenceRecord record, Reference reference, Taxon taxon) {
98

    
99
		record.setId(taxon.getId());
100
		record.setUuid(taxon.getUuid());
101

    
102
		record.setISBN_ISSN(StringUtils.isNotBlank(reference.getIsbn())? reference.getIsbn(): reference.getIssn());
103
		record.setUri(reference.getUri());
104
		record.setDoi(reference.getDoiString());
105
		record.setLsid(reference.getLsid());
106
		//TODO microreference
107
		record.setBibliographicCitation(reference.getTitleCache());
108
		record.setTitle(reference.getTitle());
109
		record.setCreator(reference.getAuthorship());
110
		record.setDate(reference.getDatePublished());
111
		record.setSource(reference.getInReference()==null?null:reference.getInReference().getTitleCache());
112

    
113
		//FIXME abstracts, remarks, notes
114
		record.setDescription(reference.getReferenceAbstract());
115
		//FIXME
116
		record.setSubject(null);
117

    
118
		//TODO missing, why ISO639-1 better 639-3
119
		record.setLanguage(null);
120
		record.setRights(reference.getRights());
121
		//TODO
122
		record.setTaxonRemarks(null);
123
		//TODO
124
		record.setType(null);
125
	}
126

    
127
	@Override
128
	protected boolean doCheck(DwcaTaxExportState state) {
129
		boolean result = true;
130
		logger.warn("No check implemented for " + this.ioName);
131
		return result;
132
	}
133

    
134

    
135
	@Override
136
	public boolean isIgnore(DwcaTaxExportState state) {
137
		return ! state.getConfig().isDoReferences();
138
	}
139

    
140
}
(15-15/33)