import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_PRINT_SERIES;\r
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_UNKNOWN;\r
import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_WEBSITE;\r
-import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.ALL;\r
-import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.CONCEPT_REFERENCES;\r
-import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.NOMENCLATURAL;\r
import static eu.etaxonomy.cdm.io.common.ImportHelper.NO_OVERWRITE;\r
import static eu.etaxonomy.cdm.io.common.ImportHelper.OBLIGATORY;\r
import static eu.etaxonomy.cdm.io.common.ImportHelper.OVERWRITE;\r
import eu.etaxonomy.cdm.io.common.mapping.CdmSingleAttributeMapperBase;\r
import eu.etaxonomy.cdm.io.common.mapping.DbImportExtensionMapper;\r
import eu.etaxonomy.cdm.io.common.mapping.DbImportMarkerMapper;\r
+import eu.etaxonomy.cdm.io.common.mapping.DbSingleAttributeImportMapperBase;\r
import eu.etaxonomy.cdm.model.agent.Team;\r
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.Marker;\r
import eu.etaxonomy.cdm.model.common.MarkerType;\r
import eu.etaxonomy.cdm.model.reference.IArticle;\r
-import eu.etaxonomy.cdm.model.reference.IBook;\r
import eu.etaxonomy.cdm.model.reference.IBookSection;\r
-import eu.etaxonomy.cdm.model.reference.IJournal;\r
import eu.etaxonomy.cdm.model.reference.IPrintSeries;\r
import eu.etaxonomy.cdm.model.reference.Reference;\r
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
\r
\r
public BerlinModelReferenceImport(){\r
- super();\r
+ super(dbTableName, pluralString);\r
}\r
\r
protected void initializeMappers(BerlinModelImportState state){\r
for (CdmAttributeMapperBase mapper: classMappers){\r
- if (mapper instanceof DbImportExtensionMapper){\r
- ((DbImportExtensionMapper)mapper).initialize(state, Reference.class);\r
+ if (mapper instanceof DbSingleAttributeImportMapperBase){\r
+ DbSingleAttributeImportMapperBase singleMapper = (DbSingleAttributeImportMapperBase)mapper;\r
+ singleMapper.initialize(state, Reference.class);\r
}\r
}\r
return;\r
return null; //not needed\r
}\r
\r
-\r
-// @Override\r
-// protected void doInvoke_old(BerlinModelImportState state){\r
-// logger.info("start make " + getPluralString() + " ...");\r
-//\r
-// boolean success = true;\r
-// initializeMappers(state);\r
-// BerlinModelImportConfigurator config = state.getConfig();\r
-// Source source = config.getSource();\r
-//\r
-// String strSelectId = " SELECT Reference.RefId as refId ";\r
-// String strSelectFull = \r
-// " SELECT Reference.* , InReference.RefId as InRefId, InReference.RefCategoryFk as InRefCategoryFk, " +\r
-// " InInReference.RefId as InInRefId, InInReference.RefCategoryFk as InInRefCategoryFk, " +\r
-// " InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk, RefSource.RefSource " ;\r
-// String strFrom = " FROM Reference AS InInReference " +\r
-// " RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " + \r
-// " RIGHT OUTER JOIN %s ON InReference.RefId = Reference.InRefFk " + \r
-// " LEFT OUTER JOIN RefSource ON Reference.RefSourceFk = RefSource.RefSourceId " +\r
-// " WHERE (1=1) ";\r
-// String strWherePartitioned = " AND (Reference.refId IN ("+ ID_LIST_TOKEN + ") ) "; \r
-// \r
-// String referenceTable = CdmUtils.Nz(state.getConfig().getReferenceIdTable());\r
-// referenceTable = referenceTable.isEmpty() ? " Reference" : referenceTable + " as Reference ";\r
-// String strIdFrom = String.format(strFrom, referenceTable );\r
-// \r
-// \r
-// //test max number of recursions\r
-// String strQueryTestMaxRecursion = strSelectId + strIdFrom + \r
-// " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
-// ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTestMaxRecursion);\r
-// try {\r
-// if (testMaxRecursionResultSet.next() == true){\r
-// logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
-// state.setUnsuccessfull();\r
-// return;\r
-// }\r
-// } catch (SQLException e1) {\r
-// e1.printStackTrace();\r
-// logger.error("There are references with more then 2 in-reference recursion. Maximum number of allowed recursions is 2. Records will not be stored.");\r
-// success = false;\r
-// }\r
-//\r
-// String strSelectIdBase = strSelectId + strIdFrom;\r
-// \r
-// String referenceFilter = CdmUtils.Nz(state.getConfig().getReferenceIdTable());\r
-// if (! referenceFilter.isEmpty()){\r
-// referenceFilter = " AND " + referenceFilter + " ";\r
-// }\r
-// referenceFilter = ""; //don't use it for now\r
-// \r
-// String strIdQueryNoInRef = strSelectIdBase + \r
-// " AND (Reference.InRefFk is NULL) " + referenceFilter;\r
-// String strIdQuery1InRef = strSelectIdBase + \r
-// " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) " + referenceFilter;\r
-// String strIdQuery2InRefs = strSelectIdBase + \r
-// " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) " + referenceFilter;\r
-//\r
-// if (config.getDoReferences() == CONCEPT_REFERENCES){\r
-// strIdQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) " + referenceFilter;\r
-// }\r
-//\r
-// String strRecordQuery = strSelectFull + String.format(strFrom, " Reference ") + strWherePartitioned;\r
-// \r
-// int recordsPerTransaction = config.getRecordsPerTransaction();\r
-// try{\r
-// //NoInRefs\r
-// ResultSetPartitioner partitioner = ResultSetPartitioner.NewInstance(source, strIdQueryNoInRef, strRecordQuery, recordsPerTransaction);\r
-// while (partitioner.nextPartition()){\r
-// partitioner.doPartition(this, state);\r
-// }\r
-// logger.info("end make references with no in-references ... " + getSuccessString(success));\r
-//\r
-// if (config.getDoReferences() == ALL || config.getDoReferences() == NOMENCLATURAL){\r
-//\r
-// //1InRef\r
-// partitioner = ResultSetPartitioner.NewInstance(source, strIdQuery1InRef, strRecordQuery, recordsPerTransaction);\r
-// while (partitioner.nextPartition()){\r
-// partitioner.doPartition(this, state);\r
-// }\r
-// logger.info("end make references with no 1 in-reference ... " + getSuccessString(success));\r
-// \r
-// //2InRefs\r
-// partitioner = ResultSetPartitioner.NewInstance(source, strIdQuery2InRefs, strRecordQuery, recordsPerTransaction);\r
-// while (partitioner.nextPartition()){\r
-// partitioner.doPartition(this, state);\r
-// }\r
-// logger.info("end make references with no 2 in-reference ... " + getSuccessString(success));\r
-// }\r
-//\r
-// } catch (SQLException e) {\r
-// logger.error("SQLException:" + e);\r
-// state.setUnsuccessfull();\r
-// return;\r
-// }\r
-// logger.info("end make " + getPluralString() + " ... " + getSuccessString(success));\r
-// if (! success){\r
-// state.setUnsuccessfull();\r
-// }\r
-// return;\r
-// }\r
-\r
@Override\r
protected void doInvoke(BerlinModelImportState state){\r
logger.info("start make " + getPluralString() + " ...");\r
referenceTable = referenceTable.isEmpty() ? " Reference" : referenceTable + " as Reference ";\r
String strIdFrom = String.format(strFrom, referenceTable );\r
\r
- \r
- //test max number of recursions\r
-// String strQueryTestMaxRecursion = strSelectId + strIdFrom + \r
-// " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
-// ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTestMaxRecursion);\r
-// try {\r
-// if (testMaxRecursionResultSet.next() == true){\r
-// logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
-// state.setUnsuccessfull();\r
-// return;\r
-// }\r
-// } catch (SQLException e1) {\r
-// e1.printStackTrace();\r
-// logger.error("There are references with more then 2 in-reference recursion. Maximum number of allowed recursions is 2. Records will not be stored.");\r
-// success = false;\r
-// }\r
-\r
String strSelectIdBase = strSelectId + strIdFrom;\r
\r
String referenceFilter = CdmUtils.Nz(state.getConfig().getReferenceIdTable());\r
\r
//save and store in map\r
logger.info("Save nomenclatural references (" + refCounter.nomRefCount + ")");\r
- getReferenceService().save(nomRefToSave.values());\r
+ getReferenceService().saveOrUpdate(nomRefToSave.values());\r
logger.info("Save bibliographical references (" + refCounter.referenceCount +")");\r
- getReferenceService().save(biblioRefToSave.values());\r
+ getReferenceService().saveOrUpdate(biblioRefToSave.values());\r
\r
// }//end resultSetList \r
\r
- logger.info("end makeReferences ..." + getSuccessString(success));;\r
+// logger.info("end makeReferences ..." + getSuccessString(success));;\r
return success;\r
} catch (SQLException e) {\r
logger.error("SQLException:" + e);\r
Integer inRefFk = rs.getInt("inRefFk");\r
\r
if (inRefFk != null){\r
+ \r
Reference<?> thisNomRef = getReferenceOnlyFromMaps(relatedNomReferences, relatedBiblioReferences, String.valueOf(refId));\r
Reference<?> thisBiblioRef = getReferenceOnlyFromMaps(relatedBiblioReferences, relatedNomReferences, String.valueOf(refId));\r
\r
boolean inRefExists = false;\r
if (thisNomRef != null){\r
Reference<?> inRef = (nomInReference != null)? nomInReference : biblioInReference;\r
+ if (inRef == null){\r
+ logger.warn("No InRef found for nomRef: " + thisNomRef.getTitleCache() + "; RefId: " + refId + "; inRefFK: " + inRefFk);\r
+ }\r
thisNomRef.setInReference(inRef);\r
nomRefToSave.put(refId, thisNomRef);\r
//remember that an in reference exists\r
inRefExists |= (inRef != null);\r
+ thisNomRef.setTitleCache(null);\r
+ thisNomRef.getTitleCache();\r
}\r
if (thisBiblioRef != null){\r
- Reference<?> inRef = (biblioInReference != null)? biblioInReference : nomInReference;\r
+ Reference<?> inRef = (biblioInReference != null)? biblioInReference : nomInReference ;\r
+ if (inRef == null){\r
+ logger.warn("No InRef found for biblioRef: " + thisBiblioRef.getTitleCache() + "; RefId: " + refId + "; inRefFK: " + inRefFk);\r
+ }\r
thisBiblioRef.setInReference(inRef);\r
biblioRefToSave.put(refId, thisBiblioRef);\r
//remember that an in reference exists\r
inRefExists |= (inRef != null);\r
+ thisBiblioRef.setTitleCache(null);\r
+ thisBiblioRef.getTitleCache();\r
}\r
if (inRefExists == false){\r
logger.warn("No in reference was saved though an 'inRefFk' is available. RefId " + refId);\r
}\r
+ \r
}\r
\r
} // end resultSet\r
\r
//save and store in map\r
logger.info("Save nomenclatural references (" + refCounter.nomRefCount + ")");\r
- getReferenceService().save(nomRefToSave.values());\r
+ getReferenceService().saveOrUpdate(nomRefToSave.values());\r
logger.info("Save bibliographical references (" + refCounter.referenceCount +")");\r
- getReferenceService().save(biblioRefToSave.values());\r
+ getReferenceService().saveOrUpdate(biblioRefToSave.values());\r
\r
// }//end resultSetList \r
\r
- logger.info("end makeReferences ..." + getSuccessString(success));;\r
+// logger.info("end makeReferences ..." + getSuccessString(success));;\r
return success;\r
} catch (SQLException e) {\r
logger.error("SQLException:" + e);\r
\r
//idInSource\r
String idInSource = (String)valueMap.get("IdInSource".toLowerCase());\r
- if (CdmUtils.isNotEmpty(idInSource)){\r
- IdentifiableSource source = IdentifiableSource.NewInstance(idInSource);\r
+ if (isNotBlank(idInSource)){\r
+ IdentifiableSource source = IdentifiableSource.NewDataImportInstance(idInSource);\r
source.setIdNamespace("import to Berlin Model");\r
referenceBase.addSource(source);\r
}\r
\r
boolean hasNomRef = false;\r
boolean hasBiblioRef = false;\r
- Reference sourceReference = state.getConfig().getSourceReference();\r
+ Reference sourceReference = state.getTransactionalSourceReference();\r
\r
//is Nomenclatural Reference\r
if ( (CdmUtils.isNotEmpty(nomRefCache) && isPreliminary) || (CdmUtils.isNotEmpty(nomTitleAbbrev) && ! isPreliminary) ){\r
Integer refId = (Integer)valueMap.get("refId".toLowerCase());\r
\r
if (inRefFk != null){\r
- if (inRefCategoryFk == REF_JOURNAL){\r
- int inRefFkInt = (Integer)inRefFk;\r
- if (true){\r
- //changed for first/second path implementation, if this is successful the following code can be deleted\r
- }else if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
- Reference<?> inJournal = getReferenceFromMaps(inRefFkInt, nomRefToSave, relatedNomReferences);\r
- if (inJournal == null){\r
- inJournal = getReferenceFromMaps(inRefFkInt, biblioRefToSave, relatedBiblioReferences);\r
- logger.info("inJournal (" + inRefFkInt + ") found in referenceStore instead of nomRefStore.");\r
- nomRefToSave.put(inRefFkInt, inJournal);\r
- }\r
- if (inJournal == null){\r
- logger.warn("inJournal for " + inRefFkInt + " is null. "+\r
- " InReference relation could not be set");\r
- //}else if (Reference.class.isAssignableFrom(inJournal.getClass())){\r
- }else if (inJournal.getType().equals(ReferenceType.Journal)){\r
- article.setInJournal((IJournal)inJournal);\r
- }else{\r
- logger.warn("InJournal is not of type journal but of type " + inJournal.getType() +\r
- " Inreference relation could not be set");\r
- }\r
- }else{\r
- logger.error("Journal (refId = " + inRefFkInt + " ) for Article (refID = " + refId +") could not be found in nomRefStore. Inconsistency error. ");\r
- //success = false;;\r
- }\r
- }else{\r
+ if (inRefCategoryFk != REF_JOURNAL){\r
logger.warn("Wrong inrefCategory for Article (refID = " + refId +"). Type must be 'Journal' but was not (RefCategoryFk=" + inRefCategoryFk + "))." +\r
- " InReference was not added to Article! ");\r
+ " InReference was added anyway! ");\r
}\r
+ }else{\r
+ logger.warn ("Article has no inreference: " + refId);\r
}\r
makeStandardMapper(valueMap, (Reference)article); //url, pages, series, volume\r
return (Reference)article;\r
//null -> error\r
logger.warn("Part-Of-Other-Title has no inRefCategoryFk! RefId = " + refId + ". ReferenceType set to Generic.");\r
result = makeUnknown(valueMap);\r
+ }else if (inRefFk == null){\r
+ logger.warn("Part-Of-Other-Title has in in reference: " + refId);\r
+ result = makeUnknown(valueMap);\r
}else if (inRefCategoryFk == REF_BOOK){\r
//BookSection\r
IBookSection bookSection = ReferenceFactory.newBookSection();\r
result = (Reference<?>)bookSection;\r
- if (inRefFk != null && false){ //&& false added for first/second path implementation, following code can be deleted or moved if this is successful\r
- int inRefFkInt = (Integer) inRefFk;\r
- if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
- Reference<?> inBook = getReferenceFromMaps(inRefFkInt, nomRefToSave, relatedNomReferences);\r
- if (inBook == null){\r
- inBook = getReferenceFromMaps(inRefFkInt, biblioRefToSave, relatedBiblioReferences);\r
- logger.info("inBook (" + inRefFkInt + ") found in referenceStore instead of nomRefStore.");\r
- nomRefToSave.put(inRefFkInt, inBook);\r
- }\r
- if (inBook == null){\r
- logger.warn("inBook for " + inRefFkInt + " is null. "+\r
- " InReference relation could not be set");;\r
- //}else if (Book.class.isAssignableFrom(inBook.getClass())){\r
- }else if (inBook.getType().equals(ReferenceType.Book)){\r
- bookSection.setInBook((IBook)inBook);\r
- //TODO\r
- }else{\r
- logger.warn("InBook is not of type book but of type " + inBook.getClass().getSimpleName() +\r
- " Inreference relation could not be set");\r
- }\r
- }else{\r
- logger.error("Book (refId = " + inRefFkInt + ") for part_of_other_title (refID = " + refId +") could not be found in nomRefStore. Inconsistency error. ");\r
- //success = false;\r
- }\r
- }\r
}else if (inRefCategoryFk == REF_ARTICLE){\r
//Article\r
//TODO \r
- logger.warn("Reference (refId = " + refId + ") of type 'part_of_other_title' is part of 'article'." +\r
- " This type is not implemented yet. Generic reference created instead") ;\r
+ logger.info("Reference (refId = " + refId + ") of type 'part_of_other_title' is part of 'article'." +\r
+ " There is no specific reference type for such in references yet. Generic reference created instead") ;\r
result = ReferenceFactory.newGeneric();\r
}else if (inRefCategoryFk == REF_JOURNAL){\r
//TODO \r
BerlinModelReferenceImportValidator validator = new BerlinModelReferenceImportValidator();\r
return validator.validate(state, this);\r
}\r
- \r
- \r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()\r
- */\r
- @Override\r
- protected String getTableName() {\r
- return dbTableName;\r
- }\r
\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()\r
- */\r
- @Override\r
- public String getPluralString() {\r
- return pluralString;\r
- }\r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r