Project

General

Profile

Download (6.35 KB) Statistics
| Branch: | Revision:
1
/**
2
* 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;
11

    
12
import java.io.File;
13
import java.net.MalformedURLException;
14
import java.net.URI;
15
import java.net.URISyntaxException;
16
import java.util.HashSet;
17
import java.util.Set;
18

    
19
import org.apache.log4j.Logger;
20
import org.springframework.stereotype.Component;
21
import org.springframework.transaction.TransactionStatus;
22

    
23
import eu.etaxonomy.cdm.api.service.ICommonService;
24
import eu.etaxonomy.cdm.app.wp6.palmae.config.PalmaeProtologueImportConfigurator;
25
import eu.etaxonomy.cdm.io.common.CdmImportBase;
26
import eu.etaxonomy.cdm.io.common.DefaultImportState;
27
import eu.etaxonomy.cdm.model.description.Feature;
28
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
29
import eu.etaxonomy.cdm.model.description.TextData;
30
import eu.etaxonomy.cdm.model.media.Media;
31
import eu.etaxonomy.cdm.model.media.MediaRepresentation;
32
import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
33
import eu.etaxonomy.cdm.model.name.TaxonName;
34

    
35
/**
36
 * @author a.mueller
37
 * @since 29.07.2008
38
 */
39
@Component
40
public class ProtologueImport
41
        extends CdmImportBase<PalmaeProtologueImportConfigurator, DefaultImportState<PalmaeProtologueImportConfigurator>>{
42

    
43
    private static final long serialVersionUID = 4580327331805229644L;
44
    private static final Logger logger = Logger.getLogger(ProtologueImport.class);
45

    
46
	private String pluralString = "protologues";
47
	private static int modCount = 200;
48

    
49
	public ProtologueImport(){
50
		super();
51
	}
52

    
53
	@Override
54
    public void doInvoke(DefaultImportState<PalmaeProtologueImportConfigurator> state){
55
		logger.info("start make Protologues from files ...");
56

    
57
		Set<TaxonName> nameStore = new HashSet<>();
58

    
59
		PalmaeProtologueImportConfigurator config = state.getConfig();
60
		File source = config.getSource();
61
		TaxonName name;
62
		TransactionStatus txStatus = startTransaction(false);
63
		int count = 0;
64
		if (source.isDirectory()){
65
			for (File file : source.listFiles() ){
66
				if (file.isFile()){
67
					doCount(count++, modCount, pluralString);
68
					name = importFile(file, state);
69
					storeName(nameStore, name, state);
70
				}
71
			}
72
		}else{
73
			if (source.isFile()){
74
				name = importFile(source, state);
75
				storeName(nameStore, name, state);
76
			}
77
		}
78
		getNameService().save(nameStore);
79
		commitTransaction(txStatus);
80
		logger.info("end make Protologues from files ...");
81
		return;
82
	}
83

    
84
	private void storeName(Set<TaxonName> nameStore, TaxonName name, DefaultImportState<PalmaeProtologueImportConfigurator> state){
85
		if (name != null){
86
			nameStore.add(name);
87
			return;
88
		}else{
89
			state.setUnsuccessfull();
90
			return;
91
		}
92
	}
93

    
94
	private TaxonName importFile(File file, DefaultImportState<PalmaeProtologueImportConfigurator> state){
95
		String originalSourceId = file.getName();
96
		originalSourceId =originalSourceId.replace("_P.pdf", "");
97
		originalSourceId =originalSourceId.replace("_tc_", "_tn_");
98
		String namespace = state.getConfig().getOriginalSourceTaxonNamespace();
99

    
100

    
101
		//for testing only
102
		TaxonName taxonName = getTaxonName(originalSourceId, namespace);
103
		if (taxonName == null){
104
			logger.warn("Name not found for " + originalSourceId);
105
			return null;
106
		}
107

    
108
//		TaxonNameDescription nameDescription = null;
109
//		if (taxonName.getDescriptions().size() > 0){
110
//			nameDescription = (TaxonNameDescription)taxonName.getDescriptions().iterator().next();
111
//		}else{
112
//			nameDescription = new TaxonNameDescription();
113
//		}
114
		try{
115
			Media media = getMedia(state, file);
116
			if (media.getRepresentations().size() > 0){
117
				TaxonNameDescription description = getNameDescription(taxonName);
118
				TextData protolog = TextData.NewInstance(Feature.PROTOLOGUE());
119
				protolog.addMedia(media);
120
				description.addElement(protolog);
121
				return taxonName;
122
			}
123

    
124
		}catch(NullPointerException e){
125
			logger.warn("MediaUrl and/or MediaPath not set. Could not get protologue.");
126
			return null;
127
		} catch (URISyntaxException e) {
128
            logger.warn("URISyntaxException when reading URI. Could not get protologue.");
129
            return null;
130
        }
131
		return null;
132
	}
133

    
134
	private TaxonNameDescription getNameDescription(TaxonName taxonName) {
135
		TaxonNameDescription result;
136
		if (taxonName.getDescriptions().size()> 0){
137
			result = taxonName.getDescriptions().iterator().next();
138
		}else{
139
			result = TaxonNameDescription.NewInstance();
140
			taxonName.addDescription(result);
141
		}
142

    
143
		return result;
144
	}
145

    
146
	private Media getMedia(DefaultImportState<PalmaeProtologueImportConfigurator> state, File file) throws URISyntaxException{
147
		try {
148
			//File file = (File)state.getConfig().getSource();
149
			String url = file.toURI().toURL().toString();
150
			String mimeTypePdf = "application/pdf";
151
			String suffixPdf = "pdf";
152
			String urlStringPdf = state.getConfig().getUrlString() + file.getName();
153
			URI uri = new URI(urlStringPdf);
154
			Integer size = null;
155

    
156
			if (file.exists()){
157
				Media media = Media.NewInstance();
158

    
159
				MediaRepresentation representationPdf = MediaRepresentation.NewInstance(mimeTypePdf, suffixPdf);
160
			    representationPdf.addRepresentationPart(MediaRepresentationPart.NewInstance(uri, size));
161
			    media.addRepresentation(representationPdf);
162
			    return media;
163
			}else{
164
				return null;
165
			}
166
		} catch (MalformedURLException e) {
167
			logger.error(e.getMessage());
168
			return null;
169
		}
170
 	}
171

    
172
	private TaxonName getTaxonName(String originalSourceId, String namespace){
173
		TaxonName result;
174
		ICommonService commonService = getCommonService();
175

    
176
		result = commonService.getSourcedObjectByIdInSource(TaxonName.class, originalSourceId , namespace);
177
		if (result == null){
178
			logger.warn("Taxon (id: " + originalSourceId + ", namespace: " + namespace + ") could not be found");
179
		}
180
		return result;
181
	}
182

    
183
	@Override
184
    public boolean doCheck(@SuppressWarnings("rawtypes") DefaultImportState state){
185
		return true;
186
	}
187

    
188
	@Override
189
    protected boolean isIgnore(DefaultImportState state){
190
		return false; // ! state.getConfig();
191
	}
192

    
193
	protected void doCount(int count, int modCount, String pluralString){
194
		if ((count % modCount ) == 0 && count!= 0 ){ logger.info(pluralString + " handled: " + (count));}
195
	}
196
}
(3-3/3)