}\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
\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
+ " SELECT Reference.* ,InReference.RefCategoryFk as InRefCategoryFk, RefSource.RefSource " ;\r
+ String strFrom = " FROM %s " + \r
+ " LEFT OUTER JOIN Reference as InReference 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
\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
+// 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
}\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
+ String strIdQueryFirstPath = strSelectId + strIdFrom ;\r
+ String strIdQuerySecondPath = strSelectId + strIdFrom + " AND (Reference.InRefFk is NOT NULL) ";\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
+ //firstPath \r
+ ResultSetPartitioner partitioner = ResultSetPartitioner.NewInstance(source, strIdQueryFirstPath, 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
+ state.setReferenceSecondPath(true);\r
\r
- if (config.getDoReferences() == ALL || config.getDoReferences() == NOMENCLATURAL){\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
+ //secondPath\r
+ partitioner = ResultSetPartitioner.NewInstance(source, strIdQuerySecondPath, 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
+ state.setReferenceSecondPath(false);\r
+ \r
+// }\r
\r
} catch (SQLException e) {\r
logger.error("SQLException:" + e);\r
}\r
\r
\r
+ \r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)\r
*/\r
public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {\r
+ if (state.isReferenceSecondPath()){\r
+ return doPartitionSecondPath(partitioner, state);\r
+ }\r
boolean success = true;\r
-// MapWrapper<Reference> referenceStore= new MapWrapper<Reference>(null);\r
-// MapWrapper<Reference> nomRefStore= new MapWrapper<Reference>(null);\r
\r
Map<Integer, Reference> nomRefToSave = new HashMap<Integer, Reference>();\r
Map<Integer, Reference> biblioRefToSave = new HashMap<Integer, Reference>();\r
BerlinModelImportConfigurator config = state.getConfig();\r
\r
try {\r
-// //get data from database\r
-// //strQueryBase += " AND Reference.refId = 1933 " ; //7000000\r
-// \r
-// int j = 0;\r
-// Iterator<ResultSet> resultSetListIterator = resultSetList.listIterator();\r
-// //for each resultsetlist\r
-// while (resultSetListIterator.hasNext()){\r
+\r
int i = 0;\r
RefCounter refCounter = new RefCounter();\r
\r
-// ResultSet rs = resultSetListIterator.next();\r
ResultSet rs = partitioner.getResultSet();\r
+\r
//for each resultset\r
while (rs.next()){\r
if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("References handled: " + (i-1) + " in round -" );}\r
getReferenceService().save(nomRefToSave.values());\r
logger.info("Save bibliographical references (" + refCounter.referenceCount +")");\r
getReferenceService().save(biblioRefToSave.values());\r
-// j++;\r
+\r
// }//end resultSetList \r
\r
logger.info("end makeReferences ..." + getSuccessString(success));;\r
\r
\r
\r
+ private boolean doPartitionSecondPath(ResultSetPartitioner partitioner, BerlinModelImportState state) {\r
+ boolean success = true;\r
+\r
+ Map<Integer, Reference> nomRefToSave = new HashMap<Integer, Reference>();\r
+ Map<Integer, Reference> biblioRefToSave = new HashMap<Integer, Reference>();\r
+ \r
+ Map<String, Reference> relatedNomReferences = partitioner.getObjectMap(NOM_REFERENCE_NAMESPACE);\r
+ Map<String, Reference> relatedBiblioReferences = partitioner.getObjectMap(BIBLIO_REFERENCE_NAMESPACE);\r
+ \r
+ try {\r
+ int i = 0;\r
+ RefCounter refCounter = new RefCounter();\r
+ \r
+ ResultSet rs = partitioner.getResultSet();\r
+ //for each resultset\r
+ while (rs.next()){\r
+ if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("References handled: " + (i-1) + " in round -" );}\r
+ \r
+ Integer refId = rs.getInt("refId");\r
+ \r
+ Reference<?> thisNomRef = getReferenceOnlyFromMaps(relatedNomReferences, relatedBiblioReferences, String.valueOf(refId));\r
+ Reference<?> thisBiblioRef = getReferenceOnlyFromMaps(relatedNomReferences, relatedBiblioReferences, String.valueOf(refId));\r
+ \r
+ Reference<?> inReference = relatedNomReferences.get("inRefFk");\r
+ if (thisNomRef != null){\r
+ thisNomRef.setInReference(inReference);\r
+ nomRefToSave.put(refId, thisNomRef);\r
+ }\r
+ if (thisBiblioRef != null){\r
+ thisBiblioRef.setInReference(inReference);\r
+ biblioRefToSave.put(refId, thisBiblioRef);\r
+ }\r
+ \r
+ \r
+// success &= makeSingleReferenceRecord(rs, state, partitioner, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences, refCounter);\r
+ } // end resultSet\r
+ \r
+ //for the concept reference a fixed uuid may be needed -> change uuid\r
+ Integer sourceSecId = (Integer) state.getConfig().getSourceSecId();\r
+ Reference<?> sec = biblioRefToSave.get(sourceSecId);\r
+ if (sec == null){\r
+ sec = nomRefToSave.get(sourceSecId); \r
+ }\r
+ if (sec != null){\r
+ sec.setUuid(state.getConfig().getSecUuid());\r
+ logger.info("SecUuid changed to: " + state.getConfig().getSecUuid());\r
+ }\r
+ \r
+ //save and store in map\r
+ logger.info("Save nomenclatural references (" + refCounter.nomRefCount + ")");\r
+ getReferenceService().save(nomRefToSave.values());\r
+ logger.info("Save bibliographical references (" + refCounter.referenceCount +")");\r
+ getReferenceService().save(biblioRefToSave.values());\r
+ \r
+// }//end resultSetList \r
+\r
+ logger.info("end makeReferences ..." + getSuccessString(success));;\r
+ return success;\r
+ } catch (SQLException e) {\r
+ logger.error("SQLException:" + e);\r
+ return false;\r
+ }\r
+ }\r
+\r
+\r
+ \r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)\r
*/\r
while (rs.next()){\r
handleForeignKey(rs, teamIdSet, "NomAuthorTeamFk");\r
handleForeignKey(rs, referenceIdSet, "InRefFk");\r
+ //TODO only needed in second path but state not available here to check if state is second path\r
+ handleForeignKey(rs, referenceIdSet, "refId");\r
}\r
\r
//team map\r
if (inRefFk != null){\r
if (inRefCategoryFk == REF_JOURNAL){\r
int inRefFkInt = (Integer)inRefFk;\r
- if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\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
\r
if (inRefCategoryFk == null){\r
//null -> error\r
- logger.warn("Part-Of-Other-Title has not inRefCategoryFk! RefId = " + refId + ". ReferenceType set to Generic.");\r
+ logger.warn("Part-Of-Other-Title has no inRefCategoryFk! RefId = " + refId + ". ReferenceType set to Generic.");\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){\r
- int inRefFkInt = (Integer)inRefFk;\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
\r
private Reference<?> makeWebSite(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'Website'");}\r
- Reference webPage = ReferenceFactory.newWebPage();\r
+ Reference<?> webPage = ReferenceFactory.newWebPage();\r
makeStandardMapper(valueMap, webPage); //placePublished, publisher\r
return webPage;\r
}\r
\r
private Reference<?> makeUnknown(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'Unknown'");}\r
- Reference generic = ReferenceFactory.newGeneric();\r
+ Reference<?> generic = ReferenceFactory.newGeneric();\r
// generic.setSeries(series);\r
makeStandardMapper(valueMap, generic); //pages, placePublished, publisher, series, volume\r
return generic;\r
\r
private Reference<?> makeInformal(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'Informal'");}\r
- Reference generic = ReferenceFactory.newGeneric();\r
+ Reference<?> generic = ReferenceFactory.newGeneric();\r
// informal.setSeries(series);\r
makeStandardMapper(valueMap, generic);//editor, pages, placePublished, publisher, series, volume\r
String informal = (String)valueMap.get("InformalRefCategory".toLowerCase());\r
Map<String, Reference> relatedBiblioReferences, \r
Map<String, Reference> relatedNomReferences){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'Book'");}\r
- Reference book = ReferenceFactory.newBook();\r
+ Reference<?> book = ReferenceFactory.newBook();\r
Integer refId = (Integer)valueMap.get("refId".toLowerCase());\r
\r
//Set bookAttributes = new String[]{"edition", "isbn", "pages","publicationTown","publisher","volume"};\r
}\r
Object inRefFk = valueMap.get("inRefFk".toLowerCase());\r
//Series (as Reference)\r
- if (inRefFk != null){\r
+ if (inRefFk != null && false){ //&&false added for first/second path implementation, following code may be removed if this is successful\r
int inRefFkInt = (Integer)inRefFk;\r
if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
Reference<?> inSeries = getReferenceFromMaps(inRefFkInt, nomRefToSave, relatedNomReferences);\r
int inRefFkInt,\r
Map<Integer, Reference> refToSaveMap,\r
Map<String, Reference> relatedRefMap) {\r
- Reference result = null;\r
+ Reference<?> result = null;\r
result = refToSaveMap.get(inRefFkInt);\r
if (result == null){\r
result = relatedRefMap.get(String.valueOf(inRefFkInt));\r
\r
private Reference<?> makePrintSeries(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'PrintSeries'");}\r
- Reference printSeries = ReferenceFactory.newPrintSeries();\r
+ Reference<?> printSeries = ReferenceFactory.newPrintSeries();\r
makeStandardMapper(valueMap, printSeries, null);\r
return printSeries;\r
}\r
\r
private Reference<?> makeProceedings(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'Proceedings'");}\r
- Reference proceedings = ReferenceFactory.newProceedings();\r
+ Reference<?> proceedings = ReferenceFactory.newProceedings();\r
makeStandardMapper(valueMap, proceedings, null); \r
return proceedings;\r
}\r
\r
private Reference<?> makeThesis(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'Thesis'");}\r
- Reference thesis = ReferenceFactory.newThesis();\r
+ Reference<?> thesis = ReferenceFactory.newThesis();\r
makeStandardMapper(valueMap, thesis, null); \r
return thesis;\r
}\r
private Reference<?> makeJournalVolume(Map<String, Object> valueMap){\r
if (logger.isDebugEnabled()){logger.debug("RefType 'JournalVolume'");}\r
//Proceedings proceedings = Proceedings.NewInstance();\r
- Reference journalVolume = ReferenceFactory.newGeneric();\r
+ Reference<?> journalVolume = ReferenceFactory.newGeneric();\r
makeStandardMapper(valueMap, journalVolume, null); \r
logger.warn("Journal volumes not yet implemented. Generic created instead but with errors");\r
return journalVolume;\r