\r
import org.apache.log4j.Logger;\r
import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
\r
import eu.etaxonomy.cdm.common.CdmUtils;\r
import eu.etaxonomy.cdm.common.ResultWrapper;\r
private void makeClassifications(BerlinModelImportState state) throws SQLException{\r
logger.info("start make classification ...");\r
\r
- \r
Set<String> idSet = getTreeReferenceIdSet(state);\r
\r
//nom reference map\r
}\r
}\r
\r
+ boolean includeFlatClassifications = state.getConfig().isIncludeFlatClassifications();\r
String strQuery = strQuerySelect + " " + strQueryFrom + " " + strQueryWhere + " " + strQueryGroupBy;\r
+ \r
+ //concepts with \r
+ if (includeFlatClassifications){\r
+ String strFlatQuery = \r
+ " SELECT pt.PTRefFk AS secRefFk, dbo.Reference.RefCache AS secRef " +\r
+ " FROM PTaxon AS pt LEFT OUTER JOIN " + \r
+ " Reference ON pt.PTRefFk = dbo.Reference.RefId LEFT OUTER JOIN " +\r
+ " RelPTaxon ON pt.PTNameFk = dbo.RelPTaxon.PTNameFk2 AND pt.PTRefFk = dbo.RelPTaxon.PTRefFk2 LEFT OUTER JOIN " +\r
+ " RelPTaxon AS RelPTaxon_1 ON pt.PTNameFk = RelPTaxon_1.PTNameFk1 AND pt.PTRefFk = RelPTaxon_1.PTRefFk1 " + \r
+ " WHERE (RelPTaxon_1.RelQualifierFk IS NULL) AND (dbo.RelPTaxon.RelQualifierFk IS NULL) " + \r
+ " GROUP BY pt.PTRefFk, dbo.Reference.RefCache "\r
+ ;\r
+ \r
+ strQuery = strQuery + " UNION " + strFlatQuery;\r
+ }\r
+ \r
+ \r
if (state.getConfig().getClassificationQuery() != null){\r
strQuery = state.getConfig().getClassificationQuery();\r
}\r
try {\r
makeClassifications(state);\r
super.doInvoke(state);\r
+ makeFlatClassificationTaxa(state);\r
return;\r
} catch (SQLException e) {\r
throw new RuntimeException(e);\r
}\r
\r
\r
+ private void makeFlatClassificationTaxa(BerlinModelImportState state) {\r
+ //Note: this part still does not use partitions\r
+ logger.info("Flat classifications start");\r
+ TransactionStatus txStatus = startTransaction();\r
+ if (! state.getConfig().isIncludeFlatClassifications()){\r
+ return;\r
+ }\r
+ String sql = " SELECT pt.PTRefFk AS secRefFk, pt.RIdentifier " +\r
+ " FROM PTaxon AS pt " +\r
+ " LEFT OUTER JOIN RelPTaxon ON pt.PTNameFk = RelPTaxon.PTNameFk2 AND pt.PTRefFk = RelPTaxon.PTRefFk2 " +\r
+ " LEFT OUTER JOIN RelPTaxon AS RelPTaxon_1 ON pt.PTNameFk = RelPTaxon_1.PTNameFk1 AND pt.PTRefFk = RelPTaxon_1.PTRefFk1 " +\r
+ " WHERE (RelPTaxon_1.RelQualifierFk IS NULL) AND (dbo.RelPTaxon.RelQualifierFk IS NULL) " +\r
+ " ORDER BY pt.PTRefFk " ;\r
+ ResultSet rs = state.getConfig().getSource().getResultSet(sql);\r
+ Map<Object, Map<String, ? extends CdmBase>> maps = getRelatedObjectsForFlatPartition(rs);\r
+ \r
+ Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>) maps.get(BerlinModelTaxonImport.NAMESPACE);\r
+ Map<Integer, Classification> classificationMap = new HashMap<Integer, Classification>();\r
+ \r
+ rs = state.getConfig().getSource().getResultSet(sql);\r
+ try {\r
+ while (rs.next()){\r
+ Integer treeRefFk = rs.getInt("secRefFk");\r
+ String taxonId = rs.getString("RIdentifier");\r
+ Classification classification = getClassificationTree(state, classificationMap, treeRefFk);\r
+ TaxonBase<?> taxon = taxonMap.get(taxonId);\r
+ if (taxon.isInstanceOf(Taxon.class)){\r
+ classification.addChildTaxon(CdmBase.deproxy(taxon, Taxon.class), null, null, null);\r
+ }else{\r
+ String message = "TaxonBase for taxon is not of class Taxon but %s (RIdentifier %s)";\r
+ logger.warn(String.format(message, taxon.getClass(), taxonId));\r
+ }\r
+ }\r
+ } catch (SQLException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ commitTransaction(txStatus);\r
+ logger.info("Flat classifications end");\r
+ \r
+ }\r
+\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)\r
*/\r
}\r
return result;\r
}\r
+ \r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)\r
+ */\r
+ public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForFlatPartition( ResultSet rs) {\r
+ String nameSpace;\r
+ Class cdmClass;\r
+ Set<String> idSet;\r
+ Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();\r
+ \r
+ try{\r
+ Set<String> taxonIdSet = new HashSet<String>();\r
+ Set<String> referenceIdSet = new HashSet<String>();\r
+// Set<String> classificationIdSet = new HashSet<String>();\r
+ while (rs.next()){\r
+ handleForeignKey(rs, taxonIdSet, "RIdentifier");\r
+// handleForeignKey(rs, classificationIdSet, "treeRefFk");\r
+ }\r
+ \r
+ //taxon map\r
+ nameSpace = BerlinModelTaxonImport.NAMESPACE;\r
+ cdmClass = TaxonBase.class;\r
+ idSet = taxonIdSet;\r
+ Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+ result.put(nameSpace, taxonMap);\r
+\r
+// //tree map\r
+// nameSpace = "Classification";\r
+// cdmClass = Classification.class;\r
+// idSet = classificationIdSet;\r
+// Map<String, Classification> treeMap = (Map<String, Classification>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+// result.put(cdmClass, treeMap);\r
+// Set<UUID> treeUuidSet = state\r
+// getClassificationService().find(uuidSet);\r
+// \r
+\r
+ } catch (SQLException e) {\r
+ throw new RuntimeException(e);\r
+ }\r
+ return result;\r
+ }\r
\r
\r
private SynonymRelationship getSynRel (int relQualifierFk, Taxon toTaxon, Synonym synonym, Reference citation, String microcitation){\r