package gw.exportimport uses gw.api.locale.DisplayKey uses com.guidewire.commons.entity.type.ThreadLocalBundleProvider uses com.guidewire.pl.system.bundle.NeverPersistedBundle uses gw.exportimport.validation.ImportValidationResult uses java.lang.Integer uses java.util.Map uses gw.exportimport.validation.BeanAction /** * A data transformer used to transform {@link ImportData} generated cell data to beans in a bundle. */ @ReadOnly class CellDataImporter { var _importData : ImportData var _listener : RowProcessedListener var _uniquePublicIDs : Map construct(importData : ImportData) { this(importData, null) } construct(importData : ImportData, listener : RowProcessedListener) { _importData = importData _listener = listener _uniquePublicIDs = {} } /** * Imports {@link ImportData} generated cell data into beans in the period's bundle. Tries to find the unique column * index responsible for identifying the {@link KeyableBean} (in this case the "PublicID") and continues working * on this bean ultimately using {@link ColumnDataResolver}s to update values in the bean. * * @param period The used {@link PolicyPeriod} */ function transformDataToBeans(period : PolicyPeriod) { ThreadLocalBundleProvider.set(period.Bundle) // use a never persisted test bundle to validate each row... var testBundle = new NeverPersistedBundle() var testPeriod = testBundle.loadBean(period.ID) as PolicyPeriod var version = testBundle.pushVersion() for (row in _importData?.DataRows) { _listener?.rowProcessed() _importData.MetaData.ValidationResult.SummaryLog.registerBeanAction(BeanAction.Read) var publicID = row.processAllData(testPeriod, true) if (publicID.NotBlank and _uniquePublicIDs.containsKey(publicID)) { var errorMessage = DisplayKey.get("Import.Validation.Errors.DuplicatePublicIds", _uniquePublicIDs.get(publicID)) _importData.MetaData.ValidationResult.flag(row.UIRowIndex, errorMessage, null) testBundle.rollbackVersion(version) version = testBundle.pushVersion() continue } _uniquePublicIDs.put(publicID, row.UIRowIndex) var validation = _importData.MetaData.ValidationResult.getRowValidation(row.UIRowIndex) if (validation?.hasErrors()) { testBundle.rollbackVersion(version) version = testBundle.pushVersion() continue } row.processAllData(period, false) row.registerBeanEvents() } testBundle.rollbackVersion(version) } }