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.util.HashSet;
16
import java.util.Set;
17

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

    
22
import eu.etaxonomy.cdm.api.service.ICommonService;
23
import eu.etaxonomy.cdm.app.wp6.palmae.config.PalmaeProtologueImportConfigurator;
24
import eu.etaxonomy.cdm.common.CdmUtils;
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
/**
37
 * @author a.mueller
38
 * @since 29.07.2008
39
 */
40
@Component
41
public class ProtologueImport
42
        extends CdmImportBase<PalmaeProtologueImportConfigurator, DefaultImportState<PalmaeProtologueImportConfigurator>>{
43

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

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

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

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

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

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

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

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

    
101

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

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

    
125
		}catch(NullPointerException e){
126
			logger.warn("MediaUrl and/or MediaPath not set. Could not get protologue.");
127
			return null;
128
		}
129
		return null;
130

    
131
	}
132

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

    
142
		return result;
143
	}
144

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

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

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

    
170
 	}
171

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

    
176
		result = (TaxonName)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

    
184
	@Override
185
    public boolean doCheck(DefaultImportState state){
186
		boolean result = true;
187
		return result;
188
	}
189

    
190
	/* (non-Javadoc)
191
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
192
	 */
193
	@Override
194
    protected boolean isIgnore(DefaultImportState state){
195
		return false; // ! state.getConfig();
196
	}
197

    
198
	protected void doCount(int count, int modCount, String pluralString){
199
		if ((count % modCount ) == 0 && count!= 0 ){ logger.info(pluralString + " handled: " + (count));}
200
	}
201

    
202

    
203
}
(3-3/3)