2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
;
13 import java
.net
.MalformedURLException
;
15 import java
.util
.HashSet
;
18 import org
.apache
.log4j
.Logger
;
19 import org
.springframework
.stereotype
.Component
;
20 import org
.springframework
.transaction
.TransactionStatus
;
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
.CdmIoBase
;
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
.TaxonNameBase
;
42 public class ProtologueImport
extends CdmIoBase
<DefaultImportState
<PalmaeProtologueImportConfigurator
>> {
43 private static final Logger logger
= Logger
.getLogger(ProtologueImport
.class);
45 private String pluralString
= "protologues";
46 private static int modCount
= 200;
48 public ProtologueImport(){
52 public void doInvoke(DefaultImportState
<PalmaeProtologueImportConfigurator
> state
){
53 logger
.info("start make Protologues from files ...");
55 Set
<TaxonNameBase
> nameStore
= new HashSet
<TaxonNameBase
>();
57 PalmaeProtologueImportConfigurator config
= state
.getConfig();
58 File source
= config
.getSource();
60 TransactionStatus txStatus
= startTransaction(false);
62 if (source
.isDirectory()){
63 for (File file
: source
.listFiles() ){
65 doCount(count
++, modCount
, pluralString
);
66 name
= importFile(file
, state
);
67 storeName(nameStore
, name
, state
);
72 name
= importFile(source
, state
);
73 storeName(nameStore
, name
, state
);
76 getNameService().save(nameStore
);
77 commitTransaction(txStatus
);
78 logger
.info("end make Protologues from files ...");
82 private void storeName(Set
<TaxonNameBase
> nameStore
, TaxonNameBase name
, DefaultImportState
<PalmaeProtologueImportConfigurator
> state
){
87 state
.setUnsuccessfull();
92 private TaxonNameBase
importFile(File file
, DefaultImportState
<PalmaeProtologueImportConfigurator
> state
){
93 String originalSourceId
= file
.getName();
94 originalSourceId
=originalSourceId
.replace("_P.pdf", "");
95 originalSourceId
=originalSourceId
.replace("_tc_", "_tn_");
96 String namespace
= state
.getConfig().getOriginalSourceTaxonNamespace();
100 TaxonNameBase taxonName
= getTaxonName(originalSourceId
, namespace
);
101 if (taxonName
== null){
102 logger
.warn("Name not found for " + originalSourceId
);
106 // TaxonNameDescription nameDescription = null;
107 // if (taxonName.getDescriptions().size() > 0){
108 // nameDescription = (TaxonNameDescription)taxonName.getDescriptions().iterator().next();
110 // nameDescription = new TaxonNameDescription();
113 Media media
= getMedia(state
, file
);
114 if (media
.getRepresentations().size() > 0){
115 TaxonNameDescription description
= getNameDescription(taxonName
);
116 TextData protolog
= TextData
.NewInstance(Feature
.PROTOLOGUE());
117 protolog
.addMedia(media
);
118 description
.addElement(protolog
);
122 }catch(NullPointerException e
){
123 logger
.warn("MediaUrl and/or MediaPath not set. Could not get protologue.");
130 private TaxonNameDescription
getNameDescription(TaxonNameBase taxonName
) {
131 TaxonNameDescription result
;
132 if (taxonName
.getDescriptions().size()> 0){
133 result
= (TaxonNameDescription
)taxonName
.getDescriptions().iterator().next();
135 result
= TaxonNameDescription
.NewInstance();
136 taxonName
.addDescription(result
);
142 private Media
getMedia(DefaultImportState
<PalmaeProtologueImportConfigurator
> state
, File file
){
144 //File file = (File)state.getConfig().getSource();
145 String url
= file
.toURI().toURL().toString();
146 String mimeTypePdf
= "application/pdf";
147 String suffixPdf
= "pdf";
148 String urlStringPdf
= state
.getConfig().getUrlString() + file
.getName();
149 URI uri
= CdmUtils
.string2Uri(urlStringPdf
);
153 Media media
= Media
.NewInstance();
155 MediaRepresentation representationPdf
= MediaRepresentation
.NewInstance(mimeTypePdf
, suffixPdf
);
156 representationPdf
.addRepresentationPart(MediaRepresentationPart
.NewInstance(uri
, size
));
157 media
.addRepresentation(representationPdf
);
162 } catch (MalformedURLException e
) {
163 logger
.error(e
.getMessage());
169 private TaxonNameBase
getTaxonName(String originalSourceId
, String namespace
){
170 TaxonNameBase result
;
171 ICommonService commonService
= getCommonService();
173 result
= (TaxonNameBase
)commonService
.getSourcedObjectByIdInSource(TaxonNameBase
.class, originalSourceId
, namespace
);
175 logger
.warn("Taxon (id: " + originalSourceId
+ ", namespace: " + namespace
+ ") could not be found");
181 public boolean doCheck(DefaultImportState state
){
182 boolean result
= true;
187 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
189 protected boolean isIgnore(DefaultImportState state
){
190 return false; // ! state.getConfig();
193 protected void doCount(int count
, int modCount
, String pluralString
){
194 if ((count
% modCount
) == 0 && count
!= 0 ){ logger
.info(pluralString
+ " handled: " + (count
));}