From 50638a421d12a05a4ebd753e0a5acdfe86a60875 Mon Sep 17 00:00:00 2001 From: dexamundsen Date: Mon, 20 Jan 2025 11:40:51 -0800 Subject: [PATCH 1/2] Move Entity /Underlay to EntityFilter --- .../terra/tanagra/indexing/JobSequencer.java | 19 ++++--- .../WriteEntityLevelDisplayHints.java | 4 +- ...ava => WriteEntitySearchByAttributes.java} | 12 ++--- .../job/dataflow/WriteRollupCounts.java | 2 +- .../app/controller/CohortsApiController.java | 10 +++- .../app/controller/ReviewsApiController.java | 2 +- .../controller/objmapping/FromApiUtils.java | 16 +++++- .../app/controller/objmapping/ToApiUtils.java | 26 +++++++++- .../java/bio/terra/tanagra/db/CohortDao.java | 3 +- .../tanagra/service/UnderlayService.java | 17 +++++-- .../model/FineGrainedAccessControl.java | 5 +- .../service/artifact/model/Cohort.java | 2 +- .../artifact/model/CohortRevision.java | 3 +- .../service/artifact/model/FeatureSet.java | 2 +- .../service/artifact/model/Review.java | 2 +- .../tanagra/service/artifact/model/Study.java | 2 +- .../export/impl/IpynbFileDownload.java | 2 +- .../service/export/impl/RegressionTest.java | 2 +- .../service/export/impl/VwbFileExport.java | 2 +- .../service/filter/FilterBuilderService.java | 17 +++++-- .../tanagra/service/CohortServiceTest.java | 3 +- .../service/FeatureSetServiceTest.java | 7 ++- .../service/FilterBuilderServiceTest.java | 17 +++++-- .../tanagra/service/ReviewServiceTest.java | 3 +- .../tanagra/service/StudyServiceTest.java | 5 +- .../cmssynpuf/CriteriaGroupSection.java | 3 +- .../criteriaconstants/sd/Criteria.java | 4 +- .../sd/CriteriaGroupSection.java | 3 +- .../tanagra/api/field/CountDistinctField.java | 3 +- .../tanagra/api/field/ValueDisplayField.java | 2 +- .../tanagra/api/filter/AttributeFilter.java | 32 +++--------- .../api/filter/BooleanAndOrFilter.java | 24 ++++----- .../tanagra/api/filter/BooleanNotFilter.java | 18 +++---- .../tanagra/api/filter/EntityFilter.java | 45 ++++++++++++++++- .../api/filter/GroupHasItemsFilter.java | 26 +++------- .../filter/HierarchyHasAncestorFilter.java | 30 +++--------- .../api/filter/HierarchyHasParentFilter.java | 18 ++----- .../api/filter/HierarchyIsLeafFilter.java | 15 +----- .../api/filter/HierarchyIsMemberFilter.java | 15 +----- .../api/filter/HierarchyIsRootFilter.java | 15 +----- .../tanagra/api/filter/ItemInGroupFilter.java | 26 +++------- .../filter/OccurrenceForPrimaryFilter.java | 29 +++-------- .../api/filter/PrimaryWithCriteriaFilter.java | 27 ++++------ .../api/filter/RelationshipFilter.java | 33 ++++--------- .../api/filter/TemporalPrimaryFilter.java | 28 ++++------- .../tanagra/api/filter/TextSearchFilter.java | 27 +++------- .../api/query/count/CountQueryRequest.java | 3 +- .../tanagra/filterbuilder/SchemaUtils.java | 3 +- .../bigquery/translator/BQApiTranslator.java | 17 +++++-- .../filter/BQAttributeFilterTranslator.java | 20 ++++---- .../BQHierarchyIsLeafFilterTranslator.java | 5 +- .../query/sql/translator/ApiTranslator.java | 17 ++++++- .../terra/tanagra/underlay/IndexSchema.java | 49 ++++++------------- .../terra/tanagra/underlay/SourceSchema.java | 7 ++- .../bio/terra/tanagra/underlay/Underlay.java | 3 +- .../tanagra/underlay/entitymodel/Entity.java | 17 +++++-- ...e.java => ITEntitySearchByAttributes.java} | 4 +- .../indextable/ITRelationshipIdPairs.java | 6 ++- .../serialization/SZRollupCountsSql.java | 3 +- .../terra/tanagra/utils/GoogleBigQuery.java | 6 +-- .../entitygroup/variantPerson/idPairs.sql | 2 +- .../variantPerson/rollupCounts.sql | 2 +- ...rily.json => aouSC2023Q3R2_oneverily.json} | 6 +-- .../service/aouSC2023Q3R2_oneverily_dev.json | 6 +-- .../BQCountQueryResultsTest.java | 8 ++- .../resultparsing/BQHintQueryResultsTest.java | 4 +- .../resultparsing/BQListQueryResultsTest.java | 4 +- .../sqlbuilding/BQCountQueryTest.java | 6 ++- .../filter/BQAttributeFilterTest.java | 6 ++- .../filter/BQHierarchyFilterTest.java | 6 ++- 70 files changed, 417 insertions(+), 401 deletions(-) rename indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/{WriteEntitySearchByAttribute.java => WriteEntitySearchByAttributes.java} (94%) rename underlay/src/main/java/bio/terra/tanagra/underlay/indextable/{ITEntitySearchByAttribute.java => ITEntitySearchByAttributes.java} (96%) rename underlay/src/main/resources/config/indexer/{aouSC2023Q3R2_verily.json => aouSC2023Q3R2_oneverily.json} (86%) diff --git a/indexer/src/main/java/bio/terra/tanagra/indexing/JobSequencer.java b/indexer/src/main/java/bio/terra/tanagra/indexing/JobSequencer.java index c4999c5fb..3571c3747 100644 --- a/indexer/src/main/java/bio/terra/tanagra/indexing/JobSequencer.java +++ b/indexer/src/main/java/bio/terra/tanagra/indexing/JobSequencer.java @@ -8,7 +8,7 @@ import bio.terra.tanagra.indexing.job.bigquery.WriteChildParent; import bio.terra.tanagra.indexing.job.bigquery.WriteEntityAttributes; import bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints; -import bio.terra.tanagra.indexing.job.bigquery.WriteEntitySearchByAttribute; +import bio.terra.tanagra.indexing.job.bigquery.WriteEntitySearchByAttributes; import bio.terra.tanagra.indexing.job.bigquery.WriteRelationshipIntermediateTable; import bio.terra.tanagra.indexing.job.bigquery.WriteTextSearchField; import bio.terra.tanagra.indexing.job.dataflow.WriteAncestorDescendant; @@ -29,12 +29,17 @@ import bio.terra.tanagra.underlay.entitymodel.entitygroup.GroupItems; import bio.terra.tanagra.underlay.indextable.ITEntityLevelDisplayHints; import bio.terra.tanagra.underlay.indextable.ITEntityMain; -import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttribute; +import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttributes; import bio.terra.tanagra.underlay.indextable.ITHierarchyAncestorDescendant; import bio.terra.tanagra.underlay.indextable.ITHierarchyChildParent; import bio.terra.tanagra.underlay.indextable.ITRelationshipIdPairs; import bio.terra.tanagra.underlay.serialization.SZIndexer; -import bio.terra.tanagra.underlay.sourcetable.*; +import bio.terra.tanagra.underlay.sourcetable.STEntityAttributes; +import bio.terra.tanagra.underlay.sourcetable.STHierarchyChildParent; +import bio.terra.tanagra.underlay.sourcetable.STHierarchyRootFilter; +import bio.terra.tanagra.underlay.sourcetable.STRelationshipIdPairs; +import bio.terra.tanagra.underlay.sourcetable.STRelationshipRollupCounts; +import bio.terra.tanagra.underlay.sourcetable.STTextSearchTerms; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -72,12 +77,14 @@ public static SequencedJobSet getJobSetForEntity( .getOptimizeSearchByAttributes() .forEach( searchTableAttributes -> { - ITEntitySearchByAttribute searchTable = + ITEntitySearchByAttributes searchTable = underlay .getIndexSchema() - .getEntitySearchByAttributeTable(entity, searchTableAttributes); + .getEntitySearchByAttributes( + entity, + searchTableAttributes.stream().map(Attribute::getName).toList()); jobSet.addJob( - new WriteEntitySearchByAttribute( + new WriteEntitySearchByAttributes( indexerConfig, entity, indexEntityMain, searchTable)); }); } diff --git a/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntityLevelDisplayHints.java b/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntityLevelDisplayHints.java index e27eb795d..5e9df2370 100644 --- a/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntityLevelDisplayHints.java +++ b/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntityLevelDisplayHints.java @@ -7,7 +7,9 @@ import bio.terra.tanagra.exception.SystemException; import bio.terra.tanagra.indexing.job.BigQueryJob; import bio.terra.tanagra.indexing.job.dataflow.beam.BigQueryBeamUtils; -import bio.terra.tanagra.query.bigquery.*; +import bio.terra.tanagra.query.bigquery.BQExecutor; +import bio.terra.tanagra.query.bigquery.BQExecutorInfrastructure; +import bio.terra.tanagra.query.bigquery.BQTable; import bio.terra.tanagra.query.sql.SqlField; import bio.terra.tanagra.query.sql.SqlParams; import bio.terra.tanagra.query.sql.SqlQueryField; diff --git a/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntitySearchByAttribute.java b/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntitySearchByAttributes.java similarity index 94% rename from indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntitySearchByAttribute.java rename to indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntitySearchByAttributes.java index fbbd302ce..7736ebf05 100644 --- a/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntitySearchByAttribute.java +++ b/indexer/src/main/java/bio/terra/tanagra/indexing/job/bigquery/WriteEntitySearchByAttributes.java @@ -4,7 +4,7 @@ import bio.terra.tanagra.indexing.job.dataflow.beam.BigQueryBeamUtils; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.indextable.ITEntityMain; -import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttribute; +import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttributes; import bio.terra.tanagra.underlay.serialization.SZIndexer; import com.google.cloud.bigquery.Clustering; import com.google.cloud.bigquery.Field; @@ -17,18 +17,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class WriteEntitySearchByAttribute extends BigQueryJob { - private static final Logger LOGGER = LoggerFactory.getLogger(WriteEntitySearchByAttribute.class); +public class WriteEntitySearchByAttributes extends BigQueryJob { + private static final Logger LOGGER = LoggerFactory.getLogger(WriteEntitySearchByAttributes.class); private final Entity entity; private final ITEntityMain entityTable; - private final ITEntitySearchByAttribute searchTable; + private final ITEntitySearchByAttributes searchTable; - public WriteEntitySearchByAttribute( + public WriteEntitySearchByAttributes( SZIndexer indexerConfig, Entity entity, ITEntityMain entityTable, - ITEntitySearchByAttribute searchTable) { + ITEntitySearchByAttributes searchTable) { super(indexerConfig); this.entity = entity; this.entityTable = entityTable; diff --git a/indexer/src/main/java/bio/terra/tanagra/indexing/job/dataflow/WriteRollupCounts.java b/indexer/src/main/java/bio/terra/tanagra/indexing/job/dataflow/WriteRollupCounts.java index b57bd9166..86cab1893 100644 --- a/indexer/src/main/java/bio/terra/tanagra/indexing/job/dataflow/WriteRollupCounts.java +++ b/indexer/src/main/java/bio/terra/tanagra/indexing/job/dataflow/WriteRollupCounts.java @@ -17,7 +17,7 @@ import bio.terra.tanagra.underlay.indextable.ITHierarchyAncestorDescendant; import bio.terra.tanagra.underlay.indextable.ITRelationshipIdPairs; import bio.terra.tanagra.underlay.serialization.SZIndexer; -import bio.terra.tanagra.underlay.sourcetable.*; +import bio.terra.tanagra.underlay.sourcetable.STRelationshipRollupCounts; import com.google.api.services.bigquery.model.TableFieldSchema; import com.google.api.services.bigquery.model.TableRow; import com.google.api.services.bigquery.model.TableSchema; diff --git a/service/src/main/java/bio/terra/tanagra/app/controller/CohortsApiController.java b/service/src/main/java/bio/terra/tanagra/app/controller/CohortsApiController.java index 65407d88e..5af74265f 100644 --- a/service/src/main/java/bio/terra/tanagra/app/controller/CohortsApiController.java +++ b/service/src/main/java/bio/terra/tanagra/app/controller/CohortsApiController.java @@ -11,12 +11,18 @@ import bio.terra.tanagra.api.filter.EntityFilter; import bio.terra.tanagra.api.query.PageMarker; import bio.terra.tanagra.api.query.count.CountQueryResult; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.OrderByDirection; import bio.terra.tanagra.app.authentication.SpringAuthentication; import bio.terra.tanagra.app.controller.objmapping.FromApiUtils; import bio.terra.tanagra.app.controller.objmapping.ToApiUtils; import bio.terra.tanagra.generated.controller.CohortsApi; -import bio.terra.tanagra.generated.model.*; +import bio.terra.tanagra.generated.model.ApiCohort; +import bio.terra.tanagra.generated.model.ApiCohortCloneInfo; +import bio.terra.tanagra.generated.model.ApiCohortCountQuery; +import bio.terra.tanagra.generated.model.ApiCohortCreateInfo; +import bio.terra.tanagra.generated.model.ApiCohortList; +import bio.terra.tanagra.generated.model.ApiCohortUpdateInfo; +import bio.terra.tanagra.generated.model.ApiInstanceCountList; import bio.terra.tanagra.service.UnderlayService; import bio.terra.tanagra.service.accesscontrol.AccessControlService; import bio.terra.tanagra.service.accesscontrol.Permissions; diff --git a/service/src/main/java/bio/terra/tanagra/app/controller/ReviewsApiController.java b/service/src/main/java/bio/terra/tanagra/app/controller/ReviewsApiController.java index 9827fa90d..1bfc78b93 100644 --- a/service/src/main/java/bio/terra/tanagra/app/controller/ReviewsApiController.java +++ b/service/src/main/java/bio/terra/tanagra/app/controller/ReviewsApiController.java @@ -46,7 +46,7 @@ import bio.terra.tanagra.service.artifact.reviewquery.ReviewQueryOrderBy; import bio.terra.tanagra.service.artifact.reviewquery.ReviewQueryRequest; import bio.terra.tanagra.service.artifact.reviewquery.ReviewQueryResult; -import bio.terra.tanagra.service.filter.*; +import bio.terra.tanagra.service.filter.FilterBuilderService; import bio.terra.tanagra.underlay.Underlay; import bio.terra.tanagra.underlay.entitymodel.Attribute; import bio.terra.tanagra.underlay.entitymodel.Entity; diff --git a/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/FromApiUtils.java b/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/FromApiUtils.java index 3750b86b0..4b5ba60a2 100644 --- a/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/FromApiUtils.java +++ b/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/FromApiUtils.java @@ -7,7 +7,21 @@ import bio.terra.tanagra.api.field.HierarchyPathField; import bio.terra.tanagra.api.field.RelatedEntityIdCountField; import bio.terra.tanagra.api.field.ValueDisplayField; -import bio.terra.tanagra.api.filter.*; +import bio.terra.tanagra.api.filter.AttributeFilter; +import bio.terra.tanagra.api.filter.BooleanAndOrFilter; +import bio.terra.tanagra.api.filter.BooleanNotFilter; +import bio.terra.tanagra.api.filter.EntityFilter; +import bio.terra.tanagra.api.filter.GroupHasItemsFilter; +import bio.terra.tanagra.api.filter.HierarchyHasAncestorFilter; +import bio.terra.tanagra.api.filter.HierarchyHasParentFilter; +import bio.terra.tanagra.api.filter.HierarchyIsLeafFilter; +import bio.terra.tanagra.api.filter.HierarchyIsMemberFilter; +import bio.terra.tanagra.api.filter.HierarchyIsRootFilter; +import bio.terra.tanagra.api.filter.ItemInGroupFilter; +import bio.terra.tanagra.api.filter.OccurrenceForPrimaryFilter; +import bio.terra.tanagra.api.filter.PrimaryWithCriteriaFilter; +import bio.terra.tanagra.api.filter.RelationshipFilter; +import bio.terra.tanagra.api.filter.TextSearchFilter; import bio.terra.tanagra.api.query.PageMarker; import bio.terra.tanagra.api.query.list.ListQueryRequest; import bio.terra.tanagra.api.query.list.OrderBy; diff --git a/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/ToApiUtils.java b/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/ToApiUtils.java index 1357d919d..3f254f1c8 100644 --- a/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/ToApiUtils.java +++ b/service/src/main/java/bio/terra/tanagra/app/controller/objmapping/ToApiUtils.java @@ -10,9 +10,31 @@ import bio.terra.tanagra.api.query.count.CountQueryResult; import bio.terra.tanagra.api.query.list.ListInstance; import bio.terra.tanagra.api.query.list.ListQueryResult; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.Literal; +import bio.terra.tanagra.api.shared.ReducingOperator; +import bio.terra.tanagra.api.shared.ValueDisplay; import bio.terra.tanagra.exception.SystemException; -import bio.terra.tanagra.generated.model.*; +import bio.terra.tanagra.generated.model.ApiAnnotationValue; +import bio.terra.tanagra.generated.model.ApiAttribute; +import bio.terra.tanagra.generated.model.ApiCohort; +import bio.terra.tanagra.generated.model.ApiCriteria; +import bio.terra.tanagra.generated.model.ApiCriteriaGroup; +import bio.terra.tanagra.generated.model.ApiCriteriaGroupSection; +import bio.terra.tanagra.generated.model.ApiDataType; +import bio.terra.tanagra.generated.model.ApiInstance; +import bio.terra.tanagra.generated.model.ApiInstanceCount; +import bio.terra.tanagra.generated.model.ApiInstanceCountList; +import bio.terra.tanagra.generated.model.ApiInstanceHierarchyFields; +import bio.terra.tanagra.generated.model.ApiInstanceListResult; +import bio.terra.tanagra.generated.model.ApiInstanceRelationshipFields; +import bio.terra.tanagra.generated.model.ApiLiteral; +import bio.terra.tanagra.generated.model.ApiLiteralValueUnion; +import bio.terra.tanagra.generated.model.ApiProperties; +import bio.terra.tanagra.generated.model.ApiPropertyKeyValue; +import bio.terra.tanagra.generated.model.ApiReducingOperator; +import bio.terra.tanagra.generated.model.ApiStudy; +import bio.terra.tanagra.generated.model.ApiUnderlaySummary; +import bio.terra.tanagra.generated.model.ApiValueDisplay; import bio.terra.tanagra.service.artifact.model.AnnotationValue; import bio.terra.tanagra.service.artifact.model.Cohort; import bio.terra.tanagra.service.artifact.model.CohortRevision; diff --git a/service/src/main/java/bio/terra/tanagra/db/CohortDao.java b/service/src/main/java/bio/terra/tanagra/db/CohortDao.java index f9058a63d..18f3d795a 100644 --- a/service/src/main/java/bio/terra/tanagra/db/CohortDao.java +++ b/service/src/main/java/bio/terra/tanagra/db/CohortDao.java @@ -5,7 +5,8 @@ import bio.terra.common.exception.MissingRequiredFieldException; import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.api.filter.BooleanAndOrFilter; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.JoinOperator; +import bio.terra.tanagra.api.shared.ReducingOperator; import bio.terra.tanagra.exception.SystemException; import bio.terra.tanagra.service.artifact.model.Cohort; import bio.terra.tanagra.service.artifact.model.CohortRevision; diff --git a/service/src/main/java/bio/terra/tanagra/service/UnderlayService.java b/service/src/main/java/bio/terra/tanagra/service/UnderlayService.java index 15d9fb438..a655d7a62 100644 --- a/service/src/main/java/bio/terra/tanagra/service/UnderlayService.java +++ b/service/src/main/java/bio/terra/tanagra/service/UnderlayService.java @@ -1,6 +1,13 @@ package bio.terra.tanagra.service; -import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.*; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.ENUM_COUNT_ALIAS; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.ENUM_DISP_ALIAS; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.ENUM_VAL_ALIAS; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.MAX_VAL_ALIAS; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.MIN_VAL_ALIAS; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.isEnumHintForRepeatedStringValue; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.isEnumHintForValueDisplay; +import static bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints.isRangeHint; import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.api.field.AttributeField; @@ -16,7 +23,8 @@ import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.api.shared.OrderByDirection; import bio.terra.tanagra.api.shared.ValueDisplay; -import bio.terra.tanagra.app.configuration.*; +import bio.terra.tanagra.app.configuration.ExportConfiguration; +import bio.terra.tanagra.app.configuration.UnderlayConfiguration; import bio.terra.tanagra.indexing.job.bigquery.WriteEntityLevelDisplayHints; import bio.terra.tanagra.query.bigquery.translator.BQApiTranslator; import bio.terra.tanagra.query.sql.SqlParams; @@ -26,8 +34,9 @@ import bio.terra.tanagra.service.accesscontrol.ResourceId; import bio.terra.tanagra.underlay.ConfigReader; import bio.terra.tanagra.underlay.Underlay; -import bio.terra.tanagra.underlay.entitymodel.*; -import bio.terra.tanagra.underlay.serialization.*; +import bio.terra.tanagra.underlay.entitymodel.Entity; +import bio.terra.tanagra.underlay.serialization.SZService; +import bio.terra.tanagra.underlay.serialization.SZUnderlay; import com.google.common.collect.ImmutableMap; import jakarta.annotation.Nullable; import java.util.ArrayList; diff --git a/service/src/main/java/bio/terra/tanagra/service/accesscontrol/model/FineGrainedAccessControl.java b/service/src/main/java/bio/terra/tanagra/service/accesscontrol/model/FineGrainedAccessControl.java index dc2edb444..4bbbc80ef 100644 --- a/service/src/main/java/bio/terra/tanagra/service/accesscontrol/model/FineGrainedAccessControl.java +++ b/service/src/main/java/bio/terra/tanagra/service/accesscontrol/model/FineGrainedAccessControl.java @@ -1,6 +1,9 @@ package bio.terra.tanagra.service.accesscontrol.model; -import bio.terra.tanagra.service.accesscontrol.*; +import bio.terra.tanagra.service.accesscontrol.AccessControlHelper; +import bio.terra.tanagra.service.accesscontrol.Permissions; +import bio.terra.tanagra.service.accesscontrol.ResourceCollection; +import bio.terra.tanagra.service.accesscontrol.ResourceId; import bio.terra.tanagra.service.authentication.UserId; import java.util.List; diff --git a/service/src/main/java/bio/terra/tanagra/service/artifact/model/Cohort.java b/service/src/main/java/bio/terra/tanagra/service/artifact/model/Cohort.java index 044eac25f..33a1d7d80 100644 --- a/service/src/main/java/bio/terra/tanagra/service/artifact/model/Cohort.java +++ b/service/src/main/java/bio/terra/tanagra/service/artifact/model/Cohort.java @@ -2,7 +2,7 @@ import static bio.terra.tanagra.service.artifact.model.Study.MAX_DISPLAY_NAME_LENGTH; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; import bio.terra.tanagra.exception.SystemException; import jakarta.annotation.Nullable; import java.time.OffsetDateTime; diff --git a/service/src/main/java/bio/terra/tanagra/service/artifact/model/CohortRevision.java b/service/src/main/java/bio/terra/tanagra/service/artifact/model/CohortRevision.java index a5df65f97..e6db162ed 100644 --- a/service/src/main/java/bio/terra/tanagra/service/artifact/model/CohortRevision.java +++ b/service/src/main/java/bio/terra/tanagra/service/artifact/model/CohortRevision.java @@ -2,7 +2,8 @@ import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.api.filter.BooleanAndOrFilter; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.JoinOperator; +import bio.terra.tanagra.api.shared.ReducingOperator; import jakarta.annotation.Nullable; import java.time.OffsetDateTime; import java.util.ArrayList; diff --git a/service/src/main/java/bio/terra/tanagra/service/artifact/model/FeatureSet.java b/service/src/main/java/bio/terra/tanagra/service/artifact/model/FeatureSet.java index 396c37828..cbb50f0fa 100644 --- a/service/src/main/java/bio/terra/tanagra/service/artifact/model/FeatureSet.java +++ b/service/src/main/java/bio/terra/tanagra/service/artifact/model/FeatureSet.java @@ -2,7 +2,7 @@ import static bio.terra.tanagra.service.artifact.model.Study.MAX_DISPLAY_NAME_LENGTH; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; import bio.terra.tanagra.underlay.entitymodel.Entity; import jakarta.annotation.Nullable; import java.time.OffsetDateTime; diff --git a/service/src/main/java/bio/terra/tanagra/service/artifact/model/Review.java b/service/src/main/java/bio/terra/tanagra/service/artifact/model/Review.java index cd61dd957..086d304c4 100644 --- a/service/src/main/java/bio/terra/tanagra/service/artifact/model/Review.java +++ b/service/src/main/java/bio/terra/tanagra/service/artifact/model/Review.java @@ -2,7 +2,7 @@ import static bio.terra.tanagra.service.artifact.model.Study.MAX_DISPLAY_NAME_LENGTH; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; import jakarta.annotation.Nullable; import java.time.OffsetDateTime; diff --git a/service/src/main/java/bio/terra/tanagra/service/artifact/model/Study.java b/service/src/main/java/bio/terra/tanagra/service/artifact/model/Study.java index 4860cb2bc..938a9b64f 100644 --- a/service/src/main/java/bio/terra/tanagra/service/artifact/model/Study.java +++ b/service/src/main/java/bio/terra/tanagra/service/artifact/model/Study.java @@ -1,6 +1,6 @@ package bio.terra.tanagra.service.artifact.model; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import jakarta.annotation.Nullable; diff --git a/service/src/main/java/bio/terra/tanagra/service/export/impl/IpynbFileDownload.java b/service/src/main/java/bio/terra/tanagra/service/export/impl/IpynbFileDownload.java index ae1b1c6ef..6836d402e 100644 --- a/service/src/main/java/bio/terra/tanagra/service/export/impl/IpynbFileDownload.java +++ b/service/src/main/java/bio/terra/tanagra/service/export/impl/IpynbFileDownload.java @@ -1,6 +1,6 @@ package bio.terra.tanagra.service.export.impl; -import bio.terra.tanagra.api.query.export.*; +import bio.terra.tanagra.api.query.export.ExportQueryResult; import bio.terra.tanagra.exception.SystemException; import bio.terra.tanagra.service.export.DataExport; import bio.terra.tanagra.service.export.DataExportHelper; diff --git a/service/src/main/java/bio/terra/tanagra/service/export/impl/RegressionTest.java b/service/src/main/java/bio/terra/tanagra/service/export/impl/RegressionTest.java index 88c1f6bfb..295d7287c 100644 --- a/service/src/main/java/bio/terra/tanagra/service/export/impl/RegressionTest.java +++ b/service/src/main/java/bio/terra/tanagra/service/export/impl/RegressionTest.java @@ -2,7 +2,7 @@ import static bio.terra.tanagra.utils.NameUtils.simplifyStringForName; -import bio.terra.tanagra.api.query.export.*; +import bio.terra.tanagra.api.query.export.ExportQueryResult; import bio.terra.tanagra.proto.regressiontest.RTCohort; import bio.terra.tanagra.proto.regressiontest.RTCriteria; import bio.terra.tanagra.proto.regressiontest.RTDataFeatureSet; diff --git a/service/src/main/java/bio/terra/tanagra/service/export/impl/VwbFileExport.java b/service/src/main/java/bio/terra/tanagra/service/export/impl/VwbFileExport.java index 2876f2c9c..800901eff 100644 --- a/service/src/main/java/bio/terra/tanagra/service/export/impl/VwbFileExport.java +++ b/service/src/main/java/bio/terra/tanagra/service/export/impl/VwbFileExport.java @@ -2,7 +2,7 @@ import static bio.terra.tanagra.service.export.DataExportHelper.urlEncode; -import bio.terra.tanagra.api.query.export.*; +import bio.terra.tanagra.api.query.export.ExportQueryResult; import bio.terra.tanagra.service.export.DataExport; import bio.terra.tanagra.service.export.DataExportHelper; import bio.terra.tanagra.service.export.DeploymentConfig; diff --git a/service/src/main/java/bio/terra/tanagra/service/filter/FilterBuilderService.java b/service/src/main/java/bio/terra/tanagra/service/filter/FilterBuilderService.java index 61173a902..dd3a9cf79 100644 --- a/service/src/main/java/bio/terra/tanagra/service/filter/FilterBuilderService.java +++ b/service/src/main/java/bio/terra/tanagra/service/filter/FilterBuilderService.java @@ -2,9 +2,18 @@ import bio.terra.tanagra.api.field.AttributeField; import bio.terra.tanagra.api.field.ValueDisplayField; -import bio.terra.tanagra.api.filter.*; +import bio.terra.tanagra.api.filter.AttributeFilter; +import bio.terra.tanagra.api.filter.BooleanAndOrFilter; import bio.terra.tanagra.api.filter.BooleanAndOrFilter.LogicalOperator; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.filter.BooleanNotFilter; +import bio.terra.tanagra.api.filter.EntityFilter; +import bio.terra.tanagra.api.filter.GroupHasItemsFilter; +import bio.terra.tanagra.api.filter.ItemInGroupFilter; +import bio.terra.tanagra.api.filter.OccurrenceForPrimaryFilter; +import bio.terra.tanagra.api.filter.RelationshipFilter; +import bio.terra.tanagra.api.filter.TemporalPrimaryFilter; +import bio.terra.tanagra.api.shared.BinaryOperator; +import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.exception.InvalidQueryException; import bio.terra.tanagra.exception.SystemException; import bio.terra.tanagra.filterbuilder.EntityOutput; @@ -21,7 +30,9 @@ import bio.terra.tanagra.underlay.entitymodel.entitygroup.CriteriaOccurrence; import bio.terra.tanagra.underlay.entitymodel.entitygroup.EntityGroup; import bio.terra.tanagra.underlay.entitymodel.entitygroup.GroupItems; -import bio.terra.tanagra.underlay.uiplugin.*; +import bio.terra.tanagra.underlay.uiplugin.CriteriaSelector; +import bio.terra.tanagra.underlay.uiplugin.PrepackagedCriteria; +import bio.terra.tanagra.underlay.uiplugin.SelectionData; import jakarta.annotation.Nullable; import java.util.ArrayList; import java.util.HashMap; diff --git a/service/src/test/java/bio/terra/tanagra/service/CohortServiceTest.java b/service/src/test/java/bio/terra/tanagra/service/CohortServiceTest.java index 19f7e87ac..c5072a3dc 100644 --- a/service/src/test/java/bio/terra/tanagra/service/CohortServiceTest.java +++ b/service/src/test/java/bio/terra/tanagra/service/CohortServiceTest.java @@ -13,7 +13,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; +import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.api.shared.DataType; import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.app.Main; diff --git a/service/src/test/java/bio/terra/tanagra/service/FeatureSetServiceTest.java b/service/src/test/java/bio/terra/tanagra/service/FeatureSetServiceTest.java index d950404fe..17e5f5440 100644 --- a/service/src/test/java/bio/terra/tanagra/service/FeatureSetServiceTest.java +++ b/service/src/test/java/bio/terra/tanagra/service/FeatureSetServiceTest.java @@ -10,7 +10,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; +import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.app.Main; import bio.terra.tanagra.service.accesscontrol.Permissions; import bio.terra.tanagra.service.accesscontrol.ResourceCollection; @@ -18,7 +19,9 @@ import bio.terra.tanagra.service.accesscontrol.ResourceType; import bio.terra.tanagra.service.artifact.FeatureSetService; import bio.terra.tanagra.service.artifact.StudyService; -import bio.terra.tanagra.service.artifact.model.*; +import bio.terra.tanagra.service.artifact.model.Criteria; +import bio.terra.tanagra.service.artifact.model.FeatureSet; +import bio.terra.tanagra.service.artifact.model.Study; import java.util.Comparator; import java.util.List; import java.util.Map; diff --git a/service/src/test/java/bio/terra/tanagra/service/FilterBuilderServiceTest.java b/service/src/test/java/bio/terra/tanagra/service/FilterBuilderServiceTest.java index e5c9dd098..5116bb1db 100644 --- a/service/src/test/java/bio/terra/tanagra/service/FilterBuilderServiceTest.java +++ b/service/src/test/java/bio/terra/tanagra/service/FilterBuilderServiceTest.java @@ -36,10 +36,21 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import bio.terra.tanagra.api.filter.*; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.filter.AttributeFilter; +import bio.terra.tanagra.api.filter.BooleanAndOrFilter; +import bio.terra.tanagra.api.filter.BooleanNotFilter; +import bio.terra.tanagra.api.filter.EntityFilter; +import bio.terra.tanagra.api.filter.HierarchyHasAncestorFilter; +import bio.terra.tanagra.api.filter.OccurrenceForPrimaryFilter; +import bio.terra.tanagra.api.filter.PrimaryWithCriteriaFilter; +import bio.terra.tanagra.api.filter.RelationshipFilter; +import bio.terra.tanagra.api.filter.TemporalPrimaryFilter; +import bio.terra.tanagra.api.shared.BinaryOperator; +import bio.terra.tanagra.api.shared.JoinOperator; +import bio.terra.tanagra.api.shared.Literal; +import bio.terra.tanagra.api.shared.ReducingOperator; import bio.terra.tanagra.app.Main; -import bio.terra.tanagra.exception.*; +import bio.terra.tanagra.exception.InvalidQueryException; import bio.terra.tanagra.filterbuilder.EntityOutput; import bio.terra.tanagra.service.artifact.model.Criteria; import bio.terra.tanagra.service.artifact.model.FeatureSet; diff --git a/service/src/test/java/bio/terra/tanagra/service/ReviewServiceTest.java b/service/src/test/java/bio/terra/tanagra/service/ReviewServiceTest.java index 028bdc416..6b3da02c0 100644 --- a/service/src/test/java/bio/terra/tanagra/service/ReviewServiceTest.java +++ b/service/src/test/java/bio/terra/tanagra/service/ReviewServiceTest.java @@ -8,7 +8,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; +import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.app.Main; import bio.terra.tanagra.service.accesscontrol.Permissions; import bio.terra.tanagra.service.accesscontrol.ResourceCollection; diff --git a/service/src/test/java/bio/terra/tanagra/service/StudyServiceTest.java b/service/src/test/java/bio/terra/tanagra/service/StudyServiceTest.java index 5cd6afe44..212be5137 100644 --- a/service/src/test/java/bio/terra/tanagra/service/StudyServiceTest.java +++ b/service/src/test/java/bio/terra/tanagra/service/StudyServiceTest.java @@ -6,7 +6,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import bio.terra.common.exception.*; +import bio.terra.common.exception.BadRequestException; +import bio.terra.common.exception.NotFoundException; import bio.terra.tanagra.app.Main; import bio.terra.tanagra.service.accesscontrol.Permissions; import bio.terra.tanagra.service.accesscontrol.ResourceCollection; @@ -14,7 +15,7 @@ import bio.terra.tanagra.service.accesscontrol.ResourceType; import bio.terra.tanagra.service.artifact.ActivityLogService; import bio.terra.tanagra.service.artifact.StudyService; -import bio.terra.tanagra.service.artifact.model.*; +import bio.terra.tanagra.service.artifact.model.Study; import java.util.Comparator; import java.util.List; import java.util.Map; diff --git a/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/cmssynpuf/CriteriaGroupSection.java b/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/cmssynpuf/CriteriaGroupSection.java index 6fa2897a4..9c2e9a481 100644 --- a/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/cmssynpuf/CriteriaGroupSection.java +++ b/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/cmssynpuf/CriteriaGroupSection.java @@ -1,7 +1,8 @@ package bio.terra.tanagra.service.criteriaconstants.cmssynpuf; import bio.terra.tanagra.api.filter.BooleanAndOrFilter; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.JoinOperator; +import bio.terra.tanagra.api.shared.ReducingOperator; import bio.terra.tanagra.service.artifact.model.CohortRevision; import java.util.List; diff --git a/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/Criteria.java b/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/Criteria.java index f7b59b50b..7d758b97a 100644 --- a/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/Criteria.java +++ b/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/Criteria.java @@ -4,7 +4,9 @@ import bio.terra.tanagra.proto.criteriaselector.KeyOuterClass; import bio.terra.tanagra.proto.criteriaselector.ValueOuterClass; -import bio.terra.tanagra.proto.criteriaselector.dataschema.*; +import bio.terra.tanagra.proto.criteriaselector.dataschema.DTAttribute; +import bio.terra.tanagra.proto.criteriaselector.dataschema.DTEntityGroup; +import bio.terra.tanagra.proto.criteriaselector.dataschema.DTUnhintedValue; import java.util.Map; public final class Criteria { diff --git a/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/CriteriaGroupSection.java b/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/CriteriaGroupSection.java index 3471c282b..d94127d3b 100644 --- a/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/CriteriaGroupSection.java +++ b/service/src/test/java/bio/terra/tanagra/service/criteriaconstants/sd/CriteriaGroupSection.java @@ -9,7 +9,8 @@ import static bio.terra.tanagra.service.criteriaconstants.sd.CriteriaGroup.DISABLED_CG_GENDER; import bio.terra.tanagra.api.filter.BooleanAndOrFilter; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.JoinOperator; +import bio.terra.tanagra.api.shared.ReducingOperator; import bio.terra.tanagra.service.artifact.model.CohortRevision; import java.util.List; diff --git a/underlay/src/main/java/bio/terra/tanagra/api/field/CountDistinctField.java b/underlay/src/main/java/bio/terra/tanagra/api/field/CountDistinctField.java index 6d391b36d..3e2955f87 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/field/CountDistinctField.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/field/CountDistinctField.java @@ -2,7 +2,8 @@ import bio.terra.tanagra.api.shared.DataType; import bio.terra.tanagra.underlay.Underlay; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Attribute; +import bio.terra.tanagra.underlay.entitymodel.Entity; public class CountDistinctField extends ValueDisplayField { private final Underlay underlay; diff --git a/underlay/src/main/java/bio/terra/tanagra/api/field/ValueDisplayField.java b/underlay/src/main/java/bio/terra/tanagra/api/field/ValueDisplayField.java index 8c23be782..0c1772a92 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/field/ValueDisplayField.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/field/ValueDisplayField.java @@ -1,7 +1,7 @@ package bio.terra.tanagra.api.field; import bio.terra.tanagra.api.shared.DataType; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Entity; public abstract class ValueDisplayField { public abstract Entity getEntity(); diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/AttributeFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/AttributeFilter.java index 134b6e08b..9460eb7f8 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/AttributeFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/AttributeFilter.java @@ -10,10 +10,9 @@ import com.google.common.collect.ImmutableList; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class AttributeFilter extends EntityFilter { - private final Underlay underlay; - private final Entity entity; private final Attribute attribute; private final UnaryOperator unaryOperator; private final BinaryOperator binaryOperator; @@ -22,8 +21,7 @@ public class AttributeFilter extends EntityFilter { public AttributeFilter( Underlay underlay, Entity entity, Attribute attribute, UnaryOperator unaryOperator) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(AttributeFilter.class), underlay, entity); this.attribute = attribute; this.unaryOperator = unaryOperator; this.binaryOperator = null; @@ -37,8 +35,7 @@ public AttributeFilter( Attribute attribute, BinaryOperator binaryOperator, Literal value) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(AttributeFilter.class), underlay, entity); this.attribute = attribute; this.unaryOperator = null; this.binaryOperator = binaryOperator; @@ -52,8 +49,7 @@ public AttributeFilter( Attribute attribute, NaryOperator naryOperator, List values) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(AttributeFilter.class), underlay, entity); this.attribute = attribute; this.unaryOperator = null; this.binaryOperator = null; @@ -61,19 +57,10 @@ public AttributeFilter( this.values = ImmutableList.copyOf(values); } - public Underlay getUnderlay() { - return underlay; - } - public Attribute getAttribute() { return attribute; } - @Override - public Entity getEntity() { - return entity; - } - public UnaryOperator getUnaryOperator() { return unaryOperator; } @@ -116,16 +103,11 @@ public String getOperatorName() { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } AttributeFilter that = (AttributeFilter) o; - return underlay.equals(that.underlay) - && entity.equals(that.entity) - && attribute.equals(that.attribute) + return attribute.equals(that.attribute) && unaryOperator == that.unaryOperator && binaryOperator == that.binaryOperator && naryOperator == that.naryOperator @@ -135,6 +117,6 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - underlay, entity, attribute, unaryOperator, binaryOperator, naryOperator, values); + super.hashCode(), attribute, unaryOperator, binaryOperator, naryOperator, values); } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanAndOrFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanAndOrFilter.java index 939abb444..24f1b6365 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanAndOrFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanAndOrFilter.java @@ -1,12 +1,14 @@ package bio.terra.tanagra.api.filter; -import bio.terra.tanagra.exception.*; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.exception.InvalidQueryException; +import bio.terra.tanagra.underlay.entitymodel.Entity; import com.google.common.collect.ImmutableList; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class BooleanAndOrFilter extends EntityFilter { + public enum LogicalOperator { AND, OR @@ -16,6 +18,10 @@ public enum LogicalOperator { private final List subFilters; public BooleanAndOrFilter(LogicalOperator operator, List subFilters) { + super( + LoggerFactory.getLogger(BooleanAndOrFilter.class), + /* underlay= */ null, + getSubFiltersEntity(subFilters)); this.operator = operator; this.subFilters = subFilters; } @@ -28,10 +34,9 @@ public ImmutableList getSubFilters() { return ImmutableList.copyOf(subFilters); } - @Override - public Entity getEntity() { - Entity entity = subFilters.get(0).getEntity(); - if (subFilters.stream().anyMatch(subFilter -> !subFilter.getEntity().equals(entity))) { + private static Entity getSubFiltersEntity(List filters) { + Entity entity = filters.get(0).getEntity(); + if (filters.stream().anyMatch(filter -> !filter.getEntity().equals(entity))) { throw new InvalidQueryException( "All sub-filters of a boolean and/or filter must be for the same entity."); } @@ -40,10 +45,7 @@ public Entity getEntity() { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } BooleanAndOrFilter that = (BooleanAndOrFilter) o; @@ -52,6 +54,6 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(operator, subFilters); + return Objects.hash(super.hashCode(), operator, subFilters); } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanNotFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanNotFilter.java index eb0f629d1..bf3db2316 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanNotFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/BooleanNotFilter.java @@ -1,12 +1,16 @@ package bio.terra.tanagra.api.filter; -import bio.terra.tanagra.underlay.entitymodel.*; import java.util.Objects; +import org.slf4j.LoggerFactory; public class BooleanNotFilter extends EntityFilter { private final EntityFilter subFilter; public BooleanNotFilter(EntityFilter subFilter) { + super( + LoggerFactory.getLogger(BooleanNotFilter.class), + subFilter.getUnderlay(), + subFilter.getEntity()); this.subFilter = subFilter; } @@ -14,17 +18,9 @@ public EntityFilter getSubFilter() { return subFilter; } - @Override - public Entity getEntity() { - return subFilter.getEntity(); - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } BooleanNotFilter that = (BooleanNotFilter) o; @@ -33,6 +29,6 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(subFilter); + return Objects.hash(super.hashCode(), subFilter); } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/EntityFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/EntityFilter.java index 24b137170..a4ea34096 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/EntityFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/EntityFilter.java @@ -1,10 +1,34 @@ package bio.terra.tanagra.api.filter; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.Underlay; +import bio.terra.tanagra.underlay.entitymodel.Entity; import java.util.List; +import java.util.Objects; +import org.slf4j.Logger; public abstract class EntityFilter { - public abstract Entity getEntity(); + + private final Logger logger; + private final Underlay underlay; + private final Entity entity; + + protected EntityFilter(Logger logger, Underlay underlay, Entity entity) { + this.logger = logger; + this.underlay = underlay; + this.entity = entity; + } + + protected Logger getLogger() { + return logger; + } + + public Underlay getUnderlay() { + return underlay; + } + + public Entity getEntity() { + return entity; + } // TODO: Add logic here to merge filters automatically to get a simpler filter overall. public boolean isMergeable(EntityFilter entityFilter) { @@ -20,4 +44,21 @@ public static boolean areSameFilterType(List filters) { String filterType = filters.get(0).getClass().getName(); return filters.stream().allMatch(filter -> filter.getClass().getName().equals(filterType)); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + EntityFilter that = (EntityFilter) o; + return Objects.equals(underlay, that.underlay) && Objects.equals(entity, that.entity); + } + + @Override + public int hashCode() { + return Objects.hash(underlay, entity); + } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/GroupHasItemsFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/GroupHasItemsFilter.java index 5ee926830..d0e16e12a 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/GroupHasItemsFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/GroupHasItemsFilter.java @@ -2,15 +2,15 @@ import bio.terra.tanagra.api.shared.BinaryOperator; import bio.terra.tanagra.underlay.Underlay; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Attribute; import bio.terra.tanagra.underlay.entitymodel.entitygroup.GroupItems; import com.google.common.collect.ImmutableList; import jakarta.annotation.Nullable; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class GroupHasItemsFilter extends EntityFilter { - private final Underlay underlay; private final GroupItems groupItems; private final EntityFilter itemsSubFilter; private final @Nullable List groupByCountAttributes; @@ -24,7 +24,8 @@ public GroupHasItemsFilter( @Nullable List groupByCountAttributes, @Nullable BinaryOperator groupByCountOperator, @Nullable Integer groupByCountValue) { - this.underlay = underlay; + super( + LoggerFactory.getLogger(GroupHasItemsFilter.class), underlay, groupItems.getGroupEntity()); this.groupItems = groupItems; this.itemsSubFilter = itemsSubFilter; this.groupByCountAttributes = @@ -35,10 +36,6 @@ public GroupHasItemsFilter( this.groupByCountValue = groupByCountValue; } - public Underlay getUnderlay() { - return underlay; - } - public GroupItems getGroupItems() { return groupItems; } @@ -62,22 +59,13 @@ public Integer getGroupByCountValue() { return groupByCountValue; } - @Override - public Entity getEntity() { - return groupItems.getGroupEntity(); - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } GroupHasItemsFilter that = (GroupHasItemsFilter) o; - return underlay.equals(that.underlay) - && groupItems.equals(that.groupItems) + return groupItems.equals(that.groupItems) && Objects.equals(itemsSubFilter, that.itemsSubFilter) && Objects.equals(groupByCountAttributes, that.groupByCountAttributes) && groupByCountOperator == that.groupByCountOperator @@ -87,7 +75,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - underlay, + super.hashCode(), groupItems, itemsSubFilter, groupByCountAttributes, diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasAncestorFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasAncestorFilter.java index 1cf955b45..60c1c153f 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasAncestorFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasAncestorFilter.java @@ -7,38 +7,26 @@ import com.google.common.collect.ImmutableList; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class HierarchyHasAncestorFilter extends EntityFilter { - private final Underlay underlay; - private final Entity entity; private final Hierarchy hierarchy; private final ImmutableList ancestorIds; public HierarchyHasAncestorFilter( Underlay underlay, Entity entity, Hierarchy hierarchy, Literal ancestorId) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyHasAncestorFilter.class), underlay, entity); this.hierarchy = hierarchy; this.ancestorIds = ImmutableList.of(ancestorId); } public HierarchyHasAncestorFilter( Underlay underlay, Entity entity, Hierarchy hierarchy, List ancestorIds) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyHasAncestorFilter.class), underlay, entity); this.hierarchy = hierarchy; this.ancestorIds = ImmutableList.copyOf(ancestorIds); } - public Underlay getUnderlay() { - return underlay; - } - - @Override - public Entity getEntity() { - return entity; - } - public Hierarchy getHierarchy() { return hierarchy; } @@ -49,21 +37,15 @@ public ImmutableList getAncestorIds() { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } HierarchyHasAncestorFilter that = (HierarchyHasAncestorFilter) o; - return underlay.equals(that.underlay) - && entity.equals(that.entity) - && hierarchy.equals(that.hierarchy) - && ancestorIds.equals(that.ancestorIds); + return hierarchy.equals(that.hierarchy) && ancestorIds.equals(that.ancestorIds); } @Override public int hashCode() { - return Objects.hash(underlay, entity, hierarchy, ancestorIds); + return Objects.hash(super.hashCode(), hierarchy, ancestorIds); } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasParentFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasParentFilter.java index f3ed7d504..a920601b7 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasParentFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyHasParentFilter.java @@ -6,38 +6,26 @@ import bio.terra.tanagra.underlay.entitymodel.Hierarchy; import com.google.common.collect.ImmutableList; import java.util.List; +import org.slf4j.LoggerFactory; public class HierarchyHasParentFilter extends EntityFilter { - private final Underlay underlay; - private final Entity entity; private final Hierarchy hierarchy; private final ImmutableList parentIds; public HierarchyHasParentFilter( Underlay underlay, Entity entity, Hierarchy hierarchy, Literal parentId) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyHasParentFilter.class), underlay, entity); this.hierarchy = hierarchy; this.parentIds = ImmutableList.of(parentId); } public HierarchyHasParentFilter( Underlay underlay, Entity entity, Hierarchy hierarchy, List parentIds) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyHasParentFilter.class), underlay, entity); this.hierarchy = hierarchy; this.parentIds = ImmutableList.copyOf(parentIds); } - public Underlay getUnderlay() { - return underlay; - } - - @Override - public Entity getEntity() { - return entity; - } - public Hierarchy getHierarchy() { return hierarchy; } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsLeafFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsLeafFilter.java index 4e5374650..e45dd5756 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsLeafFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsLeafFilter.java @@ -3,27 +3,16 @@ import bio.terra.tanagra.underlay.Underlay; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.entitymodel.Hierarchy; +import org.slf4j.LoggerFactory; public class HierarchyIsLeafFilter extends EntityFilter { - private final Underlay underlay; - private final Entity entity; private final Hierarchy hierarchy; public HierarchyIsLeafFilter(Underlay underlay, Entity entity, Hierarchy hierarchy) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyIsLeafFilter.class), underlay, entity); this.hierarchy = hierarchy; } - public Underlay getUnderlay() { - return underlay; - } - - @Override - public Entity getEntity() { - return entity; - } - public Hierarchy getHierarchy() { return hierarchy; } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsMemberFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsMemberFilter.java index 661fe5037..a6fc6c27a 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsMemberFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsMemberFilter.java @@ -3,27 +3,16 @@ import bio.terra.tanagra.underlay.Underlay; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.entitymodel.Hierarchy; +import org.slf4j.LoggerFactory; public class HierarchyIsMemberFilter extends EntityFilter { - private final Underlay underlay; - private final Entity entity; private final Hierarchy hierarchy; public HierarchyIsMemberFilter(Underlay underlay, Entity entity, Hierarchy hierarchy) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyIsMemberFilter.class), underlay, entity); this.hierarchy = hierarchy; } - public Underlay getUnderlay() { - return underlay; - } - - @Override - public Entity getEntity() { - return entity; - } - public Hierarchy getHierarchy() { return hierarchy; } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsRootFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsRootFilter.java index 2ea320a64..b3f0573bf 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsRootFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/HierarchyIsRootFilter.java @@ -3,27 +3,16 @@ import bio.terra.tanagra.underlay.Underlay; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.entitymodel.Hierarchy; +import org.slf4j.LoggerFactory; public class HierarchyIsRootFilter extends EntityFilter { - private final Underlay underlay; - private final Entity entity; private final Hierarchy hierarchy; public HierarchyIsRootFilter(Underlay underlay, Entity entity, Hierarchy hierarchy) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(HierarchyIsRootFilter.class), underlay, entity); this.hierarchy = hierarchy; } - public Underlay getUnderlay() { - return underlay; - } - - @Override - public Entity getEntity() { - return entity; - } - public Hierarchy getHierarchy() { return hierarchy; } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/ItemInGroupFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/ItemInGroupFilter.java index 0bdf6067b..43bc2eac6 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/ItemInGroupFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/ItemInGroupFilter.java @@ -2,15 +2,15 @@ import bio.terra.tanagra.api.shared.BinaryOperator; import bio.terra.tanagra.underlay.Underlay; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Attribute; import bio.terra.tanagra.underlay.entitymodel.entitygroup.GroupItems; import com.google.common.collect.ImmutableList; import jakarta.annotation.Nullable; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class ItemInGroupFilter extends EntityFilter { - private final Underlay underlay; private final GroupItems groupItems; private final @Nullable EntityFilter groupSubFilter; private final @Nullable List groupByCountAttributes; @@ -24,7 +24,7 @@ public ItemInGroupFilter( @Nullable List groupByCountAttributes, @Nullable BinaryOperator groupByCountOperator, @Nullable Integer groupByCountValue) { - this.underlay = underlay; + super(LoggerFactory.getLogger(ItemInGroupFilter.class), underlay, groupItems.getItemsEntity()); this.groupItems = groupItems; this.groupSubFilter = groupSubFilter; this.groupByCountAttributes = @@ -35,14 +35,11 @@ public ItemInGroupFilter( this.groupByCountValue = groupByCountValue; } - public Underlay getUnderlay() { - return underlay; - } - public GroupItems getGroupItems() { return groupItems; } + @Nullable public EntityFilter getGroupSubFilter() { return groupSubFilter; } @@ -62,22 +59,13 @@ public Integer getGroupByCountValue() { return groupByCountValue; } - @Override - public Entity getEntity() { - return groupItems.getItemsEntity(); - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } ItemInGroupFilter that = (ItemInGroupFilter) o; - return underlay.equals(that.underlay) - && groupItems.equals(that.groupItems) + return groupItems.equals(that.groupItems) && Objects.equals(groupSubFilter, that.groupSubFilter) && Objects.equals(groupByCountAttributes, that.groupByCountAttributes) && groupByCountOperator == that.groupByCountOperator @@ -87,7 +75,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - underlay, + super.hashCode(), groupItems, groupSubFilter, groupByCountAttributes, diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/OccurrenceForPrimaryFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/OccurrenceForPrimaryFilter.java index 96334beea..c8f4858b2 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/OccurrenceForPrimaryFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/OccurrenceForPrimaryFilter.java @@ -5,11 +5,10 @@ import bio.terra.tanagra.underlay.entitymodel.entitygroup.CriteriaOccurrence; import jakarta.annotation.Nullable; import java.util.Objects; +import org.slf4j.LoggerFactory; public class OccurrenceForPrimaryFilter extends EntityFilter { - private final Underlay underlay; private final CriteriaOccurrence criteriaOccurrence; - private final Entity occurrenceEntity; // At least one of the sub-filters must be not-null. private final @Nullable EntityFilter primarySubFilter; private final @Nullable EntityFilter criteriaSubFilter; @@ -20,23 +19,18 @@ public OccurrenceForPrimaryFilter( Entity occurrenceEntity, @Nullable EntityFilter primarySubFilter, @Nullable EntityFilter criteriaSubFilter) { - this.underlay = underlay; + super(LoggerFactory.getLogger(OccurrenceForPrimaryFilter.class), underlay, occurrenceEntity); this.criteriaOccurrence = criteriaOccurrence; - this.occurrenceEntity = occurrenceEntity; this.primarySubFilter = primarySubFilter; this.criteriaSubFilter = criteriaSubFilter; } - public Underlay getUnderlay() { - return underlay; - } - public CriteriaOccurrence getCriteriaOccurrence() { return criteriaOccurrence; } public Entity getOccurrenceEntity() { - return occurrenceEntity; + return getEntity(); } public boolean hasPrimarySubFilter() { @@ -55,30 +49,19 @@ public boolean hasCriteriaSubFilter() { return criteriaSubFilter; } - @Override - public Entity getEntity() { - return occurrenceEntity; - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } OccurrenceForPrimaryFilter that = (OccurrenceForPrimaryFilter) o; - return underlay.equals(that.underlay) - && criteriaOccurrence.equals(that.criteriaOccurrence) - && occurrenceEntity.equals(that.occurrenceEntity) + return criteriaOccurrence.equals(that.criteriaOccurrence) && Objects.equals(primarySubFilter, that.primarySubFilter) && Objects.equals(criteriaSubFilter, that.criteriaSubFilter); } @Override public int hashCode() { - return Objects.hash( - underlay, criteriaOccurrence, occurrenceEntity, primarySubFilter, criteriaSubFilter); + return Objects.hash(super.hashCode(), criteriaOccurrence, primarySubFilter, criteriaSubFilter); } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/PrimaryWithCriteriaFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/PrimaryWithCriteriaFilter.java index d8f26cc40..b25da471e 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/PrimaryWithCriteriaFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/PrimaryWithCriteriaFilter.java @@ -12,9 +12,10 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import org.slf4j.LoggerFactory; public class PrimaryWithCriteriaFilter extends EntityFilter { - private final Underlay underlay; + private final CriteriaOccurrence criteriaOccurrence; private final EntityFilter criteriaSubFilter; private final ImmutableMap> subFiltersPerOccurrenceEntity; @@ -30,7 +31,10 @@ public PrimaryWithCriteriaFilter( @Nullable Map> groupByAttributesPerOccurrenceEntity, @Nullable BinaryOperator groupByCountOperator, @Nullable Integer groupByCountValue) { - this.underlay = underlay; + super( + LoggerFactory.getLogger(PrimaryWithCriteriaFilter.class), + underlay, + underlay.getPrimaryEntity()); this.criteriaOccurrence = criteriaOccurrence; this.criteriaSubFilter = criteriaSubFilter; this.subFiltersPerOccurrenceEntity = @@ -45,10 +49,6 @@ public PrimaryWithCriteriaFilter( this.groupByCountValue = groupByCountValue; } - public Underlay getUnderlay() { - return underlay; - } - public CriteriaOccurrence getCriteriaOccurrence() { return criteriaOccurrence; } @@ -105,22 +105,13 @@ public Integer getGroupByCountValue() { return groupByCountValue; } - @Override - public Entity getEntity() { - return underlay.getPrimaryEntity(); - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } PrimaryWithCriteriaFilter that = (PrimaryWithCriteriaFilter) o; - return underlay.equals(that.underlay) - && criteriaOccurrence.equals(that.criteriaOccurrence) + return criteriaOccurrence.equals(that.criteriaOccurrence) && Objects.equals(criteriaSubFilter, that.criteriaSubFilter) && Objects.equals(subFiltersPerOccurrenceEntity, that.subFiltersPerOccurrenceEntity) && Objects.equals( @@ -132,7 +123,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - underlay, + super.hashCode(), criteriaOccurrence, criteriaSubFilter, subFiltersPerOccurrenceEntity, diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/RelationshipFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/RelationshipFilter.java index 3b65a5768..fd5fcef08 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/RelationshipFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/RelationshipFilter.java @@ -10,11 +10,10 @@ import jakarta.annotation.Nullable; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class RelationshipFilter extends EntityFilter { - private final Underlay underlay; private final EntityGroup entityGroup; - private final Entity selectEntity; private final Entity filterEntity; private final Relationship relationship; private final @Nullable EntityFilter subFilter; @@ -32,9 +31,8 @@ public RelationshipFilter( @Nullable List groupByCountAttributes, @Nullable BinaryOperator groupByCountOperator, @Nullable Integer groupByCountValue) { - this.underlay = underlay; + super(LoggerFactory.getLogger(RelationshipFilter.class), underlay, selectEntity); this.entityGroup = entityGroup; - this.selectEntity = selectEntity; this.filterEntity = relationship.getEntityA().equals(selectEntity) ? relationship.getEntityB() @@ -49,16 +47,12 @@ public RelationshipFilter( this.groupByCountValue = groupByCountValue; } - public Underlay getUnderlay() { - return underlay; - } - public EntityGroup getEntityGroup() { return entityGroup; } public Entity getSelectEntity() { - return selectEntity; + return getEntity(); } public Entity getFilterEntity() { @@ -73,6 +67,7 @@ public boolean hasSubFilter() { return subFilter != null; } + @Nullable public EntityFilter getSubFilter() { return subFilter; } @@ -85,6 +80,7 @@ public boolean hasGroupByFilter() { return groupByCountOperator != null && groupByCountValue != null; } + @Nullable public List getGroupByCountAttributes() { return groupByCountAttributes; } @@ -100,30 +96,20 @@ public Integer getGroupByCountValue() { } public boolean isForeignKeyOnSelectTable() { - return relationship.isForeignKeyAttribute(selectEntity); + return relationship.isForeignKeyAttribute(getSelectEntity()); } public boolean isForeignKeyOnFilterTable() { return relationship.isForeignKeyAttribute(filterEntity); } - @Override - public Entity getEntity() { - return getSelectEntity(); - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } RelationshipFilter that = (RelationshipFilter) o; - return underlay.equals(that.underlay) - && entityGroup.equals(that.entityGroup) - && selectEntity.equals(that.selectEntity) + return entityGroup.equals(that.entityGroup) && filterEntity.equals(that.filterEntity) && relationship.equals(that.relationship) && Objects.equals(subFilter, that.subFilter) @@ -135,9 +121,8 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - underlay, + super.hashCode(), entityGroup, - selectEntity, filterEntity, relationship, subFilter, diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/TemporalPrimaryFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/TemporalPrimaryFilter.java index 56f3c4314..f14567142 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/TemporalPrimaryFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/TemporalPrimaryFilter.java @@ -4,14 +4,14 @@ import bio.terra.tanagra.api.shared.ReducingOperator; import bio.terra.tanagra.filterbuilder.EntityOutput; import bio.terra.tanagra.underlay.Underlay; -import bio.terra.tanagra.underlay.entitymodel.*; import com.google.common.collect.ImmutableList; import jakarta.annotation.Nullable; import java.util.List; import java.util.Objects; +import org.slf4j.LoggerFactory; public class TemporalPrimaryFilter extends EntityFilter { - private final Underlay underlay; + private final @Nullable ReducingOperator firstConditionReducingOperator; private final ImmutableList firstCondition; private final JoinOperator joinOperator; @@ -27,7 +27,10 @@ public TemporalPrimaryFilter( @Nullable Integer joinOperatorValue, @Nullable ReducingOperator secondConditionReducingOperator, List secondCondition) { - this.underlay = underlay; + super( + LoggerFactory.getLogger(TemporalPrimaryFilter.class), + underlay, + underlay.getPrimaryEntity()); this.firstConditionReducingOperator = firstConditionReducingOperator; this.firstCondition = ImmutableList.copyOf(firstCondition); this.joinOperator = joinOperator; @@ -36,10 +39,6 @@ public TemporalPrimaryFilter( this.secondCondition = ImmutableList.copyOf(secondCondition); } - public Underlay getUnderlay() { - return underlay; - } - @Nullable public ReducingOperator getFirstConditionReducingOperator() { return firstConditionReducingOperator; @@ -67,22 +66,13 @@ public List getSecondCondition() { return secondCondition; } - @Override - public Entity getEntity() { - return underlay.getPrimaryEntity(); - } - @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } TemporalPrimaryFilter that = (TemporalPrimaryFilter) o; - return underlay.equals(that.underlay) - && firstConditionReducingOperator == that.firstConditionReducingOperator + return firstConditionReducingOperator == that.firstConditionReducingOperator && firstCondition.equals(that.firstCondition) && joinOperator == that.joinOperator && Objects.equals(joinOperatorValue, that.joinOperatorValue) @@ -93,7 +83,7 @@ public boolean equals(Object o) { @Override public int hashCode() { return Objects.hash( - underlay, + super.hashCode(), firstConditionReducingOperator, firstCondition, joinOperator, diff --git a/underlay/src/main/java/bio/terra/tanagra/api/filter/TextSearchFilter.java b/underlay/src/main/java/bio/terra/tanagra/api/filter/TextSearchFilter.java index 719f21427..eddcdb001 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/filter/TextSearchFilter.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/filter/TextSearchFilter.java @@ -5,15 +5,15 @@ import bio.terra.tanagra.underlay.entitymodel.Entity; import jakarta.annotation.Nullable; import java.util.Objects; +import org.slf4j.LoggerFactory; public class TextSearchFilter extends EntityFilter { + public enum TextSearchOperator { EXACT_MATCH, FUZZY_MATCH } - private final Underlay underlay; - private final Entity entity; private final TextSearchOperator operator; private final String text; private final @Nullable Attribute attribute; @@ -24,22 +24,12 @@ public TextSearchFilter( TextSearchOperator operator, String text, @Nullable Attribute attribute) { - this.underlay = underlay; - this.entity = entity; + super(LoggerFactory.getLogger(TextSearchFilter.class), underlay, entity); this.operator = operator; this.text = text; this.attribute = attribute; } - public Underlay getUnderlay() { - return underlay; - } - - @Override - public Entity getEntity() { - return entity; - } - public boolean isForSpecificAttribute() { return attribute != null; } @@ -59,22 +49,17 @@ public String getText() { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { + if (!super.equals(o)) { return false; } TextSearchFilter that = (TextSearchFilter) o; - return underlay.equals(that.underlay) - && entity.equals(that.entity) - && operator == that.operator + return operator == that.operator && text.equals(that.text) && Objects.equals(attribute, that.attribute); } @Override public int hashCode() { - return Objects.hash(underlay, entity, operator, text, attribute); + return Objects.hash(super.hashCode(), operator, text, attribute); } } diff --git a/underlay/src/main/java/bio/terra/tanagra/api/query/count/CountQueryRequest.java b/underlay/src/main/java/bio/terra/tanagra/api/query/count/CountQueryRequest.java index d77047b35..c11138f2c 100644 --- a/underlay/src/main/java/bio/terra/tanagra/api/query/count/CountQueryRequest.java +++ b/underlay/src/main/java/bio/terra/tanagra/api/query/count/CountQueryRequest.java @@ -6,7 +6,8 @@ import bio.terra.tanagra.api.query.hint.HintQueryResult; import bio.terra.tanagra.api.shared.OrderByDirection; import bio.terra.tanagra.underlay.Underlay; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Attribute; +import bio.terra.tanagra.underlay.entitymodel.Entity; import com.google.common.collect.ImmutableList; import jakarta.annotation.Nullable; import java.util.List; diff --git a/underlay/src/main/java/bio/terra/tanagra/filterbuilder/SchemaUtils.java b/underlay/src/main/java/bio/terra/tanagra/filterbuilder/SchemaUtils.java index 94361493c..654e94c38 100644 --- a/underlay/src/main/java/bio/terra/tanagra/filterbuilder/SchemaUtils.java +++ b/underlay/src/main/java/bio/terra/tanagra/filterbuilder/SchemaUtils.java @@ -1,6 +1,7 @@ package bio.terra.tanagra.filterbuilder; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.DataType; +import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.exception.SystemException; import bio.terra.tanagra.proto.criteriaselector.ValueOuterClass.Value; import java.sql.Timestamp; diff --git a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/BQApiTranslator.java b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/BQApiTranslator.java index 89dc5380b..4a992936c 100644 --- a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/BQApiTranslator.java +++ b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/BQApiTranslator.java @@ -7,10 +7,20 @@ import bio.terra.tanagra.api.field.HierarchyNumChildrenField; import bio.terra.tanagra.api.field.HierarchyPathField; import bio.terra.tanagra.api.field.RelatedEntityIdCountField; -import bio.terra.tanagra.api.filter.*; +import bio.terra.tanagra.api.filter.AttributeFilter; import bio.terra.tanagra.api.filter.BooleanAndOrFilter.LogicalOperator; +import bio.terra.tanagra.api.filter.HierarchyHasAncestorFilter; +import bio.terra.tanagra.api.filter.HierarchyHasParentFilter; +import bio.terra.tanagra.api.filter.HierarchyIsLeafFilter; +import bio.terra.tanagra.api.filter.HierarchyIsMemberFilter; +import bio.terra.tanagra.api.filter.HierarchyIsRootFilter; +import bio.terra.tanagra.api.filter.PrimaryWithCriteriaFilter; +import bio.terra.tanagra.api.filter.RelationshipFilter; +import bio.terra.tanagra.api.filter.TemporalPrimaryFilter; +import bio.terra.tanagra.api.filter.TextSearchFilter; import bio.terra.tanagra.api.filter.TextSearchFilter.TextSearchOperator; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.Literal; +import bio.terra.tanagra.api.shared.NaryOperator; import bio.terra.tanagra.query.bigquery.translator.field.BQAttributeFieldTranslator; import bio.terra.tanagra.query.bigquery.translator.field.BQCountDistinctFieldTranslator; import bio.terra.tanagra.query.bigquery.translator.field.BQHierarchyIsMemberFieldTranslator; @@ -28,7 +38,8 @@ import bio.terra.tanagra.query.bigquery.translator.filter.BQRelationshipFilterTranslator; import bio.terra.tanagra.query.bigquery.translator.filter.BQTemporalPrimaryFilterTranslator; import bio.terra.tanagra.query.bigquery.translator.filter.BQTextSearchFilterTranslator; -import bio.terra.tanagra.query.sql.*; +import bio.terra.tanagra.query.sql.SqlField; +import bio.terra.tanagra.query.sql.SqlParams; import bio.terra.tanagra.query.sql.translator.ApiFieldTranslator; import bio.terra.tanagra.query.sql.translator.ApiFilterTranslator; import bio.terra.tanagra.query.sql.translator.ApiTranslator; diff --git a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQAttributeFilterTranslator.java b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQAttributeFilterTranslator.java index 05d29f65c..1e8614ad1 100644 --- a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQAttributeFilterTranslator.java +++ b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQAttributeFilterTranslator.java @@ -2,8 +2,9 @@ import bio.terra.tanagra.api.filter.AttributeFilter; import bio.terra.tanagra.api.filter.BooleanAndOrFilter.LogicalOperator; -import bio.terra.tanagra.api.shared.*; -import bio.terra.tanagra.exception.*; +import bio.terra.tanagra.api.shared.BinaryOperator; +import bio.terra.tanagra.api.shared.NaryOperator; +import bio.terra.tanagra.exception.InvalidQueryException; import bio.terra.tanagra.query.sql.SqlField; import bio.terra.tanagra.query.sql.SqlParams; import bio.terra.tanagra.query.sql.SqlQueryField; @@ -12,7 +13,7 @@ import bio.terra.tanagra.underlay.entitymodel.Attribute; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.indextable.ITEntityMain; -import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttribute; +import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttributes; import java.util.List; import java.util.Map; @@ -59,7 +60,8 @@ private String buildSqlForSingleFilter(SqlParams sqlParams, String tableAlias) { SqlField valueField = fetchSelectField(entityTable, attribute); // search attribute-specific table if attribute is optimized for search - boolean isSearchOptimized = entity.containsOptimizeSearchByAttribute(attribute.getName()); + boolean isSearchOptimized = + entity.containsOptimizeSearchByAttributes(List.of(attribute.getName())); if (!isSearchOptimized && attribute.isDataTypeRepeated()) { boolean naryOperatorIn = @@ -120,11 +122,11 @@ private String buildSqlForList(SqlParams sqlParams, String tableAlias) { private String searchOptimizedSql(AttributeFilter filter, String tableAlias, String whereClause) { Entity firstEntity = filter.getEntity(); - ITEntitySearchByAttribute searchTable = + ITEntitySearchByAttributes searchTable = filter .getUnderlay() .getIndexSchema() - .getEntitySearchByAttributeTable(firstEntity, filter.getAttribute()); + .getEntitySearchByAttributes(firstEntity, List.of(filter.getAttribute().getName())); SqlQueryField id = SqlQueryField.of(fetchSelectField(searchTable, firstEntity.getIdAttribute())); return id.renderForWhere(tableAlias) @@ -162,9 +164,9 @@ public static boolean canMergeTranslation(List attributeFilters // Can merge (AND) the 'where' clauses if are all optimized on search together AttributeFilter firstFilter = attributeFilters.get(0); Entity firstEntity = firstFilter.getEntity(); - Attribute firstAttribute = firstFilter.getAttribute(); + List firstAttributeName = List.of(firstFilter.getAttribute().getName()); - if (!firstEntity.containsOptimizeSearchByAttribute(firstAttribute.getName())) { + if (!firstEntity.containsOptimizeSearchByAttributes(firstAttributeName)) { // first attribute itself is not optimized for search return false; } @@ -173,7 +175,7 @@ public static boolean canMergeTranslation(List attributeFilters firstFilter .getUnderlay() .getIndexSchema() - .getEntitySearchByAttributeTable(firstEntity, firstAttribute) + .getEntitySearchByAttributes(firstEntity, firstAttributeName) .getAttributeNames(); // check if all attributes in the filters are in the same search table for the same entity diff --git a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQHierarchyIsLeafFilterTranslator.java b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQHierarchyIsLeafFilterTranslator.java index 728e76e71..55c6ca7b8 100644 --- a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQHierarchyIsLeafFilterTranslator.java +++ b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/translator/filter/BQHierarchyIsLeafFilterTranslator.java @@ -1,7 +1,8 @@ package bio.terra.tanagra.query.bigquery.translator.filter; -import bio.terra.tanagra.api.filter.*; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.filter.HierarchyIsLeafFilter; +import bio.terra.tanagra.api.shared.BinaryOperator; +import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.query.sql.SqlField; import bio.terra.tanagra.query.sql.SqlParams; import bio.terra.tanagra.query.sql.translator.ApiFilterTranslator; diff --git a/underlay/src/main/java/bio/terra/tanagra/query/sql/translator/ApiTranslator.java b/underlay/src/main/java/bio/terra/tanagra/query/sql/translator/ApiTranslator.java index 86b16ff7c..5eb0c2072 100644 --- a/underlay/src/main/java/bio/terra/tanagra/query/sql/translator/ApiTranslator.java +++ b/underlay/src/main/java/bio/terra/tanagra/query/sql/translator/ApiTranslator.java @@ -8,8 +8,23 @@ import bio.terra.tanagra.api.field.HierarchyPathField; import bio.terra.tanagra.api.field.RelatedEntityIdCountField; import bio.terra.tanagra.api.field.ValueDisplayField; -import bio.terra.tanagra.api.filter.*; +import bio.terra.tanagra.api.filter.AttributeFilter; +import bio.terra.tanagra.api.filter.BooleanAndOrFilter; import bio.terra.tanagra.api.filter.BooleanAndOrFilter.LogicalOperator; +import bio.terra.tanagra.api.filter.BooleanNotFilter; +import bio.terra.tanagra.api.filter.EntityFilter; +import bio.terra.tanagra.api.filter.GroupHasItemsFilter; +import bio.terra.tanagra.api.filter.HierarchyHasAncestorFilter; +import bio.terra.tanagra.api.filter.HierarchyHasParentFilter; +import bio.terra.tanagra.api.filter.HierarchyIsLeafFilter; +import bio.terra.tanagra.api.filter.HierarchyIsMemberFilter; +import bio.terra.tanagra.api.filter.HierarchyIsRootFilter; +import bio.terra.tanagra.api.filter.ItemInGroupFilter; +import bio.terra.tanagra.api.filter.OccurrenceForPrimaryFilter; +import bio.terra.tanagra.api.filter.PrimaryWithCriteriaFilter; +import bio.terra.tanagra.api.filter.RelationshipFilter; +import bio.terra.tanagra.api.filter.TemporalPrimaryFilter; +import bio.terra.tanagra.api.filter.TextSearchFilter; import bio.terra.tanagra.api.shared.BinaryOperator; import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.api.shared.NaryOperator; diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/IndexSchema.java b/underlay/src/main/java/bio/terra/tanagra/underlay/IndexSchema.java index 41ff52385..5a4f5af71 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/IndexSchema.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/IndexSchema.java @@ -1,10 +1,9 @@ package bio.terra.tanagra.underlay; -import bio.terra.tanagra.underlay.entitymodel.Attribute; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.indextable.ITEntityLevelDisplayHints; import bio.terra.tanagra.underlay.indextable.ITEntityMain; -import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttribute; +import bio.terra.tanagra.underlay.indextable.ITEntitySearchByAttributes; import bio.terra.tanagra.underlay.indextable.ITHierarchyAncestorDescendant; import bio.terra.tanagra.underlay.indextable.ITHierarchyChildParent; import bio.terra.tanagra.underlay.indextable.ITInstanceLevelDisplayHints; @@ -26,9 +25,10 @@ justification = "Jackson object mapper writes the POJO fields during deserialization. Need to put this at the class level, because method-level does not handle internal lambdas.") public final class IndexSchema { + // TODO:dexamundsen change list to map private final ImmutableList entityMainTables; private final ImmutableList entityLevelDisplayHintTables; - private final ImmutableList entitySearchByAttributeTables; + private final ImmutableList entitySearchByAttributesTables; private final ImmutableList hierarchyChildParentTables; private final ImmutableList hierarchyAncestorDescendantTables; private final ImmutableList relationshipIdPairTables; @@ -37,14 +37,14 @@ public final class IndexSchema { private IndexSchema( List entityMainTables, List entityLevelDisplayHintTables, - List entitySearchByAttributeTables, + List entitySearchByAttributesTables, List hierarchyChildParentTables, List hierarchyAncestorDescendantTables, List relationshipIdPairTables, List instanceLevelDisplayHintTables) { this.entityMainTables = ImmutableList.copyOf(entityMainTables); this.entityLevelDisplayHintTables = ImmutableList.copyOf(entityLevelDisplayHintTables); - this.entitySearchByAttributeTables = ImmutableList.copyOf(entitySearchByAttributeTables); + this.entitySearchByAttributesTables = ImmutableList.copyOf(entitySearchByAttributesTables); this.hierarchyChildParentTables = ImmutableList.copyOf(hierarchyChildParentTables); this.hierarchyAncestorDescendantTables = ImmutableList.copyOf(hierarchyAncestorDescendantTables); @@ -66,32 +66,13 @@ public ITEntityLevelDisplayHints getEntityLevelDisplayHints(String entity) { .orElseThrow(); } - // function used during indexing: when table clustered on all attributes are needed - public ITEntitySearchByAttribute getEntitySearchByAttributeTable( - Entity entity, List attributes) { - List attrNames = attributes.stream().map(Attribute::getName).toList(); - return entitySearchByAttributeTables.stream() + public ITEntitySearchByAttributes getEntitySearchByAttributes( + Entity entity, List attributeNames) { + return entitySearchByAttributesTables.stream() .filter( searchTable -> searchTable.getEntity().equals(entity.getName()) - && searchTable.getAttributeNames().containsAll(attrNames)) - .findFirst() - .orElseThrow(); - } - - /** - * function used during filter translation: Currently filterableGroup creates an BOOLEAN_AND of - * attribute filters for search config with multiple attributes. eg: genomic_region is searched - * with contig=x AND position>=y AND position<=z There are three sub-filters that are queried on - * the same table - */ - public ITEntitySearchByAttribute getEntitySearchByAttributeTable( - Entity entity, Attribute attribute) { - return entitySearchByAttributeTables.stream() - .filter( - searchTable -> - searchTable.getEntity().equals(entity.getName()) - && searchTable.getAttributeNames().contains(attribute.getName())) + && searchTable.getAttributeNames().containsAll(attributeNames)) .findFirst() .orElseThrow(); } @@ -150,7 +131,7 @@ public static IndexSchema fromConfig( List entityMainTables = new ArrayList<>(); List entityLevelDisplayHintTables = new ArrayList<>(); - List entitySearchByAttributeTables = new ArrayList<>(); + List entitySearchByAttributesTables = new ArrayList<>(); List hierarchyChildParentTables = new ArrayList<>(); List hierarchyAncestorDescendantTables = new ArrayList<>(); List relationshipIdPairTables = new ArrayList<>(); @@ -167,7 +148,7 @@ public static IndexSchema fromConfig( szBigQuery.indexData, entityMainTables, entityLevelDisplayHintTables, - entitySearchByAttributeTables, + entitySearchByAttributesTables, hierarchyChildParentTables, hierarchyAncestorDescendantTables)); @@ -194,7 +175,7 @@ public static IndexSchema fromConfig( return new IndexSchema( entityMainTables, entityLevelDisplayHintTables, - entitySearchByAttributeTables, + entitySearchByAttributesTables, hierarchyChildParentTables, hierarchyAncestorDescendantTables, relationshipIdPairTables, @@ -210,7 +191,7 @@ private static void fromConfigEntity( SZBigQuery.IndexData szBigQueryIndexData, List entityMainTables, List entityLevelDisplayHintTables, - List entitySearchByAttributeTables, + List entitySearchByAttributesTables, List hierarchyChildParentTables, List hierarchyAncestorDescendantTables) { SZEntity szEntity = configReader.readEntity(entityPath); @@ -250,8 +231,8 @@ private static void fromConfigEntity( if (szEntity.optimizeSearchByAttributes != null) { szEntity.optimizeSearchByAttributes.forEach( attributeSearch -> - entitySearchByAttributeTables.add( - new ITEntitySearchByAttribute( + entitySearchByAttributesTables.add( + new ITEntitySearchByAttributes( nameHelper, szBigQueryIndexData, szEntity, attributeSearch))); } diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/SourceSchema.java b/underlay/src/main/java/bio/terra/tanagra/underlay/SourceSchema.java index a89f8ee66..9512e102d 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/SourceSchema.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/SourceSchema.java @@ -6,7 +6,12 @@ import bio.terra.tanagra.underlay.serialization.SZEntity; import bio.terra.tanagra.underlay.serialization.SZGroupItems; import bio.terra.tanagra.underlay.serialization.SZUnderlay; -import bio.terra.tanagra.underlay.sourcetable.*; +import bio.terra.tanagra.underlay.sourcetable.STEntityAttributes; +import bio.terra.tanagra.underlay.sourcetable.STHierarchyChildParent; +import bio.terra.tanagra.underlay.sourcetable.STHierarchyRootFilter; +import bio.terra.tanagra.underlay.sourcetable.STRelationshipIdPairs; +import bio.terra.tanagra.underlay.sourcetable.STRelationshipRollupCounts; +import bio.terra.tanagra.underlay.sourcetable.STTextSearchTerms; import com.google.common.collect.ImmutableList; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.ArrayList; diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/Underlay.java b/underlay/src/main/java/bio/terra/tanagra/underlay/Underlay.java index bf83fcb47..f0b66c090 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/Underlay.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/Underlay.java @@ -4,7 +4,8 @@ import bio.terra.tanagra.exception.NotFoundException; import bio.terra.tanagra.exception.SystemException; import bio.terra.tanagra.query.QueryRunner; -import bio.terra.tanagra.query.bigquery.*; +import bio.terra.tanagra.query.bigquery.BQExecutorInfrastructure; +import bio.terra.tanagra.query.bigquery.BQQueryRunner; import bio.terra.tanagra.underlay.entitymodel.Attribute; import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.entitymodel.Hierarchy; diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/entitymodel/Entity.java b/underlay/src/main/java/bio/terra/tanagra/underlay/entitymodel/Entity.java index 40a1fa8da..b83f943fc 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/entitymodel/Entity.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/entitymodel/Entity.java @@ -15,6 +15,7 @@ public final class Entity { private final ImmutableList hierarchies; private final ImmutableList optimizeGroupByAttributes; private final ImmutableList> optimizeSearchByAttributes; + private final ImmutableList> optimizeSearchByAttributeNames; private final boolean hasTextSearch; private final ImmutableList optimizeTextSearchAttributes; private final String sourceQueryTableName; @@ -42,6 +43,14 @@ public Entity( this.optimizeSearchByAttributes = ImmutableList.copyOf( optimizeSearchByAttributes.stream().map(ImmutableList::copyOf).toList()); + this.optimizeSearchByAttributeNames = + ImmutableList.copyOf( + optimizeSearchByAttributes.stream() + .map( + attributesList -> + ImmutableList.copyOf( + attributesList.stream().map(Attribute::getName).toList())) + .toList()); this.hasTextSearch = hasTextSearch; this.optimizeTextSearchAttributes = ImmutableList.copyOf(optimizeTextSearchAttributes); this.sourceQueryTableName = sourceQueryTableName; @@ -130,10 +139,10 @@ public ImmutableList> getOptimizeSearchByAttributes() { return optimizeSearchByAttributes; } - public boolean containsOptimizeSearchByAttribute(String attributeName) { - return optimizeSearchByAttributes.stream() - .flatMap(List::stream) - .anyMatch(attribute -> attribute.getName().equals(attributeName)); + public boolean containsOptimizeSearchByAttributes(List attributeNames) { + return !attributeNames.isEmpty() + && optimizeSearchByAttributeNames.stream() + .anyMatch(attributeList -> attributeList.containsAll(attributeNames)); } public boolean hasTextSearch() { diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITEntitySearchByAttribute.java b/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITEntitySearchByAttributes.java similarity index 96% rename from underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITEntitySearchByAttribute.java rename to underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITEntitySearchByAttributes.java index 5e0a4c3ca..37f39b633 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITEntitySearchByAttribute.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITEntitySearchByAttributes.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.List; -public class ITEntitySearchByAttribute extends IndexTable { +public class ITEntitySearchByAttributes extends IndexTable { public static final String TABLE_NAME = "ESA"; private final String entity; @@ -19,7 +19,7 @@ public class ITEntitySearchByAttribute extends IndexTable { private final boolean includeNullValues; private final ImmutableList columnSchemas; - public ITEntitySearchByAttribute( + public ITEntitySearchByAttributes( NameHelper namer, SZBigQuery.IndexData bigQueryConfig, SZEntity entity, diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITRelationshipIdPairs.java b/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITRelationshipIdPairs.java index 255f429f6..4293dfd65 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITRelationshipIdPairs.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/indextable/ITRelationshipIdPairs.java @@ -2,9 +2,11 @@ import bio.terra.tanagra.api.shared.DataType; import bio.terra.tanagra.query.sql.SqlField; -import bio.terra.tanagra.underlay.*; +import bio.terra.tanagra.underlay.ColumnSchema; +import bio.terra.tanagra.underlay.NameHelper; +import bio.terra.tanagra.underlay.SourceSchema; import bio.terra.tanagra.underlay.serialization.SZBigQuery; -import bio.terra.tanagra.underlay.sourcetable.*; +import bio.terra.tanagra.underlay.sourcetable.STRelationshipIdPairs; import com.google.common.collect.ImmutableList; import java.util.Arrays; import java.util.stream.Collectors; diff --git a/underlay/src/main/java/bio/terra/tanagra/underlay/serialization/SZRollupCountsSql.java b/underlay/src/main/java/bio/terra/tanagra/underlay/serialization/SZRollupCountsSql.java index 7bccd23ed..9f4311d8e 100644 --- a/underlay/src/main/java/bio/terra/tanagra/underlay/serialization/SZRollupCountsSql.java +++ b/underlay/src/main/java/bio/terra/tanagra/underlay/serialization/SZRollupCountsSql.java @@ -1,6 +1,7 @@ package bio.terra.tanagra.underlay.serialization; -import bio.terra.tanagra.annotation.*; +import bio.terra.tanagra.annotation.AnnotatedClass; +import bio.terra.tanagra.annotation.AnnotatedField; @AnnotatedClass( name = "SZRollupCountsSql", diff --git a/underlay/src/main/java/bio/terra/tanagra/utils/GoogleBigQuery.java b/underlay/src/main/java/bio/terra/tanagra/utils/GoogleBigQuery.java index 9e2fa48a5..091021862 100644 --- a/underlay/src/main/java/bio/terra/tanagra/utils/GoogleBigQuery.java +++ b/underlay/src/main/java/bio/terra/tanagra/utils/GoogleBigQuery.java @@ -262,13 +262,13 @@ public TableResult runQuery( JobStatistics.QueryStatistics stats = completedJob.getStatistics(); Long totalBytesProcessed = stats.getTotalBytesProcessed(); String jobId = completedJob.getJobId().getJob(); - LOGGER.info("job: {}, query: {}", jobId, sql); LOGGER.info( - "job: {}, total rows: {}, cache hit: {}, total megabytes processed: {}MB", + "BQ job: {}, total rows: {}, cache hit: {}, total data processed: {}MB, sql: {}", jobId, tableResult.getTotalRows(), stats.getCacheHit(), - totalBytesProcessed / 1_048_576); + totalBytesProcessed / 1_048_576, + sql); return tableResult; }, "Error running query: " + queryJobConfig.getLeft().getQuery()); diff --git a/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/idPairs.sql b/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/idPairs.sql index be16f6114..2c2a98d83 100644 --- a/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/idPairs.sql +++ b/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/idPairs.sql @@ -1,3 +1,3 @@ SELECT DISTINCT vid, flattened_person_id -FROM `${omopDataset}.variant_to_person` +FROM `${omopDataset}.cb_variant_to_person` CROSS JOIN UNNEST(person_ids) AS flattened_person_id diff --git a/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/rollupCounts.sql b/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/rollupCounts.sql index 31a3574cf..92a852ce7 100644 --- a/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/rollupCounts.sql +++ b/underlay/src/main/resources/config/datamapping/aouCT_testonly/entitygroup/variantPerson/rollupCounts.sql @@ -1,3 +1,3 @@ SELECT vid, ARRAY_LENGTH(person_ids) AS num_persons /* Wrap variant_to_person table in a SELECT DISTINCT because there is a duplicate row in the test data. */ -FROM (SELECT DISTINCT vid, person_ids FROM `${omopDataset}.variant_to_person` WHERE REGEXP_CONTAINS(vid, r"{indexIdRegex}")) +FROM (SELECT DISTINCT vid, person_ids FROM `${omopDataset}.cb_variant_to_person` WHERE REGEXP_CONTAINS(vid, r"{indexIdRegex}")) diff --git a/underlay/src/main/resources/config/indexer/aouSC2023Q3R2_verily.json b/underlay/src/main/resources/config/indexer/aouSC2023Q3R2_oneverily.json similarity index 86% rename from underlay/src/main/resources/config/indexer/aouSC2023Q3R2_verily.json rename to underlay/src/main/resources/config/indexer/aouSC2023Q3R2_oneverily.json index b9e9b2552..115dfd924 100644 --- a/underlay/src/main/resources/config/indexer/aouSC2023Q3R2_verily.json +++ b/underlay/src/main/resources/config/indexer/aouSC2023Q3R2_oneverily.json @@ -3,15 +3,15 @@ "bigQuery": { "sourceData": { "projectId": "prj-e-dexamundsen-hd2", - "datasetId": "aou_test_data_SC2023Q3R2", + "datasetId": "aou_test_data_SC2023Q3R2_011625", "sqlSubstitutions": { - "omopDataset": "prj-e-dexamundsen-hd2.aou_test_data_SC2023Q3R2", + "omopDataset": "prj-e-dexamundsen-hd2.aou_test_data_SC2023Q3R2_011625", "staticTablesDataset": "prj-e-dexamundsen-hd2.aou_static_prep_us" } }, "indexData": { "projectId": "prj-e-dexamundsen-hd2", - "datasetId": "aou_test_data_SC2023Q3R2_index_121724", + "datasetId": "aou_test_data_SC2023Q3R2_011625", "tablePrefix": "T" }, "queryProjectId": "prj-e-dexamundsen-hd2", diff --git a/underlay/src/main/resources/config/service/aouSC2023Q3R2_oneverily_dev.json b/underlay/src/main/resources/config/service/aouSC2023Q3R2_oneverily_dev.json index 801032e5e..909814e40 100644 --- a/underlay/src/main/resources/config/service/aouSC2023Q3R2_oneverily_dev.json +++ b/underlay/src/main/resources/config/service/aouSC2023Q3R2_oneverily_dev.json @@ -3,15 +3,15 @@ "bigQuery": { "sourceData": { "projectId": "vwb-dev-blissful-eggplant-4805", - "datasetId": "aou_test_data_SC2023Q3R2", + "datasetId": "aou_test_data_SC2023Q3R2_011625", "sqlSubstitutions": { - "omopDataset": "vwb-dev-blissful-eggplant-4805.aou_test_data_SC2023Q3R2", + "omopDataset": "vwb-dev-blissful-eggplant-4805.aou_test_data_SC2023Q3R2_011625", "staticTablesDataset": "vwb-dev-blissful-eggplant-4805.aou_static_prep_us" } }, "indexData": { "projectId": "vwb-dev-blissful-eggplant-4805", - "datasetId": "aou_test_data_SC2023Q3R2_index_121624", + "datasetId": "aou_test_data_SC2023Q3R2_011625", "tablePrefix": "T" }, "queryProjectId": "prj-d-1v-ucd", diff --git a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQCountQueryResultsTest.java b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQCountQueryResultsTest.java index 071b51f63..c7a793af1 100644 --- a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQCountQueryResultsTest.java +++ b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQCountQueryResultsTest.java @@ -13,7 +13,9 @@ import bio.terra.tanagra.api.field.HierarchyPathField; import bio.terra.tanagra.api.field.RelatedEntityIdCountField; import bio.terra.tanagra.api.field.ValueDisplayField; -import bio.terra.tanagra.api.query.count.*; +import bio.terra.tanagra.api.query.count.CountInstance; +import bio.terra.tanagra.api.query.count.CountQueryRequest; +import bio.terra.tanagra.api.query.count.CountQueryResult; import bio.terra.tanagra.api.query.hint.HintInstance; import bio.terra.tanagra.api.query.hint.HintQueryResult; import bio.terra.tanagra.api.shared.DataType; @@ -21,7 +23,9 @@ import bio.terra.tanagra.api.shared.OrderByDirection; import bio.terra.tanagra.api.shared.ValueDisplay; import bio.terra.tanagra.query.bigquery.BQRunnerTest; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Attribute; +import bio.terra.tanagra.underlay.entitymodel.Entity; +import bio.terra.tanagra.underlay.entitymodel.Hierarchy; import bio.terra.tanagra.underlay.entitymodel.entitygroup.EntityGroup; import java.util.List; import java.util.Map; diff --git a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQHintQueryResultsTest.java b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQHintQueryResultsTest.java index f5c298ffb..9ee266cf4 100644 --- a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQHintQueryResultsTest.java +++ b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQHintQueryResultsTest.java @@ -4,7 +4,9 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import bio.terra.tanagra.api.query.hint.*; +import bio.terra.tanagra.api.query.hint.HintInstance; +import bio.terra.tanagra.api.query.hint.HintQueryRequest; +import bio.terra.tanagra.api.query.hint.HintQueryResult; import bio.terra.tanagra.api.shared.DataType; import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.query.bigquery.BQRunnerTest; diff --git a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQListQueryResultsTest.java b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQListQueryResultsTest.java index 7d49fe244..06d1dfcf1 100644 --- a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQListQueryResultsTest.java +++ b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/resultparsing/BQListQueryResultsTest.java @@ -20,7 +20,9 @@ import bio.terra.tanagra.api.shared.OrderByDirection; import bio.terra.tanagra.api.shared.ValueDisplay; import bio.terra.tanagra.query.bigquery.BQRunnerTest; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.entitymodel.Attribute; +import bio.terra.tanagra.underlay.entitymodel.Entity; +import bio.terra.tanagra.underlay.entitymodel.Hierarchy; import bio.terra.tanagra.underlay.entitymodel.entitygroup.EntityGroup; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/BQCountQueryTest.java b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/BQCountQueryTest.java index 88ed46ece..0ee619175 100644 --- a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/BQCountQueryTest.java +++ b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/BQCountQueryTest.java @@ -6,7 +6,11 @@ import bio.terra.tanagra.api.query.count.CountQueryResult; import bio.terra.tanagra.api.query.hint.HintInstance; import bio.terra.tanagra.api.query.hint.HintQueryResult; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.BinaryOperator; +import bio.terra.tanagra.api.shared.DataType; +import bio.terra.tanagra.api.shared.Literal; +import bio.terra.tanagra.api.shared.OrderByDirection; +import bio.terra.tanagra.api.shared.ValueDisplay; import bio.terra.tanagra.query.bigquery.BQRunnerTest; import bio.terra.tanagra.query.bigquery.BQTable; import bio.terra.tanagra.underlay.entitymodel.Attribute; diff --git a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQAttributeFilterTest.java b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQAttributeFilterTest.java index 70bf325c9..975dc5686 100644 --- a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQAttributeFilterTest.java +++ b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQAttributeFilterTest.java @@ -4,7 +4,11 @@ import bio.terra.tanagra.api.filter.AttributeFilter; import bio.terra.tanagra.api.query.list.ListQueryRequest; import bio.terra.tanagra.api.query.list.ListQueryResult; -import bio.terra.tanagra.api.shared.*; +import bio.terra.tanagra.api.shared.BinaryOperator; +import bio.terra.tanagra.api.shared.DataType; +import bio.terra.tanagra.api.shared.Literal; +import bio.terra.tanagra.api.shared.NaryOperator; +import bio.terra.tanagra.api.shared.UnaryOperator; import bio.terra.tanagra.query.bigquery.BQRunnerTest; import bio.terra.tanagra.query.bigquery.BQTable; import bio.terra.tanagra.underlay.entitymodel.Attribute; diff --git a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQHierarchyFilterTest.java b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQHierarchyFilterTest.java index 9ce8f89fd..4ef7c3233 100644 --- a/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQHierarchyFilterTest.java +++ b/underlay/src/test/java/bio/terra/tanagra/query/bigquery/sqlbuilding/filter/BQHierarchyFilterTest.java @@ -1,7 +1,11 @@ package bio.terra.tanagra.query.bigquery.sqlbuilding.filter; import bio.terra.tanagra.api.field.AttributeField; -import bio.terra.tanagra.api.filter.*; +import bio.terra.tanagra.api.filter.HierarchyHasAncestorFilter; +import bio.terra.tanagra.api.filter.HierarchyHasParentFilter; +import bio.terra.tanagra.api.filter.HierarchyIsLeafFilter; +import bio.terra.tanagra.api.filter.HierarchyIsMemberFilter; +import bio.terra.tanagra.api.filter.HierarchyIsRootFilter; import bio.terra.tanagra.api.query.list.ListQueryRequest; import bio.terra.tanagra.api.query.list.ListQueryResult; import bio.terra.tanagra.api.shared.Literal; From 234be9fdd64915ab8f50f044f492d9beeeb6d9f8 Mon Sep 17 00:00:00 2001 From: dexamundsen Date: Mon, 20 Jan 2025 11:59:30 -0800 Subject: [PATCH 2/2] update imports --- .../tanagra/annotation/UnderlayConfigPath.java | 18 +++++++++++++++++- .../tanagra/query/bigquery/BQQueryRunner.java | 14 +++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/annotationProcessor/src/main/java/bio/terra/tanagra/annotation/UnderlayConfigPath.java b/annotationProcessor/src/main/java/bio/terra/tanagra/annotation/UnderlayConfigPath.java index 0f2f555d5..216bb08df 100644 --- a/annotationProcessor/src/main/java/bio/terra/tanagra/annotation/UnderlayConfigPath.java +++ b/annotationProcessor/src/main/java/bio/terra/tanagra/annotation/UnderlayConfigPath.java @@ -1,6 +1,22 @@ package bio.terra.tanagra.annotation; -import bio.terra.tanagra.underlay.serialization.*; +import bio.terra.tanagra.underlay.serialization.SZAttribute; +import bio.terra.tanagra.underlay.serialization.SZAttributeSearch; +import bio.terra.tanagra.underlay.serialization.SZBigQuery; +import bio.terra.tanagra.underlay.serialization.SZCorePlugin; +import bio.terra.tanagra.underlay.serialization.SZCriteriaOccurrence; +import bio.terra.tanagra.underlay.serialization.SZCriteriaSelector; +import bio.terra.tanagra.underlay.serialization.SZDataType; +import bio.terra.tanagra.underlay.serialization.SZEntity; +import bio.terra.tanagra.underlay.serialization.SZGroupItems; +import bio.terra.tanagra.underlay.serialization.SZHierarchy; +import bio.terra.tanagra.underlay.serialization.SZIndexer; +import bio.terra.tanagra.underlay.serialization.SZPrepackagedCriteria; +import bio.terra.tanagra.underlay.serialization.SZRollupCountsSql; +import bio.terra.tanagra.underlay.serialization.SZService; +import bio.terra.tanagra.underlay.serialization.SZTextSearch; +import bio.terra.tanagra.underlay.serialization.SZUnderlay; +import bio.terra.tanagra.underlay.serialization.SZVisualization; import java.util.List; @SuppressWarnings("PMD.CouplingBetweenObjects") diff --git a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/BQQueryRunner.java b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/BQQueryRunner.java index 5c4024240..9ce5fc5ba 100644 --- a/underlay/src/main/java/bio/terra/tanagra/query/bigquery/BQQueryRunner.java +++ b/underlay/src/main/java/bio/terra/tanagra/query/bigquery/BQQueryRunner.java @@ -3,7 +3,7 @@ import bio.terra.tanagra.api.field.AttributeField; import bio.terra.tanagra.api.field.CountDistinctField; import bio.terra.tanagra.api.field.ValueDisplayField; -import bio.terra.tanagra.api.filter.*; +import bio.terra.tanagra.api.filter.EntityFilter; import bio.terra.tanagra.api.query.PageMarker; import bio.terra.tanagra.api.query.count.CountInstance; import bio.terra.tanagra.api.query.count.CountQueryRequest; @@ -13,7 +13,10 @@ import bio.terra.tanagra.api.query.hint.HintInstance; import bio.terra.tanagra.api.query.hint.HintQueryRequest; import bio.terra.tanagra.api.query.hint.HintQueryResult; -import bio.terra.tanagra.api.query.list.*; +import bio.terra.tanagra.api.query.list.ListInstance; +import bio.terra.tanagra.api.query.list.ListQueryRequest; +import bio.terra.tanagra.api.query.list.ListQueryResult; +import bio.terra.tanagra.api.query.list.OrderBy; import bio.terra.tanagra.api.shared.DataType; import bio.terra.tanagra.api.shared.Literal; import bio.terra.tanagra.api.shared.ValueDisplay; @@ -27,8 +30,9 @@ import bio.terra.tanagra.query.sql.SqlQueryField; import bio.terra.tanagra.query.sql.SqlQueryRequest; import bio.terra.tanagra.query.sql.SqlQueryResult; -import bio.terra.tanagra.underlay.*; -import bio.terra.tanagra.underlay.entitymodel.*; +import bio.terra.tanagra.underlay.Underlay; +import bio.terra.tanagra.underlay.entitymodel.Attribute; +import bio.terra.tanagra.underlay.entitymodel.Entity; import bio.terra.tanagra.underlay.indextable.ITEntityLevelDisplayHints; import bio.terra.tanagra.underlay.indextable.ITEntityMain; import bio.terra.tanagra.underlay.indextable.ITInstanceLevelDisplayHints; @@ -44,7 +48,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.commons.lang3.*; +import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.tuple.Pair; public class BQQueryRunner implements QueryRunner {