diff --git a/.github/workflows/custom-package-container.yml b/.github/workflows/custom-package-container.yml index 54ab4b8705..1e2c49cfcd 100644 --- a/.github/workflows/custom-package-container.yml +++ b/.github/workflows/custom-package-container.yml @@ -24,12 +24,12 @@ jobs: runs-on: ubuntu-latest name: "${{inputs.package_name}} container" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ inputs.branch != '' && inputs.branch || github.ref }} - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Log in to container registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/finish-release.yml b/.github/workflows/finish-release.yml index 43eb8cbe76..fa90ae24cb 100644 --- a/.github/workflows/finish-release.yml +++ b/.github/workflows/finish-release.yml @@ -97,7 +97,7 @@ jobs: needs: validate runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ needs.validate.outputs.release_sha }} fetch-depth: 0 @@ -153,7 +153,7 @@ jobs: needs: [validate, create-release] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: main fetch-depth: 0 diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index 5b6c479817..a853132a40 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -29,10 +29,10 @@ jobs: outputs: version: ${{ steps.get_version.outputs.version }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ github.event.inputs.branch || github.ref }} - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -143,8 +143,8 @@ jobs: runs-on: ubuntu-latest name: "JavaDocs" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -164,8 +164,8 @@ jobs: runs-on: ubuntu-latest name: "Snapshot" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -194,12 +194,12 @@ jobs: runs-on: ubuntu-latest name: "Base image" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ github.event.inputs.branch || github.ref }} - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Log in to container registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 41440bc62d..631f09e1f4 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -11,8 +11,8 @@ jobs: pr-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: temurin java-version: 21 @@ -32,8 +32,8 @@ jobs: pr-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: temurin java-version: 21 diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index d7d7c998f3..e039000e99 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -22,7 +22,7 @@ jobs: prepare: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1896c7ac19..2f1247a032 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,8 +24,8 @@ jobs: outputs: version: ${{ steps.get_version.outputs.version }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -125,8 +125,8 @@ jobs: runs-on: ubuntu-latest name: "Release" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -155,10 +155,10 @@ jobs: runs-on: ubuntu-latest name: "Containers" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Log in to container registry - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 757c01bb41..4d45fce5fe 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,8 +14,8 @@ jobs: runs-on: ubuntu-latest name: "Build" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -38,7 +38,7 @@ jobs: outputs: tests: ${{ steps.test-files.outputs.tests }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: List integration tests id: test-files run: | @@ -58,12 +58,12 @@ jobs: group: ${{ matrix.tests }} name: "Integration" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Download artifacts uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: build-artifacts - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -90,7 +90,7 @@ jobs: tests: ${{ steps.test-directories.outputs.tests }} asset-import-chunks: ${{ steps.asset-import-chunks.outputs.chunks }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: List package tests id: test-directories run: | @@ -125,12 +125,12 @@ jobs: include: ${{fromJson(needs.list-packages.outputs.asset-import-chunks)}} name: "asset-import: chunk ${{ matrix.chunk }}" steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Download artifacts uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: build-artifacts - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin @@ -169,12 +169,12 @@ jobs: # - name: Free disk space # if: matrix.tests == 'asset-import' # uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Download artifacts uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: build-artifacts - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: 21 distribution: temurin diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index a1353fda0c..75e36f8cd7 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -9,8 +9,8 @@ repositories { } dependencies { - implementation("org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:2.3.0") - implementation("com.diffplug.spotless:spotless-plugin-gradle:8.1.0") + implementation("org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:2.3.10") + implementation("com.diffplug.spotless:spotless-plugin-gradle:8.2.1") implementation("io.freefair.gradle:lombok-plugin:9.2.0") implementation("net.ltgt.errorprone:net.ltgt.errorprone.gradle.plugin:4.3.0") implementation("com.adarshr:gradle-test-logger-plugin:4.0.0") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 98cf0a7639..b10cd61b9c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,15 +1,15 @@ [versions] jackson = "2.21.0" slf4j = "2.0.17" -elasticsearch = "9.2.4" +elasticsearch = "9.3.0" freemarker = "2.3.34" classgraph = "4.8.184" -testng = "7.11.0" +testng = "7.12.0" log4j = "2.25.3" wiremock = "3.13.2" jnanoid = "2.0.0" -awssdk = "2.41.10" -gcs = "26.74.0" +awssdk = "2.41.24" +gcs = "26.75.0" system-stubs = "2.1.8" fastcsv = "4.1.0" poi = "5.5.1" @@ -25,19 +25,19 @@ sqlite = "3.51.1.0" jakarta-mail = "2.1.3" angus-mail = "2.0.5" pkl = "0.30.2" -adls = "12.26.0" -azure = "1.18.1" +adls = "12.26.2" +azure = "1.18.2" guava = "33.5.0-jre" -openlineage = "1.42.1" -kotlin = "2.3.0" +openlineage = "1.43.0" +kotlin = "2.3.10" kotlin-mu = "3.0.5" rocksdb = "10.4.2" -jetty = "12.1.5" -netty = "4.2.9.Final" +jetty = "12.1.6" +netty = "4.2.10.Final" rhino = "1.9.0" nimbus = "10.7" otel = "1.58.0" -otel-instrumentation = "2.23.0-alpha" +otel-instrumentation = "2.24.0-alpha" [libraries] jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/Utils.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/Utils.kt index d82d994c12..1965a0bccb 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/Utils.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/Utils.kt @@ -395,7 +395,10 @@ object Utils { } return when (default) { // TODO: likely need to extend to other types - is List<*> -> getOrDefault(null, default as List) as T + is List<*> -> { + getOrDefault(null, default as List) as T + } + else -> { // Recognize the default file location, and if found treat it as // a blank value @@ -1101,9 +1104,18 @@ object Utils { */ fun getBackingStore(directory: String = Paths.get(separator, "tmp").toString()): ObjectStorageSyncer = when (val cloud = getEnvVar("CLOUD_PROVIDER", "local")) { - "aws" -> S3Sync(getEnvVar("AWS_S3_BUCKET_NAME"), getEnvVar("AWS_S3_REGION"), logger) - "gcp" -> GCSSync(getEnvVar("GCP_PROJECT_ID"), getEnvVar("GCP_STORAGE_BUCKET"), logger, "") - "azure" -> ADLSSync(getEnvVar("AZURE_STORAGE_ACCOUNT"), getEnvVar("AZURE_STORAGE_CONTAINER_NAME"), logger, "", "", getEnvVar("AZURE_STORAGE_ACCESS_KEY")) + "aws" -> { + S3Sync(getEnvVar("AWS_S3_BUCKET_NAME"), getEnvVar("AWS_S3_REGION"), logger) + } + + "gcp" -> { + GCSSync(getEnvVar("GCP_PROJECT_ID"), getEnvVar("GCP_STORAGE_BUCKET"), logger, "") + } + + "azure" -> { + ADLSSync(getEnvVar("AZURE_STORAGE_ACCOUNT"), getEnvVar("AZURE_STORAGE_CONTAINER_NAME"), logger, "", "", getEnvVar("AZURE_STORAGE_ACCESS_KEY")) + } + "local" -> { if (getEnvVar("AWS_S3_BUCKET_NAME").isNotBlank()) { S3Sync(getEnvVar("AWS_S3_BUCKET_NAME"), getEnvVar("AWS_S3_REGION"), logger) @@ -1111,7 +1123,10 @@ object Utils { LocalSync(directory, logger) } } - else -> throw IllegalStateException("Unable to determine cloud provider: $cloud") + + else -> { + throw IllegalStateException("Unable to determine cloud provider: $cloud") + } } /** @@ -1196,12 +1211,17 @@ object Utils { val base = basePath.toAbsolutePath().normalize() val resolved = base.resolve(userProvided).normalize() when { - !resolved.startsWith(base) -> + !resolved.startsWith(base) -> { throw IllegalArgumentException("Path traversal attempt detected -- will not proceed due to security implications.") - userProvided.contains('\u0000') -> + } + + userProvided.contains('\u0000') -> { throw IllegalArgumentException("Null bytes in the path or filename are not allowed.") - resolved.toAbsolutePath().toString().length > 800 -> + } + + resolved.toAbsolutePath().toString().length > 800 -> { throw IllegalArgumentException("User-provided path and filename are too long (exceeds maximum length of 800 characters).") + } } return resolved } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/WidgetSerde.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/WidgetSerde.kt index 91b8660732..c171c61ed0 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/WidgetSerde.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/WidgetSerde.kt @@ -179,7 +179,10 @@ object WidgetSerde { gen?.writeString(value.toJson(client)) } } - else -> gen?.writeString(mapper.writeValueAsString(value)) + + else -> { + gen?.writeString(mapper.writeValueAsString(value)) + } } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AbstractRelationshipAttributesXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AbstractRelationshipAttributesXformer.kt index 6f46bd1e73..8ae5d828b8 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AbstractRelationshipAttributesXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AbstractRelationshipAttributesXformer.kt @@ -39,7 +39,10 @@ abstract class AbstractRelationshipAttributesXformer { propertyMap, ) } - else -> Pair(extendedRef, emptyMap()) + + else -> { + Pair(extendedRef, emptyMap()) + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AssetRefXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AssetRefXformer.kt index 70442011aa..e6f8d0c350 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AssetRefXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AssetRefXformer.kt @@ -66,7 +66,10 @@ object AssetRefXformer { // Handle some assets as direct embeds val baseEncoding = when (asset) { - is Readme -> asset.description ?: "" + is Readme -> { + asset.description ?: "" + } + is Link -> { // Transform to a set of useful, non-overlapping info Link @@ -76,11 +79,27 @@ object AssetRefXformer { .build() .toJson(ctx.client) } - is Glossary -> GlossaryXformer.encode(ctx, asset) - is GlossaryCategory -> GlossaryCategoryXformer.encode(ctx, asset) - is GlossaryTerm -> GlossaryTermXformer.encode(ctx, asset) - is DataDomain -> DataDomainXformer.encode(ctx, asset) - is IModel -> ModelAssetXformer.encode(ctx, asset) + + is Glossary -> { + GlossaryXformer.encode(ctx, asset) + } + + is GlossaryCategory -> { + GlossaryCategoryXformer.encode(ctx, asset) + } + + is GlossaryTerm -> { + GlossaryTermXformer.encode(ctx, asset) + } + + is DataDomain -> { + DataDomainXformer.encode(ctx, asset) + } + + is IModel -> { + ModelAssetXformer.encode(ctx, asset) + } + else -> { var qualifiedName = asset.qualifiedName if (asset.qualifiedName.isNullOrEmpty() && asset.uniqueAttributes != null) { @@ -123,14 +142,17 @@ object AssetRefXformer { fieldOverrideForType = "assignedTerms" refOverride = remainder } + "CATEGORY" -> { fieldOverrideForType = GlossaryTerm.CATEGORIES.atlanFieldName refOverride = remainder } + "GLOSSARY" -> { fieldOverrideForType = GlossaryCategory.ANCHOR.atlanFieldName refOverride = remainder } + "DOMAIN" -> { fieldOverrideForType = DataProduct.DATA_DOMAIN.atlanFieldName refOverride = remainder @@ -141,19 +163,38 @@ object AssetRefXformer { } val baseRef = when (fieldOverrideForType) { - Asset.README.atlanFieldName -> Readme._internal().description(refOverride).build() + Asset.README.atlanFieldName -> { + Readme._internal().description(refOverride).build() + } + Asset.LINKS.atlanFieldName -> { val (linkJson, semantic) = getSemantic(refOverride) val link = ctx.client.readValue(linkJson, Link::class.java) link.toBuilder().semantic(semantic).build() } + GlossaryCategory.PARENT_CATEGORY.atlanFieldName, GlossaryTerm.CATEGORIES.atlanFieldName, - -> GlossaryCategoryXformer.decode(ctx, refOverride, fieldOverrideForType) - GlossaryCategory.ANCHOR.atlanFieldName -> GlossaryXformer.decode(ctx, refOverride, fieldOverrideForType) - "assignedTerms", in GlossaryTermXformer.TERM_TO_TERM_FIELDS -> GlossaryTermXformer.decode(ctx, refOverride, fieldOverrideForType) - DataDomain.PARENT_DOMAIN.atlanFieldName, DataProduct.DATA_DOMAIN.atlanFieldName -> DataDomainXformer.decode(ctx, refOverride, fieldOverrideForType) - in ModelAssetXformer.MODEL_ASSET_REF_FIELDS -> ModelAssetXformer.decode(ctx, refOverride, fieldOverrideForType) + -> { + GlossaryCategoryXformer.decode(ctx, refOverride, fieldOverrideForType) + } + + GlossaryCategory.ANCHOR.atlanFieldName -> { + GlossaryXformer.decode(ctx, refOverride, fieldOverrideForType) + } + + "assignedTerms", in GlossaryTermXformer.TERM_TO_TERM_FIELDS -> { + GlossaryTermXformer.decode(ctx, refOverride, fieldOverrideForType) + } + + DataDomain.PARENT_DOMAIN.atlanFieldName, DataProduct.DATA_DOMAIN.atlanFieldName -> { + DataDomainXformer.decode(ctx, refOverride, fieldOverrideForType) + } + + in ModelAssetXformer.MODEL_ASSET_REF_FIELDS -> { + ModelAssetXformer.decode(ctx, refOverride, fieldOverrideForType) + } + else -> { val (refOnly, semantic) = getSemantic(refOverride) val typeName = refOnly.substringBefore(TYPE_QN_DELIMITER) @@ -180,7 +221,10 @@ object AssetRefXformer { val (_, semantic) = getSemantic(refOverride) UserDefRelationshipXformer.decode(ctx, baseRef, semantic, properties) } - else -> baseRef + + else -> { + baseRef + } } } @@ -271,6 +315,7 @@ object AssetRefXformer { } } } + LinkIdempotencyInvariant.NAME -> { if (link.name == related.name) { logger.debug { "Found matching name for: ${link.name}" } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AtlanTagXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AtlanTagXformer.kt index f848a19d5e..8ce4e1a6a5 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AtlanTagXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/AtlanTagXformer.kt @@ -104,28 +104,36 @@ object AtlanTagXformer { ) { if (atlanTagTokens.size > 1) { when (atlanTagTokens[1].uppercase()) { - PropagationType.FULL.name -> + PropagationType.FULL.name -> { builder .propagate( true, ).removePropagationsOnEntityDelete(true) .restrictPropagationThroughLineage(false) .restrictPropagationThroughHierarchy(false) - PropagationType.HIERARCHY_ONLY.name -> + } + + PropagationType.HIERARCHY_ONLY.name -> { builder .propagate( true, ).removePropagationsOnEntityDelete(true) .restrictPropagationThroughLineage(true) .restrictPropagationThroughHierarchy(false) - PropagationType.LINEAGE_ONLY.name -> + } + + PropagationType.LINEAGE_ONLY.name -> { builder .propagate( true, ).removePropagationsOnEntityDelete(true) .restrictPropagationThroughLineage(false) .restrictPropagationThroughHierarchy(true) - else -> builder.propagate(false) + } + + else -> { + builder.propagate(false) + } } } else { // If there is no propagation option specified, turn off propagation diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/CellXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/CellXformer.kt index 28ac5b45c9..f8a02f5909 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/CellXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/CellXformer.kt @@ -33,6 +33,7 @@ object CellXformer { encodeString(value) } } + is Collection<*> -> { val list = mutableListOf() for (element in value) { @@ -41,6 +42,7 @@ object CellXformer { } return getDelimitedList(list) } + is Map<*, *> -> { val list = mutableListOf() for ((key, embeddedValue) in value) { @@ -48,10 +50,23 @@ object CellXformer { } return getDelimitedList(list) } - is Asset -> AssetRefXformer.encode(ctx, value) - is AtlanEnum -> EnumXformer.encode(value) - is AtlanStruct -> StructXformer.encode(ctx.client, value) - is AtlanTag -> AtlanTagXformer.encode(ctx.client, guid!!, value) + + is Asset -> { + AssetRefXformer.encode(ctx, value) + } + + is AtlanEnum -> { + EnumXformer.encode(value) + } + + is AtlanStruct -> { + StructXformer.encode(ctx.client, value) + } + + is AtlanTag -> { + AtlanTagXformer.encode(ctx.client, guid!!, value) + } + is Long -> { if (dates) { TimestampXformer.encode(value) @@ -59,8 +74,14 @@ object CellXformer { value.toString() } } - is Any -> value.toString() - else -> "" + + is Any -> { + value.toString() + } + + else -> { + "" + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ConnectionXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ConnectionXformer.kt index 16076e4495..bf1c71e90a 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ConnectionXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ConnectionXformer.kt @@ -32,7 +32,10 @@ object ConnectionXformer { "" } } - else -> AssetRefXformer.encode(ctx, asset) + + else -> { + AssetRefXformer.encode(ctx, asset) + } } } @@ -66,6 +69,9 @@ object ConnectionXformer { ctx.connectionCache.getByIdentity(assetRef) ?: throw NoSuchElementException("Connection not found (in $fieldName): $assetRef") } - else -> AssetRefXformer.decode(ctx, assetRef, fieldName) + + else -> { + AssetRefXformer.decode(ctx, assetRef, fieldName) + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/DataDomainXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/DataDomainXformer.kt index 19435f73b6..8ea8871538 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/DataDomainXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/DataDomainXformer.kt @@ -37,7 +37,10 @@ object DataDomainXformer { "" } } - else -> AssetRefXformer.encode(ctx, asset) + + else -> { + AssetRefXformer.encode(ctx, asset) + } } /** @@ -77,6 +80,7 @@ object DataDomainXformer { val (ref, _) = getSemantic(assetRef) getDomainByIdentity(ctx, ref, fieldName) } + Asset.DOMAIN_GUIDS.atlanFieldName -> { val (ref, _) = getSemantic(assetRef) if (StringUtils.isUUID(ref)) { @@ -86,7 +90,10 @@ object DataDomainXformer { getDomainByIdentity(ctx, ref, fieldName) } } - else -> AssetRefXformer.decode(ctx, assetRef, fieldName) + + else -> { + AssetRefXformer.decode(ctx, assetRef, fieldName) + } } /** diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryCategoryXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryCategoryXformer.kt index 58e04b9d9f..4ce3ae21d2 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryCategoryXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryCategoryXformer.kt @@ -34,7 +34,10 @@ object GlossaryCategoryXformer { "" } } - else -> AssetRefXformer.encode(ctx, asset) + + else -> { + AssetRefXformer.encode(ctx, asset) + } } /** @@ -61,6 +64,7 @@ object GlossaryCategoryXformer { ?.build() ?: throw NoSuchElementException("Parent category not found (in $fieldName): $assetRef") } + GlossaryTerm.CATEGORIES.atlanFieldName -> { val (ref, semantic) = getSemantic(assetRef) ctx.categoryCache @@ -71,6 +75,9 @@ object GlossaryCategoryXformer { ?.build() ?: throw NoSuchElementException("Category relationship not found (in $fieldName): $assetRef") } - else -> AssetRefXformer.decode(ctx, assetRef, fieldName) + + else -> { + AssetRefXformer.decode(ctx, assetRef, fieldName) + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryTermXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryTermXformer.kt index 5d23209671..273837ddf4 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryTermXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryTermXformer.kt @@ -50,7 +50,10 @@ object GlossaryTermXformer { "" } } - else -> AssetRefXformer.encode(ctx, asset) + + else -> { + AssetRefXformer.encode(ctx, asset) + } } } @@ -79,6 +82,9 @@ object GlossaryTermXformer { ?.build() ?: throw NoSuchElementException("Term not found (in $fieldName): $assetRef") } - else -> AssetRefXformer.decode(ctx, assetRef, fieldName) + + else -> { + AssetRefXformer.decode(ctx, assetRef, fieldName) + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryXformer.kt index 63c11dbe2f..227d25b458 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GlossaryXformer.kt @@ -34,7 +34,10 @@ object GlossaryXformer { "" } } - else -> AssetRefXformer.encode(ctx, asset) + + else -> { + AssetRefXformer.encode(ctx, asset) + } } /** @@ -61,6 +64,9 @@ object GlossaryXformer { ?.build() ?: throw NoSuchElementException("Parent glossary not found (in $fieldName): $assetRef") } - else -> AssetRefXformer.decode(ctx, assetRef, fieldName) + + else -> { + AssetRefXformer.decode(ctx, assetRef, fieldName) + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GroupXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GroupXformer.kt index 3dec40eee5..513fc54169 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GroupXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/GroupXformer.kt @@ -55,7 +55,10 @@ object GroupXformer { } } } - else -> groupRef + + else -> { + groupRef + } } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ModelAssetXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ModelAssetXformer.kt index 54a1139bb2..a3152bef30 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ModelAssetXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/ModelAssetXformer.kt @@ -68,7 +68,10 @@ object ModelAssetXformer { val ma = asset as IModel "${ma.typeName}$TYPE_QN_DELIMITER${ma.modelVersionAgnosticQualifiedName}" } - else -> AssetRefXformer.encode(ctx, asset) + + else -> { + AssetRefXformer.encode(ctx, asset) + } } } @@ -98,6 +101,7 @@ object ModelAssetXformer { throw NoSuchElementException("Model asset not found (in $fieldName): $assetRef") } } + in MODEL_ASSET_REF_FIELDS -> { if (typeName.isNotBlank() && qualifiedName.isNotBlank()) { getModelRefByQN(ctx, typeName, qualifiedName) @@ -107,7 +111,10 @@ object ModelAssetXformer { throw NoSuchElementException("Model asset not found (in $fieldName): $assetRef") } } - else -> AssetRefXformer.decode(ctx, assetRef, fieldName) + + else -> { + AssetRefXformer.decode(ctx, assetRef, fieldName) + } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/RoleXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/RoleXformer.kt index 06be1665f8..06fa1ad180 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/RoleXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/RoleXformer.kt @@ -53,7 +53,10 @@ object RoleXformer { } } } - else -> roleRef + + else -> { + roleRef + } } } } diff --git a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/UserXformer.kt b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/UserXformer.kt index cc0495a7c0..a6cc124748 100644 --- a/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/UserXformer.kt +++ b/package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/serde/cell/UserXformer.kt @@ -57,7 +57,10 @@ object UserXformer { } } } - else -> userRef + + else -> { + userRef + } } } } diff --git a/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Policies.kt b/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Policies.kt index f3b4a9eb27..b58ec0b87c 100644 --- a/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Policies.kt +++ b/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Policies.kt @@ -111,7 +111,9 @@ class Policies( } ?: "" } - else -> "" + else -> { + "" + } } } } diff --git a/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Purposes.kt b/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Purposes.kt index 1beb0f8b6a..6db3ca06a7 100644 --- a/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Purposes.kt +++ b/samples/packages/admin-export/src/main/kotlin/com/atlan/pkg/ae/exports/Purposes.kt @@ -66,6 +66,7 @@ class Purposes( groups.addAll(policy.policyGroups) users.addAll(policy.policyUsers) } + "data" -> { dataPolicyCount += 1 groups.addAll(policy.policyGroups) diff --git a/samples/packages/admin-export/src/test/kotlin/ExportUsersTest.kt b/samples/packages/admin-export/src/test/kotlin/ExportUsersTest.kt index 90abea185e..02fb33d39b 100644 --- a/samples/packages/admin-export/src/test/kotlin/ExportUsersTest.kt +++ b/samples/packages/admin-export/src/test/kotlin/ExportUsersTest.kt @@ -61,7 +61,7 @@ class ExportUsersTest : PackageTest("u") { // assertFalse(row["Last name"].isNullOrBlank()) assertFalse(row["Email address"].isNullOrBlank()) assertTrue(row["Email address"]!!.contains('@')) - assertTrue((row["Groups"].isNullOrBlank() && row["Group names"].isNullOrBlank()) || row["Groups"]!!.isNotBlank() && row["Group names"]!!.isNotBlank()) + assertTrue((row["Groups"].isNullOrBlank() && row["Group names"].isNullOrBlank()) || (row["Groups"]!!.isNotBlank() && row["Group names"]!!.isNotBlank())) assertTrue(row["Groups"] != row["Group names"]) assertTrue(row["Groups"]!!.split("\n").size == row["Group names"]!!.split("\n").size) } diff --git a/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/AssetViews.kt b/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/AssetViews.kt index d8e6183638..9b032efcb1 100644 --- a/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/AssetViews.kt +++ b/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/AssetViews.kt @@ -34,6 +34,7 @@ class AssetViews( ) SearchLog.mostViewedAssets(ctx.client, ctx.config.viewsMax.toInt(), false).associateBy { it.guid } } + "BY_USERS" -> { writer.writeHeader( mapOf( @@ -47,7 +48,10 @@ class AssetViews( ) SearchLog.mostViewedAssets(ctx.client, ctx.config.viewsMax.toInt(), true).associateBy { it.guid } } - else -> mapOf() + + else -> { + mapOf() + } } // Then iterate through the unique assets diff --git a/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/DetailedUserChanges.kt b/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/DetailedUserChanges.kt index cdef08fe4b..afccb950e5 100644 --- a/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/DetailedUserChanges.kt +++ b/samples/packages/adoption-export/src/main/kotlin/com/atlan/pkg/adoption/exports/DetailedUserChanges.kt @@ -65,6 +65,7 @@ class DetailedUserChanges( AuditActionType.PROPAGATED_ATLAN_TAG_UPDATE, AuditActionType.PROPAGATED_ATLAN_TAG_DELETE, -> "background" + else -> it.headers?.get("x-atlan-agent") ?: "UI" } writer.writeRecord( diff --git a/samples/packages/api-token-connection-admin/src/main/kotlin/ApiTokenConnectionAdmin.kt b/samples/packages/api-token-connection-admin/src/main/kotlin/ApiTokenConnectionAdmin.kt index 75f487496a..5b79db4c09 100644 --- a/samples/packages/api-token-connection-admin/src/main/kotlin/ApiTokenConnectionAdmin.kt +++ b/samples/packages/api-token-connection-admin/src/main/kotlin/ApiTokenConnectionAdmin.kt @@ -110,10 +110,22 @@ object ApiTokenConnectionAdmin { .build() .save(client) when (val result = response?.getMutation(connection)) { - AssetMutationResponse.MutationType.UPDATED -> logger.info { " ... successfully updated the connection with API token as a new admin." } - AssetMutationResponse.MutationType.NOOP -> logger.info { " ... API token is already an admin on the connection - no changes made." } - AssetMutationResponse.MutationType.CREATED -> logger.error { " ... somehow created the connection - that should not have happened." } - AssetMutationResponse.MutationType.DELETED -> logger.error { " ... somehow deleted the connection - that should not have happened." } + AssetMutationResponse.MutationType.UPDATED -> { + logger.info { " ... successfully updated the connection with API token as a new admin." } + } + + AssetMutationResponse.MutationType.NOOP -> { + logger.info { " ... API token is already an admin on the connection - no changes made." } + } + + AssetMutationResponse.MutationType.CREATED -> { + logger.error { " ... somehow created the connection - that should not have happened." } + } + + AssetMutationResponse.MutationType.DELETED -> { + logger.error { " ... somehow deleted the connection - that should not have happened." } + } + else -> { logger.warn { "Unexpected connection change result: $result" } } diff --git a/samples/packages/asset-export-basic/src/main/kotlin/Exporter.kt b/samples/packages/asset-export-basic/src/main/kotlin/Exporter.kt index 6500d5547c..84752e9ca4 100644 --- a/samples/packages/asset-export-basic/src/main/kotlin/Exporter.kt +++ b/samples/packages/asset-export-basic/src/main/kotlin/Exporter.kt @@ -71,6 +71,7 @@ object Exporter { ) } } + "CLOUD" -> { for (exportFile in exportedFiles) { Utils.uploadOutputFile( diff --git a/samples/packages/asset-import/src/main/kotlin/com/atlan/pkg/aim/AtlanTagImporter.kt b/samples/packages/asset-import/src/main/kotlin/com/atlan/pkg/aim/AtlanTagImporter.kt index 7597611dcf..8d7c6b2a80 100644 --- a/samples/packages/asset-import/src/main/kotlin/com/atlan/pkg/aim/AtlanTagImporter.kt +++ b/samples/packages/asset-import/src/main/kotlin/com/atlan/pkg/aim/AtlanTagImporter.kt @@ -225,6 +225,7 @@ class AtlanTagImporter( tag.allowedValues, ) } + "databricks" -> { DatabricksUnityCatalogTag.creator( tag.name, @@ -234,6 +235,7 @@ class AtlanTagImporter( tag.allowedValues, ) } + "dbt" -> { DbtTag.creator( tag.name, @@ -245,9 +247,11 @@ class AtlanTagImporter( tag.allowedValues, ) } + "bigquery" -> { throw IllegalArgumentException("Creation and management of tags for BigQuery is not currently supported.") } + else -> { SourceTag.creator( tag.name, diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportGlossariesTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportGlossariesTest.kt index 33d0048aad..d6703d94d2 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportGlossariesTest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportGlossariesTest.kt @@ -232,16 +232,19 @@ class ImportGlossariesTest : PackageTest("ig") { assertTrue(category.ownerUsers.isNullOrEmpty()) assertTrue(category.ownerGroups.isNullOrEmpty()) } + "Cat2" -> { assertEquals("Test category 2 for asset import package.", category.userDescription) assertEquals(setOf("chris", chris), category.ownerUsers) assertTrue(category.ownerGroups.isNullOrEmpty()) } + "Cat1.a" -> { assertEquals("Test category 1.a for asset import package (unordered).", category.userDescription) assertEquals(setOf("chris"), category.ownerUsers) assertTrue(category.ownerGroups.isNullOrEmpty()) } + "Cat1.a.i" -> { assertEquals("Test category 1.a.i for asset import package (unordered).", category.userDescription) assertTrue(category.ownerUsers.isNullOrEmpty()) @@ -273,11 +276,13 @@ class ImportGlossariesTest : PackageTest("ig") { assertTrue(category.ownerUsers.isNullOrEmpty()) assertEquals(setOf("admins"), category.ownerGroups) } + "Cat4" -> { assertEquals("Test category 4 for asset import package.", category.userDescription) assertTrue(category.ownerUsers.isNullOrEmpty()) assertTrue(category.ownerGroups.isNullOrEmpty()) } + "Cat4.a" -> { assertEquals("Test category 4.a for asset import package (unordered).", category.userDescription) assertTrue(category.ownerUsers.isNullOrEmpty()) @@ -358,6 +363,7 @@ class ImportGlossariesTest : PackageTest("ig") { assertTrue(term.validValuesFor.isNullOrEmpty()) assertTrue(term.classifies.isNullOrEmpty()) } + "TermB" -> { assertEquals(1, term.categories.size) assertEquals(setOf("Cat3"), term.categories.map(IGlossaryCategory::getName).toSet()) @@ -384,6 +390,7 @@ class ImportGlossariesTest : PackageTest("ig") { assertEquals(1, term.classifies.size) assertEquals(setOf("Term3"), term.classifies.map(IGlossaryTerm::getName).toSet()) } + "TermD" -> { assertEquals(1, term.categories.size) assertEquals(setOf("Cat4"), term.categories.map(IGlossaryCategory::getName).toSet()) diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportSourceTagValuesTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportSourceTagValuesTest.kt index d1b256dd34..f6ee92141d 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportSourceTagValuesTest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/ImportSourceTagValuesTest.kt @@ -111,6 +111,7 @@ class ImportSourceTagValuesTest : PackageTest("istv") { assertTrue(attachments[0].sourceTagValues[0].tagAttachmentKey.isNullOrBlank()) assertEquals("Not Restricted", attachments[0].sourceTagValues[0].tagAttachmentValue) } + // "Hourly" -> { // assertEquals("hourly", attachments[0].sourceTagName) // assertEquals("$dbtQN/account/24670/project/211208/tag/hourly", attachments[0].sourceTagQualifiedName) diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InformaticaCDITest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InformaticaCDITest.kt index a7795d28d3..496ff0c6f3 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InformaticaCDITest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/InformaticaCDITest.kt @@ -128,6 +128,7 @@ class InformaticaCDITest : PackageTest("cdi") { "${connection.qualifiedName}/MultiMap" -> { assertEquals(4, v.size) } + "${connection.qualifiedName}/Complex" -> { assertEquals(1, v.size) } @@ -181,6 +182,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals("${connection.qualifiedName}/MultiMap_mapping", task.flowReusableUnitQualifiedName) assertEquals("MultiMap (mapping)", task.flowReusableUnitName) } + "Complex" -> { // 3 here when we may e2s and t2e to the task-level (otherwise 1) // When the task-level is a control flow op, this should just be the 1 resolved lineage process @@ -222,6 +224,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(12, mapping.flowDataFlows.size) assertEquals(8, mapping.flowDatasetCount) } + "Complex (mapping)" -> { // 2 here when we only map the inside lineage portions, otherwise 4 assertEquals(4, mapping.flowDataFlows.size) @@ -323,13 +326,17 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "TARGETTABLE", "CUSTOMER_RESULTANT_JOINER", "MOVIE_DETAILS", "Routersimple02", "Routersimple01" -> { builder .direction(AtlanLineageDirection.UPSTREAM) .stream() .toList() } - else -> emptyList() + + else -> { + emptyList() + } } val filtered = lineage.filter { it.connectionQualifiedName == connection.qualifiedName || it.connectionQualifiedName == iics.qualifiedName } validateLineage(filtered, 1) @@ -362,13 +369,17 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "Target", "Target1", "Target2", "Target3" -> { builder .direction(AtlanLineageDirection.UPSTREAM) .stream() .toList() } - else -> emptyList() + + else -> { + emptyList() + } } validateLineage(lineage, 2) } @@ -416,6 +427,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "Mapplet" -> { totalExpected = 2 builder @@ -423,6 +435,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "Target" -> { totalExpected = 3 builder @@ -430,6 +443,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + else -> { totalExpected = 0 emptyList() @@ -467,6 +481,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "Expression" -> { totalExpected = 2 builder @@ -474,6 +489,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "Aggregator" -> { totalExpected = 1 builder @@ -481,6 +497,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + "Output" -> { totalExpected = 3 builder @@ -488,6 +505,7 @@ class InformaticaCDITest : PackageTest("cdi") { .stream() .toList() } + else -> { totalExpected = 0 emptyList() @@ -580,6 +598,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals("MOVIE_ID = MOVIE_ID", id.flowExpression) assertEquals("SELECT * FROM LOGAN_DATA.INFORMATICA_CDI.MOVIE_DETAILS", id.flowQuery) } + "Target2" -> { assertEquals("TARGET", id.flowType) assertEquals("MultiMap (mapping)", id.flowReusableUnitName) @@ -587,6 +606,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(3, id.flowFieldCount) assertEquals(3, id.flowFields.size) } + "Source3" -> { assertEquals("SOURCE", id.flowType) assertEquals("MultiMap (mapping)", id.flowReusableUnitName) @@ -595,6 +615,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(3, id.flowFields.size) assertEquals("SELECT * FROM LOGAN_DATA.INFORMATICA_CDI.CUSTOMERS01", id.flowQuery) } + "Source" -> { assertEquals("SOURCE", id.flowType) when (id.flowReusableUnitName) { @@ -604,11 +625,13 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(4, id.flowFields.size) assertEquals("SELECT * FROM LOGAN_DATA.INFORMATICA_CDI.EMPLOYEES_SR1", id.flowQuery) } + "Complex (mapping)" -> { assertTrue(id.flowReusableUnitQualifiedName.endsWith("Complex_mapping")) } } } + "Target3" -> { assertEquals("TARGET", id.flowType) assertEquals("MultiMap (mapping)", id.flowReusableUnitName) @@ -616,6 +639,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(6, id.flowFieldCount) assertEquals(6, id.flowFields.size) } + "Target" -> { assertEquals("TARGET", id.flowType) when (id.flowReusableUnitName) { @@ -624,11 +648,13 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(4, id.flowFieldCount) assertEquals(4, id.flowFields.size) } + "Complex (mapping)" -> { assertTrue(id.flowReusableUnitQualifiedName.endsWith("Complex_mapping")) } } } + "Source1" -> { assertEquals("SOURCE", id.flowType) assertEquals("MultiMap (mapping)", id.flowReusableUnitName) @@ -637,6 +663,7 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(4, id.flowFields.size) assertEquals("SELECT * FROM LOGAN_DATA.INFORMATICA_CDI.EMPLOYEES_SR1", id.flowQuery) } + "Target1" -> { assertEquals("TARGET", id.flowType) assertEquals("MultiMap (mapping)", id.flowReusableUnitName) @@ -644,26 +671,31 @@ class InformaticaCDITest : PackageTest("cdi") { assertEquals(4, id.flowFieldCount) assertEquals(4, id.flowFields.size) } + "Mapplet" -> { assertEquals("MAPPLET", id.flowType) assertEquals("Complex (mapping)", id.flowReusableUnitName) assertTrue(id.flowReusableUnitQualifiedName.endsWith("Complex_mapping")) } + "Input" -> { assertEquals("INPUT", id.flowType) assertEquals("Mapplet", id.flowReusableUnitName) assertTrue(id.flowReusableUnitQualifiedName.endsWith("Mapplet")) } + "Expression" -> { assertEquals("EXPRESSION", id.flowType) assertEquals("Mapplet", id.flowReusableUnitName) assertTrue(id.flowReusableUnitQualifiedName.endsWith("Mapplet")) } + "Aggregator" -> { assertEquals("AGGREGATION", id.flowType) assertEquals("Mapplet", id.flowReusableUnitName) assertTrue(id.flowReusableUnitQualifiedName.endsWith("Mapplet")) } + "Output" -> { assertEquals("OUTPUT", id.flowType) assertEquals("Mapplet", id.flowReusableUnitName) @@ -712,12 +744,15 @@ class InformaticaCDITest : PackageTest("cdi") { "MOVIE_ID", "RELEASE_YEAR", "CUSTOMER_ID", "EMP_ID", "ORDER_ID", "AMOUNT" -> { assertEquals("decimal", field.flowDataType) } + "TITLE", "RATING", "STUDIO_NAME", "CHARACTER_NAME", "CUSTOMER_NAME", "COUNTRY", "EMP_NAME", "DEPARTMENT" -> { assertEquals("string", field.flowDataType) } + "SALARY" -> { assertTrue(field.flowDataType == "decimal" || field.flowDataType == "double") } + "ORDER_DATE" -> { assertEquals("date/time", field.flowDataType) } diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/MultiPassCyclicalRelationshipsTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/MultiPassCyclicalRelationshipsTest.kt index d06414e6b6..e583b9d61b 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/MultiPassCyclicalRelationshipsTest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/MultiPassCyclicalRelationshipsTest.kt @@ -205,6 +205,7 @@ class MultiPassCyclicalRelationshipsTest : PackageTest("mpcr") { assertTrue(entity.modelEntityMappedFromEntities.isNullOrEmpty()) assertEquals("P_E2", entity.modelEntityMappedToEntities.first().name) } + "P_E2" -> { assertTrue(entity.modelEntityMappedToEntities.isNullOrEmpty()) assertEquals(1, entity.modelEntityMappedFromEntities.size) diff --git a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/NestedColumnsTest.kt b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/NestedColumnsTest.kt index 9bda32f5ec..518c715ea9 100644 --- a/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/NestedColumnsTest.kt +++ b/samples/packages/asset-import/src/test/kotlin/com/atlan/pkg/aim/NestedColumnsTest.kt @@ -172,6 +172,7 @@ class NestedColumnsTest : PackageTest("nc") { assertEquals(1, col.order) assertEquals(2, col.nestedColumns.size) } + "child_1" -> { assertEquals("RECORD", col.dataType) assertEquals(2, col.order) @@ -181,6 +182,7 @@ class NestedColumnsTest : PackageTest("nc") { assertEquals("parent_column", col.parentColumn.name) assertEquals(1, col.columnHierarchy.size) } + "child_2" -> { assertEquals("VARCHAR", col.dataType) assertEquals(3, col.order) @@ -190,6 +192,7 @@ class NestedColumnsTest : PackageTest("nc") { assertEquals("parent_column", col.parentColumn.name) assertEquals(1, col.columnHierarchy.size) } + "child_2.1" -> { assertEquals("INT", col.dataType) assertEquals(4, col.order) diff --git a/samples/packages/cube-assets-builder/src/main/kotlin/com/atlan/pkg/cab/AssetImporter.kt b/samples/packages/cube-assets-builder/src/main/kotlin/com/atlan/pkg/cab/AssetImporter.kt index 38df6a546f..fc2218d655 100644 --- a/samples/packages/cube-assets-builder/src/main/kotlin/com/atlan/pkg/cab/AssetImporter.kt +++ b/samples/packages/cube-assets-builder/src/main/kotlin/com/atlan/pkg/cab/AssetImporter.kt @@ -122,24 +122,28 @@ abstract class AssetImporter( unique = ConnectionIdentity(connection, connector).toString() partial = "" } + Cube.TYPE_NAME -> { current = CSVXformer.trimWhitespace(row.getOrElse(header.indexOf(IMultiDimensionalDataset.CUBE_NAME.atlanFieldName)) { "" }) parent = getQualifiedNameDetails(row, header, Connection.TYPE_NAME) unique = Cube.generateQualifiedName(current, parent.uniqueQN) partial = current } + CubeDimension.TYPE_NAME -> { current = CSVXformer.trimWhitespace(row.getOrElse(header.indexOf(IMultiDimensionalDataset.CUBE_DIMENSION_NAME.atlanFieldName)) { "" }) parent = getQualifiedNameDetails(row, header, Cube.TYPE_NAME) unique = CubeDimension.generateQualifiedName(current, parent.uniqueQN) partial = CubeDimension.generateQualifiedName(current, parent.partialQN) } + CubeHierarchy.TYPE_NAME -> { current = CSVXformer.trimWhitespace(row.getOrElse(header.indexOf(IMultiDimensionalDataset.CUBE_HIERARCHY_NAME.atlanFieldName)) { "" }) parent = getQualifiedNameDetails(row, header, CubeDimension.TYPE_NAME) unique = CubeHierarchy.generateQualifiedName(current, parent.uniqueQN) partial = CubeHierarchy.generateQualifiedName(current, parent.partialQN) } + CubeField.TYPE_NAME -> { current = CSVXformer.trimWhitespace(row.getOrElse(header.indexOf(FieldImporter.FIELD_NAME)) { "" }) val parentField = CSVXformer.trimWhitespace(row.getOrElse(header.indexOf(FieldImporter.PARENT_FIELD_QN)) { "" }) @@ -165,7 +169,10 @@ abstract class AssetImporter( partial = CubeField.generateQualifiedName(current, parent.partialQN) } } - else -> throw IllegalStateException("Unknown multi-dimensional dataset type: $typeName") + + else -> { + throw IllegalStateException("Unknown multi-dimensional dataset type: $typeName") + } } return QualifiedNameDetails( unique, diff --git a/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpDeltaCABTest.kt b/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpDeltaCABTest.kt index e06f9339d9..080aa1fe50 100644 --- a/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpDeltaCABTest.kt +++ b/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpDeltaCABTest.kt @@ -326,6 +326,7 @@ class CreateThenUpDeltaCABTest : PackageTest("ctud") { assertTrue(tag.removePropagationsOnEntityDelete) assertFalse(tag.restrictPropagationThroughLineage) } + tag2 -> { assertFalse(tag.propagate) } @@ -394,6 +395,7 @@ class CreateThenUpDeltaCABTest : PackageTest("ctud") { assertEquals(1, field.cubeNestedFields.size) assertEquals(1, field.cubeSubFieldCount) } + "COL2" -> { assertEquals(displayCol2, field.displayName) assertNotNull(field.cubeParentField) @@ -404,6 +406,7 @@ class CreateThenUpDeltaCABTest : PackageTest("ctud") { assertEquals(1, field.cubeNestedFields.size) assertEquals(1, field.cubeSubFieldCount) } + "COL3" -> { assertEquals(displayCol3, field.displayName) assertNotNull(field.cubeParentField) @@ -505,6 +508,7 @@ class CreateThenUpDeltaCABTest : PackageTest("ctud") { assertEquals(1, field.cubeNestedFields.size) assertEquals(1, field.cubeSubFieldCount) } + "COL2" -> { assertEquals("Test field 5", field.displayName) assertNotNull(field.cubeParentField) diff --git a/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpsertCABTest.kt b/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpsertCABTest.kt index b15a12c849..8a6de6cd8a 100644 --- a/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpsertCABTest.kt +++ b/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/CreateThenUpsertCABTest.kt @@ -318,6 +318,7 @@ class CreateThenUpsertCABTest : PackageTest("ctu") { assertTrue(tag.removePropagationsOnEntityDelete) assertFalse(tag.restrictPropagationThroughLineage) } + tag2 -> { assertFalse(tag.propagate) } @@ -386,6 +387,7 @@ class CreateThenUpsertCABTest : PackageTest("ctu") { assertEquals(1, field.cubeNestedFields.size) assertEquals(1, field.cubeSubFieldCount) } + "COL2" -> { assertEquals(displayCol2, field.displayName) assertNotNull(field.cubeParentField) @@ -396,6 +398,7 @@ class CreateThenUpsertCABTest : PackageTest("ctu") { assertEquals(1, field.cubeNestedFields.size) assertEquals(1, field.cubeSubFieldCount) } + "COL3" -> { assertEquals(displayCol3, field.displayName) assertNotNull(field.cubeParentField) @@ -497,6 +500,7 @@ class CreateThenUpsertCABTest : PackageTest("ctu") { assertEquals(1, field.cubeNestedFields.size) assertEquals(1, field.cubeSubFieldCount) } + "COL2" -> { assertEquals("Test field 5", field.displayName) assertNotNull(field.cubeParentField) diff --git a/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/DeltaTest.kt b/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/DeltaTest.kt index 8b27f64524..5eca065db8 100644 --- a/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/DeltaTest.kt +++ b/samples/packages/cube-assets-builder/src/test/kotlin/com/atlan/pkg/cab/DeltaTest.kt @@ -103,7 +103,10 @@ class DeltaTest : PackageTest("cd") { fun specificAssetsToDelete() { delta!!.assetsToDelete.entrySet().forEach { when (it.key.typeName) { - CubeHierarchy.TYPE_NAME -> assertEquals("$conn1QN/TEST_CUBE/TEST_DIM/TEST_HIERARCHY2", it.key.qualifiedName) + CubeHierarchy.TYPE_NAME -> { + assertEquals("$conn1QN/TEST_CUBE/TEST_DIM/TEST_HIERARCHY2", it.key.qualifiedName) + } + CubeField.TYPE_NAME -> { assertTrue( "$conn1QN/TEST_CUBE/TEST_DIM/TEST_HIERARCHY2/COL4" == it.key.qualifiedName || diff --git a/samples/packages/custom-metadata-extender/src/main/kotlin/CustomMetadataExtender.kt b/samples/packages/custom-metadata-extender/src/main/kotlin/CustomMetadataExtender.kt index bd775aba81..47e4b85ecd 100644 --- a/samples/packages/custom-metadata-extender/src/main/kotlin/CustomMetadataExtender.kt +++ b/samples/packages/custom-metadata-extender/src/main/kotlin/CustomMetadataExtender.kt @@ -93,6 +93,7 @@ object CustomMetadataExtender { logger.info { "Extending custom metadata to all domains." } domainQNs.addAll(AttributeDefOptions.ALL_DOMAINS) } + "SOME" -> { try { val found = DataDomain.findByName(client, domainName) @@ -106,7 +107,10 @@ object CustomMetadataExtender { logger.error(e) { "Error attempting to lookup domain with name $domainName" } } } - else -> logger.info { "Not extending custom metadata to any additional domains." } + + else -> { + logger.info { "Not extending custom metadata to any additional domains." } + } } val cm = client.customMetadataCache.getByName(cmName) if (cm == null) { diff --git a/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/SUT.kt b/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/SUT.kt index 253af5dc21..fcb4b62436 100644 --- a/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/SUT.kt +++ b/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/SUT.kt @@ -69,10 +69,12 @@ class SUT( size = (sql.sizeBytes ?: 0) / BYTES_IN_GB rows = sql.rowCount ?: 0 } + is MaterializedView -> { size = (sql.sizeBytes ?: 0) / BYTES_IN_GB rows = sql.rowCount ?: 0 } + else -> { size = 0.0 rows = 0 diff --git a/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxQ.kt b/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxQ.kt index de3cb53620..39c39133ee 100644 --- a/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxQ.kt +++ b/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxQ.kt @@ -67,10 +67,12 @@ class TLAxQ( size = (sql.sizeBytes ?: 0) / BYTES_IN_GB rows = sql.rowCount ?: 0 } + is MaterializedView -> { size = (sql.sizeBytes ?: 0) / BYTES_IN_GB rows = sql.rowCount ?: 0 } + else -> { size = 0.0 rows = 0 diff --git a/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxU.kt b/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxU.kt index 6137cec61a..e7588c2b28 100644 --- a/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxU.kt +++ b/samples/packages/metadata-impact-report/src/main/kotlin/com/atlan/pkg/mdir/metrics/TLAxU.kt @@ -72,10 +72,12 @@ class TLAxU( size = (sql.sizeBytes ?: 0) / BYTES_IN_GB rows = sql.rowCount ?: 0 } + is MaterializedView -> { size = (sql.sizeBytes ?: 0) / BYTES_IN_GB rows = sql.rowCount ?: 0 } + else -> { size = 0.0 rows = 0 diff --git a/samples/packages/openapi-spec-loader/src/main/kotlin/OpenAPISpecLoader.kt b/samples/packages/openapi-spec-loader/src/main/kotlin/OpenAPISpecLoader.kt index 2420b87367..9b85b19c74 100644 --- a/samples/packages/openapi-spec-loader/src/main/kotlin/OpenAPISpecLoader.kt +++ b/samples/packages/openapi-spec-loader/src/main/kotlin/OpenAPISpecLoader.kt @@ -49,8 +49,11 @@ object OpenAPISpecLoader { val sourceFiles = when (ctx.config.importType) { - "DIRECT" -> listOf(Paths.get(outputDirectory, ctx.config.specFile).toString()) - "CLOUD" -> + "DIRECT" -> { + listOf(Paths.get(outputDirectory, ctx.config.specFile).toString()) + } + + "CLOUD" -> { when { ctx.config.specKey.isBlank() && ctx.config.specPrefix.isNotBlank() -> { Utils.getInputFiles( @@ -60,6 +63,7 @@ object OpenAPISpecLoader { ctx.config.specPrefix, ) } + else -> { listOf( Utils.getInputFile( @@ -72,7 +76,12 @@ object OpenAPISpecLoader { ) } } - "URL" -> listOf(ctx.config.specUrl) + } + + "URL" -> { + listOf(ctx.config.specUrl) + } + else -> { logger.error { "Unsupported import type: ${ctx.config.importType}" } exitProcess(5) @@ -102,11 +111,13 @@ object OpenAPISpecLoader { logger.info { "Loading OpenAPI specification from $sourceFile into: $connectionQN" } loadOpenAPISpec(ctx.client, connectionQN, OpenAPISpecReader(sourceFile), batchSize) } + "zip" -> { logger.info { "Extracting and processing ZIP file: $sourceFile" } val extractedFiles = Utils.unzipFiles(sourceFile, outputDirectory) processExtractedFiles(ctx, connectionQN, extractedFiles, batchSize) } + else -> { logger.error { "Invalid file type. Please provide a JSON, YAML or ZIP file." } exitProcess(1) diff --git a/samples/packages/relational-assets-builder/src/main/kotlin/com/atlan/pkg/rab/AssetXformer.kt b/samples/packages/relational-assets-builder/src/main/kotlin/com/atlan/pkg/rab/AssetXformer.kt index 38b8ed069b..993de20e4e 100644 --- a/samples/packages/relational-assets-builder/src/main/kotlin/com/atlan/pkg/rab/AssetXformer.kt +++ b/samples/packages/relational-assets-builder/src/main/kotlin/com/atlan/pkg/rab/AssetXformer.kt @@ -122,14 +122,17 @@ abstract class AssetXformer( current = ConnectionIdentity(connection, connector).toString() parent = null } + Database.TYPE_NAME -> { current = trimWhitespace(row.getOrElse(ISQL.DATABASE_NAME.atlanFieldName) { "" }) parent = getSQLHierarchyDetails(row, Connection.TYPE_NAME, entityQualifiedNameToType) } + Schema.TYPE_NAME -> { current = trimWhitespace(row.getOrElse(ISQL.SCHEMA_NAME.atlanFieldName) { "" }) parent = getSQLHierarchyDetails(row, Database.TYPE_NAME, entityQualifiedNameToType) } + "CONTAINER", Table.TYPE_NAME, View.TYPE_NAME, MaterializedView.TYPE_NAME -> { current = trimWhitespace(row.getOrElse(ENTITY_NAME) { "" }) parent = getSQLHierarchyDetails(row, Schema.TYPE_NAME, entityQualifiedNameToType) @@ -142,11 +145,15 @@ abstract class AssetXformer( } } } + Column.TYPE_NAME -> { current = trimWhitespace(row.getOrElse(ColumnXformer.COLUMN_NAME) { "" }) parent = getSQLHierarchyDetails(row, "CONTAINER", entityQualifiedNameToType) } - else -> throw IllegalStateException("Unknown SQL type: $typeName") + + else -> { + throw IllegalStateException("Unknown SQL type: $typeName") + } } val unique = parent?.let { @@ -169,24 +176,28 @@ abstract class AssetXformer( databaseName = parent?.name ?: "" databasePQN = parent?.partialQN ?: "" } + Table.TYPE_NAME -> { databaseName = parent?.databaseName ?: "" databasePQN = parent?.databasePQN ?: "" schemaName = parent?.name ?: "" schemaPQN = parent?.partialQN ?: "" } + View.TYPE_NAME -> { databaseName = parent?.databaseName ?: "" databasePQN = parent?.databasePQN ?: "" schemaName = parent?.name ?: "" schemaPQN = parent?.partialQN ?: "" } + MaterializedView.TYPE_NAME -> { databaseName = parent?.databaseName ?: "" databasePQN = parent?.databasePQN ?: "" schemaName = parent?.name ?: "" schemaPQN = parent?.partialQN ?: "" } + Column.TYPE_NAME -> { databaseName = parent?.databaseName ?: "" databasePQN = parent?.databasePQN ?: "" @@ -198,6 +209,7 @@ abstract class AssetXformer( tableName = parent?.name ?: "" tablePQN = parent?.partialQN ?: "" } + View.TYPE_NAME, MaterializedView.TYPE_NAME -> { viewName = parent?.name ?: "" viewPQN = parent?.partialQN ?: "" diff --git a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CaseInsensitiveConnectorTypeTest.kt b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CaseInsensitiveConnectorTypeTest.kt index 526d624b9e..3a8c4071aa 100644 --- a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CaseInsensitiveConnectorTypeTest.kt +++ b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CaseInsensitiveConnectorTypeTest.kt @@ -316,6 +316,7 @@ class CaseInsensitiveConnectorTypeTest : PackageTest("cict") { assertEquals(1, col.order) assertEquals(displayCol1, col.displayName) } + "COL2" -> { assertEquals("BIGINT", col.dataType) assertEquals(2, col.order) @@ -402,6 +403,7 @@ class CaseInsensitiveConnectorTypeTest : PackageTest("cict") { assertEquals(1, col.order) assertEquals("Test column 3", col.displayName) } + "COL4" -> { assertEquals("DECIMAL", col.dataType) assertEquals(2, col.order) diff --git a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaDropAllColumnsRABTest.kt b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaDropAllColumnsRABTest.kt index aa23dd076b..c20d265d05 100644 --- a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaDropAllColumnsRABTest.kt +++ b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaDropAllColumnsRABTest.kt @@ -349,6 +349,7 @@ class CreateThenUpDeltaDropAllColumnsRABTest : PackageTest("ctudac") { assertTrue(tag.removePropagationsOnEntityDelete) assertFalse(tag.restrictPropagationThroughLineage) } + tag2 -> { assertFalse(tag.propagate) } @@ -413,6 +414,7 @@ class CreateThenUpDeltaDropAllColumnsRABTest : PackageTest("ctudac") { assertEquals(255, col.maxLength) assertEquals("NVARCHAR(255)", col.rawDataTypeDefinition) } + "COL2" -> { assertEquals("BIGINT", col.dataType) assertEquals(2, col.order) diff --git a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaRABTest.kt b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaRABTest.kt index 877380c0f0..db2c4f3c02 100644 --- a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaRABTest.kt +++ b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpDeltaRABTest.kt @@ -348,6 +348,7 @@ class CreateThenUpDeltaRABTest : PackageTest("ctud") { assertTrue(tag.removePropagationsOnEntityDelete) assertFalse(tag.restrictPropagationThroughLineage) } + tag2 -> { assertFalse(tag.propagate) } @@ -413,6 +414,7 @@ class CreateThenUpDeltaRABTest : PackageTest("ctud") { assertEquals(255, col.maxLength) assertEquals("NVARCHAR(255)", col.rawDataTypeDefinition) } + "COL2" -> { assertEquals("BIGINT", col.dataType) assertEquals(2, col.order) diff --git a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpsertRABTest.kt b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpsertRABTest.kt index 3589eaf901..3fb78c7170 100644 --- a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpsertRABTest.kt +++ b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/CreateThenUpsertRABTest.kt @@ -337,6 +337,7 @@ class CreateThenUpsertRABTest : PackageTest("ctu") { assertTrue(tag.removePropagationsOnEntityDelete) assertFalse(tag.restrictPropagationThroughLineage) } + tag2 -> { assertFalse(tag.propagate) } @@ -396,6 +397,7 @@ class CreateThenUpsertRABTest : PackageTest("ctu") { assertEquals(255, col.maxLength) assertEquals("NVARCHAR(255)", col.rawDataTypeDefinition) } + "COL2" -> { assertEquals("BIGINT", col.dataType) assertEquals(2, col.order) diff --git a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/PartialAssetsTest.kt b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/PartialAssetsTest.kt index ff7834428a..c761e26494 100644 --- a/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/PartialAssetsTest.kt +++ b/samples/packages/relational-assets-builder/src/test/kotlin/com/atlan/pkg/rab/PartialAssetsTest.kt @@ -317,6 +317,7 @@ class PartialAssetsTest : PackageTest("pa") { assertEquals(1, col.order) assertEquals(displayCol1, col.displayName) } + "COL2" -> { assertEquals("BIGINT", col.dataType) assertEquals(2, col.order) @@ -403,6 +404,7 @@ class PartialAssetsTest : PackageTest("pa") { assertEquals(1, col.order) assertEquals("Test column 3", col.displayName) } + "COL4" -> { assertEquals("DECIMAL", col.dataType) assertEquals(2, col.order)