This is an automated email from the git hooks/post-receive script. New commit to branch feature/6714 in repository tutti. See http://git.codelutin.com/tutti.git commit 04a00a9af27ecbe1814d37adba5011d32a65fde2 Author: Kevin Morin <morin@codelutin.com> Date: Thu Dec 17 13:49:20 2015 +0100 creation de la tache de modification des taxon dans les batchs (refs #6714) --- .../service/TuttiPersistenceServiceLocator.java | 2 +- .../referential/synchro/ReferentialUpdateTask.java | 28 +++++++++ ...aceReferenceTaxonReferentialUpdateTaskImpl.java | 70 ++++++++++++++++++++++ .../TuttiReferentialSynchroServiceImpl.java | 67 +++++++++++++++++++++ ...rvice.referential.synchro.ReferentialUpdateTask | 1 + .../TuttiReferentialSynchronizeService.java | 4 +- 6 files changed, 169 insertions(+), 3 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java index 5134dc9..1d3d860 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TuttiPersistenceServiceLocator.java @@ -119,7 +119,7 @@ public class TuttiPersistenceServiceLocator extends ServiceLocator { //TODO Move this to adagio public static ReferentialSynchroService getReferentialSynchroService() { ReferentialSynchroService service = instance().getService( - "referentialSynchroService", ReferentialSynchroService.class); + "referentialSynchroServiceTutti", ReferentialSynchroService.class); return service; } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/ReferentialUpdateTask.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/ReferentialUpdateTask.java new file mode 100644 index 0000000..f7f7696 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/ReferentialUpdateTask.java @@ -0,0 +1,28 @@ +package fr.ifremer.tutti.persistence.service.referential.synchro; + +import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroDatabaseMetadata; +import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableTool; + +import java.sql.SQLException; +import java.sql.Timestamp; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.2 + */ +public interface ReferentialUpdateTask { + + String getTable(); + + /** + * @param dbMetas + * metas of db + * @param localDao + * dao of local table + * @return the set of pks to remove + * @throws SQLException + */ + void update(ReferentialSynchroDatabaseMetadata dbMetas, + ReferentialSynchroTableTool localDao, + Timestamp lastUpdate) throws SQLException; +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/ReplaceReferenceTaxonReferentialUpdateTaskImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/ReplaceReferenceTaxonReferentialUpdateTaskImpl.java new file mode 100644 index 0000000..0b59032 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/ReplaceReferenceTaxonReferentialUpdateTaskImpl.java @@ -0,0 +1,70 @@ +package fr.ifremer.tutti.persistence.service.referential.synchro; + +import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroDatabaseMetadata; +import fr.ifremer.adagio.core.service.technical.synchro.ReferentialSynchroTableTool; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.service.referential.SpeciesPersistenceService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.annotation.Resource; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.2 + */ +public class ReplaceReferenceTaxonReferentialUpdateTaskImpl implements ReferentialUpdateTask { + + @Resource(name = "speciesPersistenceService") + private SpeciesPersistenceService speciesService; + + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(ReplaceReferenceTaxonReferentialUpdateTaskImpl.class); + + @Override + public String getTable() { + return "TRANSCRIBING_ITEM"; + } + + @Override + public void update(ReferentialSynchroDatabaseMetadata dbMetas, + ReferentialSynchroTableTool localDao, + Timestamp lastUpdate) throws SQLException { + + int typeId = 61; + + Map<String, Integer> reftaxToReplace = new HashMap<>(); + + ResultSet incomingData = localDao.getDataToUpdate(lastUpdate); + + int typeColumnIndex = incomingData.findColumn("transcribing_item_type_fk"); + int oldReftaxColumnIndex = incomingData.findColumn("external_code"); + int newReftaxColumnIndex = incomingData.findColumn("object_id"); + + while (incomingData.next()) { + if (typeId == incomingData.getInt(typeColumnIndex)) { + reftaxToReplace.put(incomingData.getString(oldReftaxColumnIndex), + incomingData.getInt(newReftaxColumnIndex)); + } + } + + for (String oldRefTaxId : reftaxToReplace.keySet()) { + + Integer newRefTaxId = reftaxToReplace.get(oldRefTaxId); + + Species source = speciesService.getSpeciesByReferenceTaxonId(Integer.parseInt(oldRefTaxId)); + Species target = speciesService.getSpeciesByReferenceTaxonId(newRefTaxId); + + speciesService.replaceSpecies(source, target, false); + + } + + } +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/TuttiReferentialSynchroServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/TuttiReferentialSynchroServiceImpl.java new file mode 100644 index 0000000..39c5817 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/synchro/TuttiReferentialSynchroServiceImpl.java @@ -0,0 +1,67 @@ +package fr.ifremer.tutti.persistence.service.referential.synchro; + +import com.google.common.collect.Maps; +import fr.ifremer.adagio.core.service.technical.synchro.*; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Map; +import java.util.ServiceLoader; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.2 + */ +@Service("referentialSynchroServiceTutti") +@Lazy +public class TuttiReferentialSynchroServiceImpl extends ReferentialSynchroServiceImpl { + + protected Map<String, ReferentialUpdateTask> updateTasks; + + public Map<String, ReferentialUpdateTask> getUpdateTasks() { + if (updateTasks == null) { + + updateTasks = Maps.newHashMap(); + + ServiceLoader<ReferentialUpdateTask> loader = ServiceLoader.load(ReferentialUpdateTask.class); + for (ReferentialUpdateTask task : loader) { + updateTasks.put(task.getTable(), task); + } + + } + return updateTasks; + } + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(TuttiReferentialSynchroServiceImpl.class); + + protected void updateSmallTable( + ReferentialSynchroDatabaseMetadata dbMetas, + ReferentialSynchroTableTool localDao, + ResultSet incomingData, + ReferentialSynchroResult result) throws SQLException { + + + Timestamp lastUpdate = localDao.getLastUpdateDate(); + + super.updateSmallTable(dbMetas, localDao, incomingData, result); + + ReferentialSynchroTableMetadata table = localDao.getTable(); + String tableName = table.getName(); + + ReferentialUpdateTask updateTask = getUpdateTasks().get(tableName); + + if (updateTask != null && log.isInfoEnabled()) { + log.info(table.getTableLogPrefix() + " - " + result.getNbRows(tableName) + " Will use specific update task: " + updateTask); + } + if (updateTask != null) { + updateTask.update(dbMetas, localDao, lastUpdate); + } + } +} diff --git a/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.service.referential.synchro.ReferentialUpdateTask b/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.service.referential.synchro.ReferentialUpdateTask new file mode 100644 index 0000000..17a72c4 --- /dev/null +++ b/tutti-persistence/src/main/resources/META-INF/services/fr.ifremer.tutti.persistence.service.referential.synchro.ReferentialUpdateTask @@ -0,0 +1 @@ +fr.ifremer.tutti.persistence.service.referential.synchro.ReplaceReferenceTaxonReferentialUpdateTaskImpl \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java index 21d12cd..c30a997 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialSynchronizeService.java @@ -91,10 +91,10 @@ public class TuttiReferentialSynchronizeService extends AbstractTuttiService { "TAXON_GROUP_INFORMATION", // TRANSCRIBING - "TRANSCRIBING_ITEM", - "TRANSCRIBING_ITEM_TYPE", "TRANSCRIBING_SIDE", "TRANSCRIBING_SYSTEM", + "TRANSCRIBING_ITEM_TYPE", + "TRANSCRIBING_ITEM", // CONVERSION "ROUND_WEIGHT_CONVERSION", -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.