From 7ee6b61311f55943bb2ea3c6b92851fc8b8e11f1 Mon Sep 17 00:00:00 2001 From: Kamran Date: Tue, 9 Aug 2016 18:01:42 +0100 Subject: [PATCH 1/2] DataType page: App Id selector for data types #386 --- .../ApplicationIdSelectorFactory.java | 31 ++++++++++++++++++- .../data_type/DataTypeIdSelectorFactory.java | 27 ++++++++++++++++ .../jobs/ApplicationIdSelectorHarness.java | 9 ++++-- 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 waltz-data/src/main/java/com/khartec/waltz/data/data_type/DataTypeIdSelectorFactory.java diff --git a/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java b/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java index e602ac882c..c1f0d7b58f 100644 --- a/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java +++ b/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java @@ -2,10 +2,12 @@ import com.khartec.waltz.data.IdSelectorFactory; import com.khartec.waltz.data.capability.CapabilityIdSelectorFactory; +import com.khartec.waltz.data.data_type.DataTypeIdSelectorFactory; import com.khartec.waltz.data.orgunit.OrganisationalUnitIdSelectorFactory; import com.khartec.waltz.model.*; import com.khartec.waltz.model.entiy_relationship.RelationshipKind; import com.khartec.waltz.schema.tables.*; +import com.khartec.waltz.schema.tables.DataType; import org.jooq.*; import org.jooq.impl.DSL; import org.slf4j.Logger; @@ -18,6 +20,8 @@ import static com.khartec.waltz.schema.tables.AppCapability.APP_CAPABILITY; import static com.khartec.waltz.schema.tables.Application.APPLICATION; import static com.khartec.waltz.schema.tables.ApplicationGroupEntry.APPLICATION_GROUP_ENTRY; +import static com.khartec.waltz.schema.tables.DataType.DATA_TYPE; +import static com.khartec.waltz.schema.tables.DataTypeUsage.DATA_TYPE_USAGE; import static com.khartec.waltz.schema.tables.Involvement.INVOLVEMENT; import static com.khartec.waltz.schema.tables.Person.PERSON; import static com.khartec.waltz.schema.tables.PersonHierarchy.PERSON_HIERARCHY; @@ -29,12 +33,15 @@ public class ApplicationIdSelectorFactory implements IdSelectorFactory { private static final Logger LOG = LoggerFactory.getLogger(ApplicationIdSelectorFactory.class); private final DSLContext dsl; - private final OrganisationalUnitIdSelectorFactory orgUnitIdSelectorFactory; private final CapabilityIdSelectorFactory capabilityIdSelectorFactory; + private final DataTypeIdSelectorFactory dataTypeIdSelectorFactory; + private final OrganisationalUnitIdSelectorFactory orgUnitIdSelectorFactory; private final Application app = APPLICATION.as("app"); private final AppCapability appCapability = APP_CAPABILITY.as("appcap"); private final ApplicationGroupEntry appGroup = APPLICATION_GROUP_ENTRY.as("appgrp"); + private final DataTypeUsage dataTypeUsage = DATA_TYPE_USAGE.as("dtu"); + private final DataType dataType = DATA_TYPE.as("dt"); private final EntityRelationship relationship = EntityRelationship.ENTITY_RELATIONSHIP.as("relationship"); private final Involvement involvement = INVOLVEMENT.as("involvement"); private final Person person = PERSON.as("per"); @@ -44,13 +51,16 @@ public class ApplicationIdSelectorFactory implements IdSelectorFactory { @Autowired public ApplicationIdSelectorFactory(DSLContext dsl, CapabilityIdSelectorFactory capabilityIdSelectorFactory, + DataTypeIdSelectorFactory dataTypeIdSelectorFactory, OrganisationalUnitIdSelectorFactory orgUnitIdSelectorFactory) { checkNotNull(dsl, "dsl cannot be null"); checkNotNull(capabilityIdSelectorFactory, "capabilityIdSelectorFactory cannot be null"); + checkNotNull(dataTypeIdSelectorFactory, "dataTypeIdSelectorFactory cannot be null"); checkNotNull(orgUnitIdSelectorFactory, "orgUnitIdSelectorFactory cannot be null"); this.dsl = dsl; this.capabilityIdSelectorFactory = capabilityIdSelectorFactory; + this.dataTypeIdSelectorFactory = dataTypeIdSelectorFactory; this.orgUnitIdSelectorFactory = orgUnitIdSelectorFactory; } @@ -70,6 +80,8 @@ public Select> apply(IdSelectionOptions options) { return mkForOrgUnit(ref, options.scope()); case PROCESS: return mkForProcess(ref, options.scope()); + case DATA_TYPE: + return mkForDataType(ref, options.scope()); default: throw new IllegalArgumentException("Cannot create selector for entity kind: "+ref.kind()); @@ -205,4 +217,21 @@ private Select> mkForCapability(EntityReference ref, HierarchyQuer .where(dsl.renderInlined(appCapability.CAPABILITY_ID.in(capabilitySelector))); } + + private Select> mkForDataType(EntityReference ref, HierarchyQueryScope scope) { + ImmutableIdSelectionOptions dtSelectorOptions = ImmutableIdSelectionOptions.builder() + .entityReference(ref) + .scope(scope) + .build(); + + Select> dtSelector = dataTypeIdSelectorFactory.apply(dtSelectorOptions); + + return dsl + .selectDistinct(dataTypeUsage.ENTITY_ID) + .from(dataTypeUsage) + .join(dataType).on(dataType.CODE.eq(dataTypeUsage.DATA_TYPE_CODE)) + .where(dsl.renderInlined(dataTypeUsage.ENTITY_KIND.eq(EntityKind.APPLICATION.name()) + .and(dataType.ID.in(dtSelector)))); + } + } diff --git a/waltz-data/src/main/java/com/khartec/waltz/data/data_type/DataTypeIdSelectorFactory.java b/waltz-data/src/main/java/com/khartec/waltz/data/data_type/DataTypeIdSelectorFactory.java new file mode 100644 index 0000000000..edfd0b1c7f --- /dev/null +++ b/waltz-data/src/main/java/com/khartec/waltz/data/data_type/DataTypeIdSelectorFactory.java @@ -0,0 +1,27 @@ +package com.khartec.waltz.data.data_type; + + +import com.khartec.waltz.data.entity_hierarchy.AbstractIdSelectorFactory; +import com.khartec.waltz.model.EntityKind; +import com.khartec.waltz.model.IdSelectionOptions; +import org.jooq.DSLContext; +import org.jooq.Record1; +import org.jooq.Select; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class DataTypeIdSelectorFactory extends AbstractIdSelectorFactory { + + + @Autowired + public DataTypeIdSelectorFactory(DSLContext dsl) { + super(dsl, EntityKind.DATA_TYPE); + } + + @Override + protected Select> mkForOptions(IdSelectionOptions options) { + throw new UnsupportedOperationException("Cannot create dataType selector from kind: " + + options.entityReference().kind()); + } +} diff --git a/waltz-jobs/src/main/java/com/khartec/waltz/jobs/ApplicationIdSelectorHarness.java b/waltz-jobs/src/main/java/com/khartec/waltz/jobs/ApplicationIdSelectorHarness.java index be9be560f3..6c250ef743 100644 --- a/waltz-jobs/src/main/java/com/khartec/waltz/jobs/ApplicationIdSelectorHarness.java +++ b/waltz-jobs/src/main/java/com/khartec/waltz/jobs/ApplicationIdSelectorHarness.java @@ -9,6 +9,7 @@ import com.khartec.waltz.service.involvement.InvolvementService; import org.jooq.DSLContext; import org.jooq.Record1; +import org.jooq.Result; import org.jooq.Select; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -30,8 +31,8 @@ public static void main(String[] args) { IdSelectionOptions options = ImmutableIdSelectionOptions.builder() .entityReference(ImmutableEntityReference .builder() - .kind(EntityKind.ORG_UNIT) - .id(30) + .kind(EntityKind.DATA_TYPE) + .id(6000) .build()) .scope(HierarchyQueryScope.CHILDREN) .build(); @@ -40,6 +41,10 @@ public static void main(String[] args) { Select> selector = factory.apply(options); System.out.println(selector); + + Result> fetch = dsl.fetch(selector); + + fetch.forEach(r -> System.out.println(r.value1())); } From 8bcb732ff2195261e9e3fcdd6a49d6b4339455a8 Mon Sep 17 00:00:00 2001 From: Kamran Date: Wed, 10 Aug 2016 10:06:52 +0100 Subject: [PATCH 2/2] DataType page model - extract condition into a seperate variable #386 --- .../data/application/ApplicationIdSelectorFactory.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java b/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java index c1f0d7b58f..7431032b9e 100644 --- a/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java +++ b/waltz-data/src/main/java/com/khartec/waltz/data/application/ApplicationIdSelectorFactory.java @@ -226,12 +226,14 @@ private Select> mkForDataType(EntityReference ref, HierarchyQueryS Select> dtSelector = dataTypeIdSelectorFactory.apply(dtSelectorOptions); + Condition condition = dataTypeUsage.ENTITY_KIND.eq(EntityKind.APPLICATION.name()) + .and(dataType.ID.in(dtSelector)); + return dsl .selectDistinct(dataTypeUsage.ENTITY_ID) .from(dataTypeUsage) .join(dataType).on(dataType.CODE.eq(dataTypeUsage.DATA_TYPE_CODE)) - .where(dsl.renderInlined(dataTypeUsage.ENTITY_KIND.eq(EntityKind.APPLICATION.name()) - .and(dataType.ID.in(dtSelector)))); + .where(dsl.renderInlined(condition)); } }