import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
return result;\r
}\r
\r
+ protected List<TaxonNode> getNextTaxonNodePartition( int limit, int partitionCount, List<String> propertyPaths) {\r
+\r
+ List<TaxonNode> result = new ArrayList<>();\r
+\r
+ List<OrderHint> orderHints = null;\r
+ @SuppressWarnings("unchecked")\r
+ List<TaxonNode> list = this.getTaxonNodeService()\r
+ .list(TaxonNode.class, limit, limit * partitionCount, orderHints, propertyPaths);\r
+\r
+ if (list.isEmpty()){\r
+ return null;\r
+ }\r
+\r
+ for (TaxonNode tn : list){\r
+ if (isPesiTaxonNode(tn)){\r
+ result.add(tn);\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ protected boolean isPesiTaxonNode(TaxonNode tn){\r
+ TaxonBase<?> fromTaxon;\r
+ Taxon toTaxon;\r
+\r
+ fromTaxon = tn.getTaxon();\r
+ toTaxon = tn.getParent()== null? null: tn.getParent().getTaxon();\r
+\r
+ return (isPesiTaxon(fromTaxon, true) && isPesiTaxon(toTaxon, true));\r
+ }\r
+\r
protected boolean isPesiNameRelationship(RelationshipBase<?,?,?> rel){\r
TaxonName name1;\r
TaxonName name2;\r
import eu.etaxonomy.cdm.io.common.Source;
import eu.etaxonomy.cdm.io.common.mapping.out.DbAnnotationMapper;
+import eu.etaxonomy.cdm.io.common.mapping.out.DbFixedIntegerMapper;
+import eu.etaxonomy.cdm.io.common.mapping.out.DbFixedStringMapper;
import eu.etaxonomy.cdm.io.common.mapping.out.DbObjectMapper;
import eu.etaxonomy.cdm.io.common.mapping.out.MethodMapper;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
/**
private PesiExportMapping mapping;
private PesiExportMapping synonymMapping;
+ private PesiExportMapping taxonNodeMapping;
public PesiRelTaxonExport() {
super();
synonymMapping = getSynonymMapping();
synonymMapping.initialize(state);
+ // Get specific mappings: (CDM) Synonym -> (PESI) RelTaxon
+ taxonNodeMapping = getTaxonNodeMapping();
+ taxonNodeMapping.initialize(state);
+
+
//Export taxon relations
success &= doPhase01(state, mapping);
+ //Export taxon nodes
+ success &= doPhase01b(state, taxonNodeMapping);
+
// Export name relations
success &= doPhase02(state, mapping);
return success;
}
+ private boolean doPhase01b(PesiExportState state, PesiExportMapping taxonNodeMapping) {
+ logger.info("PHASE 1b: Taxonnodes ...");
+ boolean success = true;
+
+ int limit = state.getConfig().getLimitSave();
+ // Start transaction
+ TransactionStatus txStatus = startTransaction(true);
+ logger.debug("Started new transaction. Fetching some " + pluralString + " (max: " + limit + ") ...");
+
+ List<TaxonNode> list;
+
+ //taxon nodes
+ int partitionCount = 0;
+ int totalCount = 0;
+ while ((list = getNextTaxonNodePartition(limit, partitionCount++, null)) != null) {
+ totalCount = totalCount + list.size();
+ logger.info("Read " + list.size() + " PESI taxon nodes. Limit: " + limit + ". Total: " + totalCount );
+ for (TaxonNode tn : list){
+ try {
+ taxonNodeMapping.invoke(tn);
+ } catch (Exception e) {
+ logger.error(e.getMessage() + ". TaxonNode: " + tn.getUuid());
+ e.printStackTrace();
+ }
+ }
+
+ commitTransaction(txStatus);
+ txStatus = startTransaction();
+ }
+ commitTransaction(txStatus);
+ return success;
+ }
+
private boolean doPhase02(PesiExportState state, PesiExportMapping mapping2) {
logger.info("PHASE 2: Name Relationships ...");
boolean success = true;
return state.getDbId(synonym);
}
+ /**
+ * Returns the <code>TaxonFk1</code> attribute. It corresponds to a CDM <code>Synonym</code>.
+ * @param synonym The {@link Synonym synonym}.
+ * @param state The {@link PesiExportState PesiExportState}.
+ * @return The <code>TaxonFk1</code> attribute.
+ * @see MethodMapper
+ */
+ @SuppressWarnings("unused")
+ private static Integer getParent(TaxonNode taxonNode, PesiExportState state) {
+ TaxonNode parent = taxonNode == null? null : taxonNode.getParent();
+ Taxon parentTaxon = parent == null? null: parent.getTaxon();
+ return state.getDbId(parentTaxon);
+ }
+
/**
* Returns the <code>TaxonFk2</code> attribute. It corresponds to a CDM <code>SynonymRelationship</code>.
* @param relationship The {@link RelationshipBase Relationship}.
return mapping;
}
+ PesiExportMapping getTaxonNodeMapping() {
+ PesiExportMapping mapping = new PesiExportMapping(dbTableName);
+
+ mapping.addMapper(MethodMapper.NewInstance("TaxonFk2", this.getClass(), "getParent", TaxonNode.class, PesiExportState.class));
+ mapping.addMapper(DbObjectMapper.NewInstance("taxon", "TaxonFk1"));
+ mapping.addMapper(DbFixedIntegerMapper.NewInstance(101, "RelTaxonQualifierFk"));
+ mapping.addMapper(DbFixedStringMapper.NewInstance("is taxonomically included in", "RelQualifierCache"));
+// mapping.addMapper(DbAnnotationMapper.NewExludedInstance(getLastActionAnnotationTypes(), "Notes"));
+
+ return mapping;
+ }
+
+
@Override
protected boolean doCheck(PesiExportState state) {