diff --git a/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java b/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java index c3995b9e220..e32ddc40a2b 100644 --- a/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java +++ b/api/src/org/labkey/api/dataiterator/AbstractDataIterator.java @@ -16,6 +16,7 @@ package org.labkey.api.dataiterator; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.labkey.api.query.BatchValidationException; import org.labkey.api.query.QueryUpdateService; @@ -143,6 +144,15 @@ protected String getDataSource() return _context.getDataSource(); } + protected boolean hasLoggedWarning(@NotNull String warning) + { + return _context.hasLoggedWarning(warning); + } + + protected void addLoggedWarning(@NotNull String warning) + { + _context.addLoggedWarning(warning); + } protected Integer indexOfExistingRecord; diff --git a/api/src/org/labkey/api/dataiterator/DataIteratorContext.java b/api/src/org/labkey/api/dataiterator/DataIteratorContext.java index 12713d9605b..231e6b91206 100644 --- a/api/src/org/labkey/api/dataiterator/DataIteratorContext.java +++ b/api/src/org/labkey/api/dataiterator/DataIteratorContext.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -60,6 +61,7 @@ public class DataIteratorContext private final Set _passThroughBuiltInColumnNames = new CaseInsensitiveHashSet(); private final Set _dontUpdateColumnNames = new CaseInsensitiveHashSet(); private final Set _alternateKeys = new CaseInsensitiveHashSet(); + private final Set _loggedWarnings = new HashSet<>(); private String _dataSource; private boolean _withLookupRemapping = true; @@ -337,4 +339,14 @@ public QueryImportPipelineJob getBackgroundJob() return _backgroundJob; } + public boolean hasLoggedWarning(@NotNull String warning) + { + return _loggedWarnings.contains(warning); + } + + public void addLoggedWarning(@NotNull String warning) + { + _loggedWarnings.add(warning); + } + } diff --git a/api/src/org/labkey/api/dataiterator/SimpleTranslator.java b/api/src/org/labkey/api/dataiterator/SimpleTranslator.java index 8480f6f93bd..3777a92fb50 100644 --- a/api/src/org/labkey/api/dataiterator/SimpleTranslator.java +++ b/api/src/org/labkey/api/dataiterator/SimpleTranslator.java @@ -557,9 +557,21 @@ private Object getDerivationData(Object thisValue, int derivationDataColInd, boo if (thisValue != null) { if (isDerivationField && presentDerivationWarning != null) - LOG.warn(presentDerivationWarning); + { + if (!hasLoggedWarning(presentDerivationWarning)) + { + LOG.warn(presentDerivationWarning); + addLoggedWarning(presentDerivationWarning); + } + } else if (!isDerivationField && presentNonDerivationWarning != null) - LOG.warn(presentNonDerivationWarning); + { + if (!hasLoggedWarning(presentNonDerivationWarning)) + { + LOG.warn(presentNonDerivationWarning); + addLoggedWarning(presentNonDerivationWarning); + } + } } return null;