diff --git a/api/src/org/labkey/api/data/DatabaseMigrationService.java b/api/src/org/labkey/api/data/DatabaseMigrationService.java index 5a460d26e5f..39099c7aac7 100644 --- a/api/src/org/labkey/api/data/DatabaseMigrationService.java +++ b/api/src/org/labkey/api/data/DatabaseMigrationService.java @@ -3,7 +3,6 @@ import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.labkey.api.collections.CopyOnWriteCaseInsensitiveHashMap; import org.labkey.api.data.DatabaseMigrationConfiguration.DefaultDatabaseMigrationConfiguration; import org.labkey.api.data.SimpleFilter.AndClause; import org.labkey.api.data.SimpleFilter.FilterClause; @@ -22,7 +21,6 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.stream.Collectors; diff --git a/experiment/src/org/labkey/experiment/ExperimentModule.java b/experiment/src/org/labkey/experiment/ExperimentModule.java index 40c59e5dffb..3a7ee963ba6 100644 --- a/experiment/src/org/labkey/experiment/ExperimentModule.java +++ b/experiment/src/org/labkey/experiment/ExperimentModule.java @@ -27,6 +27,7 @@ import org.labkey.api.audit.SampleTimelineAuditEvent; import org.labkey.api.collections.CsvSet; import org.labkey.api.collections.LongHashMap; +import org.labkey.api.collections.Sets; import org.labkey.api.data.Container; import org.labkey.api.data.ContainerFilter; import org.labkey.api.data.ContainerManager; @@ -936,20 +937,50 @@ public void afterTable(TableInfo sourceTable, TableInfo targetTable, SimpleFilte } }); - // Data classes have a built-in Flag field DatabaseMigrationService.get().registerSchemaHandler(new DefaultMigrationSchemaHandler(DataClassDomainKind.getSchema()) { @Override public void addDomainDataFilter(OrClause orClause, DomainFilter filter, TableInfo sourceTable, FieldKey fKey, Set selectColumnNames) { + // Data classes have a built-in Flag field addDomainDataFlagFilter(orClause, filter, sourceTable, fKey, selectColumnNames); } + private static final Set SEQUENCE_TABLES = Sets.newCaseInsensitiveHashSet("protsequence", "nucsequence", "molecule"); + private static final Set SEQUENCE_IDS = new HashSet<>(); + @Override public void afterTable(TableInfo sourceTable, TableInfo targetTable, SimpleFilter notCopiedFilter) { Collection notCopiedLsids = new TableSelector(sourceTable, Collections.singleton("LSID"), notCopiedFilter, null).getCollection(String.class); if (!notCopiedLsids.isEmpty()) LOG.info(" {} rows not copied", Formats.commaf0.format(notCopiedLsids.size())); + + String name = sourceTable.getName(); + int idx = name.indexOf('_'); + name = name.substring(idx + 1); + + if (SEQUENCE_TABLES.contains(name)) + { + new TableSelector(targetTable, Collections.singleton("Ident")).stream(String.class) + .map(ident -> { + int i = ident.indexOf(':'); + try + { + return Long.parseLong(ident.substring(i + 1)); + } + catch (Exception e) + { + throw new RuntimeException("Exception trying to split ident on ':' (" + ident + ")", e); + } + }) + .forEach(SEQUENCE_IDS::add); + } + } + + @Override + public void afterSchema() + { + LOG.info("This is where we'll copy {} sequences into biologics.SequenceIdentity", SEQUENCE_IDS.size()); } }); }