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.
9 package eu
.etaxonomy
.cdm
.io
.berlinModel
.out
;
11 import java
.sql
.Connection
;
12 import java
.sql
.PreparedStatement
;
13 import java
.sql
.SQLException
;
14 import java
.util
.List
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.springframework
.stereotype
.Component
;
18 import org
.springframework
.transaction
.TransactionStatus
;
20 import eu
.etaxonomy
.cdm
.io
.berlinModel
.BerlinModelTransformer
;
21 import eu
.etaxonomy
.cdm
.io
.common
.Source
;
22 import eu
.etaxonomy
.cdm
.io
.common
.IImportConfigurator
.DO_REFERENCES
;
23 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.CdmDbExportMapping
;
24 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.CreatedAndNotesMapper
;
25 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.DbBooleanMapper
;
26 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.DbObjectMapper
;
27 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.DbStringMapper
;
28 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.DbTimePeriodMapper
;
29 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.IExportTransformer
;
30 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.IdMapper
;
31 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.MethodMapper
;
32 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
33 /*import eu.etaxonomy.cdm.model.reference.Article;
34 import eu.etaxonomy.cdm.model.reference.BookSection;*/
35 import eu
.etaxonomy
.cdm
.model
.reference
.IArticle
;
36 import eu
.etaxonomy
.cdm
.model
.reference
.IBookSection
;
37 import eu
.etaxonomy
.cdm
.model
.reference
.IInProceedings
;
38 import eu
.etaxonomy
.cdm
.model
.reference
.IPrintedUnitBase
;
39 /*import eu.etaxonomy.cdm.model.reference.InProceedings;
40 import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;*/
41 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
42 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
;
43 //import eu.etaxonomy.cdm.model.reference.Thesis;
52 public class BerlinModelReferenceExport
extends BerlinModelExportBase
<Reference
> {
53 private static final Logger logger
= Logger
.getLogger(BerlinModelReferenceExport
.class);
55 private static int modCount
= 1000;
56 private static final String dbTableName
= "Reference";
57 private static final String pluralString
= "references";
58 private static final Class
<?
extends CdmBase
> standardMethodParameter
= Reference
.class;
60 public BerlinModelReferenceExport(){
65 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
68 protected boolean doCheck(BerlinModelExportState state
){
69 boolean result
= true;
70 logger
.warn("Checking for References not yet implemented");
71 //result &= checkArticlesWithoutJournal(bmiConfig);
72 //result &= checkPartOfJournal(bmiConfig);
77 private CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
> getMapping(){
78 String tableName
= dbTableName
;
79 CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
> mapping
= new CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
>(tableName
);
80 mapping
.addMapper(IdMapper
.NewInstance("RefId"));
81 mapping
.addMapper(MethodMapper
.NewInstance("RefCategoryFk", this));
82 mapping
.addMapper(MethodMapper
.NewInstance("RefCache", this));
83 mapping
.addMapper(MethodMapper
.NewInstance("NomRefCache", this));
84 mapping
.addMapper(DbBooleanMapper
.NewFalseInstance("isProtectedTitleCache","PreliminaryFlag"));
86 mapping
.addMapper(DbObjectMapper
.NewInstance("authorship", "NomAuthorTeamFk"));
87 mapping
.addMapper(MethodMapper
.NewInstance("RefAuthorString", this));
89 mapping
.addMapper(DbStringMapper
.NewInstance("title", "Title"));
90 // mapping.addMapper(MethodMapper.NewInstance("Title", this));
92 // mapping.addMapper(DbStringMapper.NewInstance("title", "NomTitleAbbrev"));
93 mapping
.addMapper(MethodMapper
.NewInstance("NomTitleAbbrev", this));
97 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("edition", "Edition"));
98 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("volume", "Volume"));
99 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("series", "Series"));
100 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("pages", "PageString"));
101 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("isbn", "ISBN"));
102 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("issn", "ISSN"));
103 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("publisher", "Publisher"));
104 mapping
.addMapper(DbStringMapper
.NewFacultativeInstance("placePublished", "PublicationTown"));
105 mapping
.addMapper(DbTimePeriodMapper
.NewInstance("datePublished", "RefYear"));
106 mapping
.addMapper(MethodMapper
.NewInstance("ThesisFlag", this));
108 mapping
.addMapper(CreatedAndNotesMapper
.NewInstance());
113 // ,[InformalRefCategory]
122 protected void doInvoke(BerlinModelExportState state
){
124 logger
.info("start make "+pluralString
+" ...");
125 boolean success
= true ;
129 TransactionStatus txStatus
= startTransaction(true);
131 List
<Reference
> list
= getReferenceService().list(null,100000000, 0,null,null);
133 CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
> mapping
= getMapping();
134 mapping
.initialize(state
);
137 for (Reference
<?
> ref
: list
){
138 doCount(count
++, modCount
, pluralString
);
139 success
&= mapping
.invoke(ref
);
141 //Prepare InRefStatement
142 logger
.info("start make inRefences ...");
143 String inRefSql
= "UPDATE Reference SET InRefFk = ? WHERE RefId = ?";
144 Connection con
= state
.getConfig().getDestination().getConnection();
145 PreparedStatement stmt
= con
.prepareStatement(inRefSql
);
147 for (Reference
<?
> ref
: list
){
148 doCount(count
++, modCount
, "inReferences");
149 success
&= invokeInRef(ref
, state
, stmt
);
152 commitTransaction(txStatus
);
153 logger
.info("end make "+pluralString
+" ..." + getSuccessString(success
));
155 state
.setUnsuccessfull();
158 }catch(SQLException e
){
160 logger
.error(e
.getMessage());
161 state
.setUnsuccessfull();
166 protected boolean invokeInRef(Reference ref
, BerlinModelExportState state
, PreparedStatement stmt
) {
170 Reference
<?
> inRef
= getInRef(ref
);
174 Integer inRefId
= state
.getDbId(inRef
);
175 Integer refId
= state
.getDbId(ref
);
177 stmt
.setInt(1, inRefId
);
178 stmt
.setInt(2, refId
);
179 stmt
.executeUpdate();
181 } catch (SQLException e
) {
182 logger
.error("SQLException during inRef invoke for reference " + ref
.getTitleCache() + ": " + e
.getMessage());
190 private Reference
<?
> getInRef(Reference
<?
> ref
){
192 if (ref
.getType().equals(ReferenceType
.Article
)){
193 return (Reference
)((IArticle
)ref
).getInJournal();
194 }else if (ref
.getType().equals(ReferenceType
.BookSection
)){
195 return (Reference
)((IBookSection
)ref
).getInBook();
196 }else if (ref
.getType().equals(ReferenceType
.InProceedings
)){
197 return (Reference
) ((IInProceedings
)ref
).getInProceedings();
198 }else if (ref
.getType().isPrintedUnit()){
199 return (Reference
)((IPrintedUnitBase
)ref
).getInSeries();
206 protected boolean doDelete(BerlinModelExportState state
){
207 BerlinModelExportConfigurator bmeConfig
= state
.getConfig();
210 Source destination
= bmeConfig
.getDestination();
213 sql
= "DELETE FROM RelReference";
214 destination
.setQuery(sql
);
215 destination
.update(sql
);
217 sql
= "DELETE FROM Reference";
218 destination
.setQuery(sql
);
219 destination
.update(sql
);
225 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
227 protected boolean isIgnore(BerlinModelExportState state
){
228 if (state
.getConfig().getDoReferences().equals(DO_REFERENCES
.ALL
)){
235 //called by MethodMapper
236 @SuppressWarnings("unused")
237 private static Integer
getRefCategoryFk(Reference
<?
> ref
){
238 return BerlinModelTransformer
.ref2refCategoryId(ref
);
241 //called by MethodMapper
242 @SuppressWarnings("unused")
243 private static String
getRefCache(Reference
<?
> ref
){
244 if (ref
.isProtectedTitleCache()){
245 return ref
.getTitleCache();
251 //called by MethodMapper
252 @SuppressWarnings("unused")
253 private static String
getNomRefCache(Reference
<?
> ref
){
254 if (ref
.isProtectedTitleCache()){
255 return ref
.getTitleCache();
261 // //called by MethodMapper
262 // @SuppressWarnings("unused")
263 // private static String getTtile(StrictReferenceBase<?> ref){
264 //// if (ref.isProtectedTitleCache()){
265 //// return ref.getTitleCache();
272 //called by MethodMapper
273 @SuppressWarnings("unused")
274 private static String
getNomTitleAbbrev(Reference
<?
> ref
){
276 if (/*ref.isNomenclaturallyRelevant() &&*/ ref
.getTitle() != null && ref
.getTitle().length() <=80){
277 return ref
.getTitle();
285 //called by MethodMapper
286 @SuppressWarnings("unused")
287 private static String
getRefAuthorString(Reference
<?
> ref
){
291 return (ref
.getAuthorship() == null)?
null: ref
.getAuthorship().getTitleCache();
296 //called by MethodMapper
297 @SuppressWarnings("unused")
298 private static Boolean
getPreliminaryFlag(Reference
<?
> ref
){
299 if (ref
.isProtectedTitleCache()){
306 //called by MethodMapper
307 @SuppressWarnings("unused")
308 private static Boolean
getThesisFlag(Reference
<?
> ref
){
309 if (ref
.getType().equals(ReferenceType
.Thesis
)){
318 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
321 public Class
<?
extends CdmBase
> getStandardMethodParameter() {
322 return standardMethodParameter
;