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
.berlinModel
.in
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.Collection
;
15 import java
.util
.HashMap
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.springframework
.stereotype
.Component
;
22 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
23 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.validation
.BerlinModelRefDetailImportValidator
;
24 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
;
25 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
26 import eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
;
27 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
28 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.DO_REFERENCES
;
29 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
31 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
34 * This class imports all preliminary refdetails as generic references. Non preliminary
35 * refdetails are imported as microcitation together with the record using the refdetail
36 * and therefore left out here.
43 public class BerlinModelRefDetailImport
extends BerlinModelImportBase
{
44 private static final Logger logger
= Logger
.getLogger(BerlinModelRefDetailImport
.class);
46 public static final String NOM_REFDETAIL_NAMESPACE
= "NomRefDetail";
47 public static final String BIBLIO_REFDETAIL_NAMESPACE
= "BiblioRefDetail";
48 ReferenceFactory refFactory
;
52 private int modCount
= 1000;
53 private static final String pluralString
= "ref-details";
54 private static final String dbTableName
= "RefDetail";
57 public BerlinModelRefDetailImport(){
62 //type to count the references nomReferences that have been created and saved
63 private class RefCounter
{
64 RefCounter() {nomRefCount
= 0; biblioRefCount
= 0;};
67 public String
toString(){return String
.valueOf(nomRefCount
) + "," +String
.valueOf(biblioRefCount
);};
73 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
76 protected String
getIdQuery() {
77 String strQuery
= " SELECT RefDetail.RefDetailId " +
79 " WHERE (RefDetail.PreliminaryFlag = 1)";
85 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
88 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
90 " SELECT RefDetail.*, Reference.RefYear " +
92 " INNER JOIN Reference ON Reference.RefId = RefDetail.RefFk " +
93 " WHERE (RefDetail.refDetailId IN (" + ID_LIST_TOKEN
+ ")) AND " +
94 " (RefDetail.PreliminaryFlag = 1)";
100 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
102 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
103 boolean success
= true;
104 logger
.info("start make " + getPluralString() + " ...");
106 BerlinModelImportConfigurator config
= state
.getConfig();
107 Map
<Integer
, ReferenceBase
> biblioRefDetailsToSave
= new HashMap
<Integer
, ReferenceBase
>();
108 Map
<Integer
, ReferenceBase
> nomRefDetailsToSave
= new HashMap
<Integer
, ReferenceBase
>();
110 ResultSet rs
= partitioner
.getResultSet();
114 RefCounter refCounter
= new RefCounter();
117 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info("RefDetails handled: " + (i
-1) );}
118 int refDetailId
= rs
.getInt("refDetailId");
119 String refYear
= rs
.getString("RefYear");
122 String fullNomRefCache
= rs
.getString("fullNomRefCache");
123 if ( CdmUtils
.isNotEmpty(fullNomRefCache
) ){
124 ReferenceBase genericReference
= refFactory
.newGeneric();
125 genericReference
.setTitleCache(fullNomRefCache
);
126 nomRefDetailsToSave
.put(refDetailId
, genericReference
);
128 genericReference
.setDatePublished(ImportHelper
.getDatePublished(refYear
));
129 //refId, created, notes
130 doIdCreatedUpdatedNotes(state
, genericReference
, rs
, refDetailId
, NOM_REFDETAIL_NAMESPACE
);
131 refCounter
.nomRefCount
++;
135 String fullRefCache
= rs
.getString("fullRefCache");
136 if ( CdmUtils
.isNotEmpty(fullRefCache
) && ! fullRefCache
.equals(fullNomRefCache
)){
137 ReferenceBase genericReference
= refFactory
.newGeneric();
138 genericReference
.setTitleCache(fullRefCache
);
139 biblioRefDetailsToSave
.put(refDetailId
, genericReference
);
141 genericReference
.setDatePublished(ImportHelper
.getDatePublished(refYear
));
142 //refId, created, notes
143 doIdCreatedUpdatedNotes(state
, genericReference
, rs
, refDetailId
, BIBLIO_REFDETAIL_NAMESPACE
);
144 refCounter
.biblioRefCount
++;
147 //save and store in map
148 logger
.info("Save nomenclatural preliminary references (" + refCounter
.nomRefCount
+ ")");
149 partitioner
.startDoSave();
150 Collection
<ReferenceBase
> col
= nomRefDetailsToSave
.values();
151 getReferenceService().save(col
);
152 logger
.info("Save bibliographical preliminary references (" + refCounter
.biblioRefCount
+")");
153 getReferenceService().save(biblioRefDetailsToSave
.values());
159 } catch (SQLException e
) {
160 logger
.error("SQLException:" + e
);
169 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
171 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
176 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
178 //no related objects needed
184 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
187 protected boolean doCheck(BerlinModelImportState state
){
188 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelRefDetailImportValidator();
189 return validator
.validate(state
);
194 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
197 protected String
getTableName() {
202 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
205 public String
getPluralString() {
210 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
212 protected boolean isIgnore(BerlinModelImportState state
){
213 DO_REFERENCES doReference
= state
.getConfig().getDoReferences();
214 return (doReference
== IImportConfigurator
.DO_REFERENCES
.NONE
|| doReference
== IImportConfigurator
.DO_REFERENCES
.CONCEPT_REFERENCES
);