import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_PART_OF_OTHER_TITLE;\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.berlinModel.BerlinModelImportConfigurator.DO_REFERENCES.*;\r
\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
import java.util.Iterator;\r
import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
\r
import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
import eu.etaxonomy.cdm.api.service.IReferenceService;\r
import eu.etaxonomy.cdm.io.source.Source;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
-import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
import eu.etaxonomy.cdm.model.reference.Article;\r
import eu.etaxonomy.cdm.model.reference.Book;\r
import eu.etaxonomy.cdm.model.reference.BookSection;\r
\r
private static int modCount = 1000;\r
\r
- public static boolean invoke(\r
- Source source, \r
- CdmApplicationController cdmApp, \r
- boolean deleteAll, \r
- Map<Integer, UUID> referenceMap){\r
- \r
+ public static boolean invoke(BerlinModelImportConfigurator bmiConfig, CdmApplicationController cdmApp,\r
+ MapWrapper<ReferenceBase> referenceMap, MapWrapper<Team> authorMap){\r
+ Source source = bmiConfig.getSource();\r
String dbAttrName;\r
String cdmAttrName;\r
boolean success = true;\r
- Map<Integer, ReferenceBase> referenceCollectionMap = new HashMap<Integer, ReferenceBase>();\r
+ MapWrapper<ReferenceBase> referenceStore= new MapWrapper<ReferenceBase>(null);\r
+ //Map<Integer, ReferenceBase> referenceCollectionMap = new HashMap<Integer, ReferenceBase>();\r
\r
\r
logger.info("start makeReferences ...");\r
IReferenceService referenceService = cdmApp.getReferenceService();\r
- boolean delete = deleteAll;\r
+ boolean delete = bmiConfig.isDeleteAll();\r
\r
// if (delete){\r
// List<TaxonNameBase> listAllReferences = referenceService.getAllReferences(0, 1000);\r
" InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk " +\r
" FROM Reference AS InInReference " +\r
" RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " + \r
- " RIGHT OUTER JOIN Reference ON InReference.RefId = dbo.Reference.InRefFk ";\r
- \r
+ " RIGHT OUTER JOIN Reference ON InReference.RefId = dbo.Reference.InRefFk " + \r
+ " WHERE (1=1) "; \r
+ //strQueryBase += " AND Reference.refId = 7000000 " ;\r
String strQueryNoInRef = strQueryBase + \r
- " WHERE (Reference.InRefFk is NULL) ";\r
-\r
+ " AND (Reference.InRefFk is NULL) ";\r
\r
String strQuery1InRef = strQueryBase + \r
- " WHERE (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) ";\r
+ " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) ";\r
\r
String strQuery2InRef = strQueryBase + \r
- " WHERE (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) ";\r
+ " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) ";\r
\r
String strQueryTesMaxRecursion = strQueryBase + \r
- " WHERE (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
+ " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
\r
ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTesMaxRecursion);\r
if (testMaxRecursionResultSet.next() == true){\r
logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
return false;\r
}\r
+\r
+ if (bmiConfig.getDoReferences() == CONCEPT_REFERENCES){\r
+ strQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) ";\r
+ }\r
\r
List<ResultSet> resultSetList = new ArrayList<ResultSet>();\r
resultSetList.add(source.getResultSet(strQueryNoInRef));\r
- resultSetList.add(source.getResultSet(strQuery1InRef));\r
- resultSetList.add(source.getResultSet(strQuery2InRef));\r
+ if (bmiConfig.getDoReferences() == ALL || bmiConfig.getDoReferences() == NOMENCLATURAL){\r
+ resultSetList.add(source.getResultSet(strQuery1InRef));\r
+ resultSetList.add(source.getResultSet(strQuery2InRef));\r
+ }\r
+ \r
\r
int i = 0;\r
//for each reference\r
if (inRefFk != null){\r
if (inRefCategoryFk == REF_JOURNAL){\r
int inRefFkInt = (Integer)inRefFk;\r
- if (referenceCollectionMap.containsKey(inRefFkInt)){\r
- ReferenceBase inJournal = referenceCollectionMap.get(inRefFkInt);\r
+ if (referenceStore.containsId(inRefFkInt)){\r
+ ReferenceBase inJournal = referenceStore.get(inRefFkInt);\r
if (Journal.class.isAssignableFrom(inJournal.getClass())){\r
((Article)referenceBase).setInJournal((Journal)inJournal);\r
}else{\r
referenceBase = new BookSection();\r
if (inRefFk != null){\r
int inRefFkInt = (Integer)inRefFk;\r
- if (referenceCollectionMap.containsKey(inRefFkInt)){\r
- ReferenceBase inBook = referenceCollectionMap.get(inRefFkInt);\r
+ if (referenceStore.containsId(inRefFkInt)){\r
+ ReferenceBase inBook = referenceStore.get(inRefFkInt);\r
if (Book.class.isAssignableFrom(inBook.getClass())){\r
((BookSection)referenceBase).setInBook((Book)inBook);\r
}else{\r
\r
dbAttrName = "nomRefCache";\r
cdmAttrName = "titleCache";\r
- success &= ImportHelper.addStringValue(rs, referenceBase, dbAttrName, cdmAttrName);\r
- \r
+ success &= ImportHelper.addStringValue(rs, referenceBase, dbAttrName, cdmAttrName, ImportHelper.NO_OVERWRITE);\r
\r
//refId\r
- //TODO\r
-// Annotation annotation = new Annotation("Berlin Model id: " + String.valueOf(refId), Language.DEFAULT());\r
-// referenceBase.addAnnotations(annotation);\r
- //referenceBase.setLsid(String.valueOf(refId));\r
+ ImportHelper.setOriginalSource(referenceBase, bmiConfig.getSourceReference(), refId);\r
\r
// dbAttrName = "BinomHybFlag";\r
// cdmAttrName = "isBinomHybrid";\r
//TODO\r
// all attributes\r
\r
- if (! referenceCollectionMap.containsKey(refId)){\r
- referenceCollectionMap.put(refId, referenceBase);\r
- referenceMap.put(refId, referenceBase.getUuid());\r
+ if (! referenceStore.containsId(refId)){\r
+ referenceStore.put(refId, referenceBase);\r
+ referenceMap.put(refId, referenceBase);\r
}else{\r
logger.warn("Duplicate refId in Berlin Model database. Second reference was not imported !!");\r
}\r
\r
} // end resultSet\r
//save and store in map\r
- referenceService.saveReference(referenceCollectionMap.values());\r
+ referenceService.saveReferenceAll(referenceStore.objects());\r
}//end resultSetList \r
\r
logger.info("end makeReferences ...");\r