Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
34ef04e
chore: rename files and directories for improved structure
OmarAlJarrah Apr 20, 2025
c673e98
chore: delete old code
OmarAlJarrah Apr 20, 2025
6397e09
Revert "chore: delete old code"
OmarAlJarrah Apr 20, 2025
3ad78e6
chore: delete old code
OmarAlJarrah Apr 20, 2025
23c0239
chore: delete old code
OmarAlJarrah Apr 20, 2025
a56a07e
Merge branch 'v2-dev' into v2/delete-old-code
OmarAlJarrah Apr 20, 2025
e80a2f3
chore: initialize project gradle structure and configuration files
OmarAlJarrah Apr 21, 2025
33c6156
chore: initial generator config
OmarAlJarrah Apr 21, 2025
2e8fb9c
Revert "chore: delete old code"
OmarAlJarrah Apr 21, 2025
93c6388
Revert "chore: delete old code"
OmarAlJarrah Apr 21, 2025
32004dd
chore: undelete code
OmarAlJarrah Apr 21, 2025
be222dc
Merge branch 'v2/delete-old-code' into v2/initial-gradle-setup
OmarAlJarrah Apr 21, 2025
0249634
Merge branch 'v2/initial-gradle-setup' into v2/generator-config
OmarAlJarrah Apr 21, 2025
dc2172b
chore: clean up build.gradle.kts and update mergeSpecs task
OmarAlJarrah Apr 21, 2025
3b1d370
Merge branch 'v2/initial-gradle-setup' into v2/generator-config
OmarAlJarrah Apr 21, 2025
5122213
chore: add imports for AllowedMediaTypesLambda and CodegenConstants
OmarAlJarrah Apr 22, 2025
8bb97ea
Merge branch 'v2-dev' into v2/initial-gradle-setup
OmarAlJarrah Apr 24, 2025
7b9d080
Merge branch 'v2/initial-gradle-setup' into v2/generator-config
OmarAlJarrah Apr 24, 2025
8aaca0d
chore: update path for specs.gradle.kts in build.gradle.kts
OmarAlJarrah Apr 24, 2025
10a8782
chore: update OpenAPI generator plugin version to 0.0.9-alpha
OmarAlJarrah Apr 24, 2025
73b0557
chore: refactor transformSpecs task to use Exec type and streamline c…
OmarAlJarrah Apr 24, 2025
c14ebda
chore: remove obsolete POM license properties from gradle.properties
OmarAlJarrah Apr 24, 2025
fbc53af
chore: add mavenCentral repository to plugin management
OmarAlJarrah Apr 24, 2025
245448f
Merge branch 'v2/initial-gradle-setup' into v2/generator-config
OmarAlJarrah Apr 24, 2025
217d02f
chore: update openApiGenerate task to use project.providers.exec for …
OmarAlJarrah Apr 24, 2025
c8b1dd3
chore: del spec files
OmarAlJarrah Apr 27, 2025
2fc4bf3
chore: update command line for spec transformer to include additional…
OmarAlJarrah Apr 27, 2025
bd97e01
chore: update inputSpec path in openApiGenerate configuration to use …
OmarAlJarrah Apr 27, 2025
702c50c
chore: add license plugin and header configuration to build.gradle.kts
OmarAlJarrah Apr 27, 2025
af8631f
chore: update license plugin ID in build.gradle.kts
OmarAlJarrah Apr 27, 2025
727f06c
Merge branch 'v2-dev' into v2/generator-config
OmarAlJarrah Apr 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions LICENSE-HEADER.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Copyright (C) 2025 Expedia, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.expediagroup.sdk.xap.generator.mustache

import com.samskivert.mustache.Mustache
import com.samskivert.mustache.Template
import java.io.Serializable
import java.io.Writer
import org.openapitools.codegen.CodegenResponse

class AllowedMediaTypesLambda : Mustache.Lambda, Serializable {
override fun execute(
fragment: Template.Fragment,
writer: Writer,
) {
val response: CodegenResponse = fragment.context() as CodegenResponse
if (response.is2xx) {
val mediaTypes: List<String> =
response.content.keys.filter {
!it.contains("xml", ignoreCase = true)
}

val context = mapOf("mediaTypes" to mediaTypes)
fragment.execute(context, writer)
}
}
}
62 changes: 62 additions & 0 deletions generator/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,71 @@
import com.expediagroup.sdk.xap.generator.mustache.AllowedMediaTypesLambda
import org.openapitools.codegen.CodegenConstants

plugins {
id("com.expediagroup.sdk.openapigenerator") version "0.0.9-alpha"
id("com.github.hierynomus.license-base") version "0.16.1"
}

group = project.property("GROUP_ID") as String

dependencies {
api("org.openapitools:openapi-generator:7.11.0")
}

openApiGenerate {
inputSpec = System.getProperty("inputSpec") ?: "$projectDir/src/main/resources/transformedSpecs.yaml"

packageName = "com.expediagroup.sdk.xap"
invokerPackage = "com.expediagroup.sdk.xap"
apiPackage = "com.expediagroup.sdk.xap.operations"
modelPackage = "com.expediagroup.sdk.xap.models"

dryRun = false
cleanupOutput = false
generateApiDocumentation = false
generateApiTests = false
generateModelTests = false
enablePostProcessFile = true

templateDir = "$projectDir/src/main/resources/templates"
configFile = "$projectDir/src/main/resources/generator-config.yaml"
outputDir = "$rootDir/xap-sdk/src/main/kotlin"

additionalProperties.put(CodegenConstants.ENUM_PROPERTY_NAMING, "UPPERCASE")
additionalProperties.put("allowedMediaTypes", AllowedMediaTypesLambda())

configOptions.put("sourceFolder", "")

globalProperties.put("supportingFiles", "Room.kt")
}

license {
header = rootProject.file("LICENSE-HEADER.txt")
skipExistingHeaders = true
strictCheck = true
includes(
listOf(
"$rootDir/xap-sdk/src/main/kotlin/**/*.kt"
)
)
}

tasks.named("openApiGenerate").configure {
doLast {
// Format code
project.providers.exec {
commandLine(
"../gradlew ktlintFormat".split(" "),
)
workingDir = File("$rootDir/xap-sdk").absoluteFile
}

// Add license headers
project.providers.exec {
commandLine(
"../gradlew licenseFormatMain".split(" "),
)
workingDir = File("$rootDir/xap-sdk").absoluteFile
}
}
}
8 changes: 8 additions & 0 deletions generator/src/main/resources/generator-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
files:
operation_params.mustache:
templateType: API
destinationFilename: Params.kt
room.mustache:
templateType: SupportingFiles
destinationFilename: Room.kt
folder: com/expediagroup/sdk/xap/models
8 changes: 8 additions & 0 deletions generator/src/main/resources/post-processor/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
insert_final_newline = true
1 change: 1 addition & 0 deletions generator/src/main/resources/post-processor/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build/
3 changes: 3 additions & 0 deletions generator/src/main/resources/post-processor/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "./node_modules/gts/"
}
3 changes: 3 additions & 0 deletions generator/src/main/resources/post-processor/.prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
...require('gts/.prettierrc.json')
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
rule:
kind: user_type
inside:
kind: parameter
regex: freeCancellationEndDateTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: freeCancellationEndDateTime
- kind: nullable_type
inside:
kind: class_parameter
regex: freeCancellationEndDateTime
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
rule:
kind: user_type
inside:
kind: parameter
regex: dateTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: dateTime
- kind: nullable_type
inside:
kind: class_parameter
regex: dateTime
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
rule:
kind: user_type
inside:
kind: parameter
regex: freeCancellationEndDateTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: freeCancellationEndDateTime
- kind: nullable_type
inside:
kind: class_parameter
regex: freeCancellationEndDateTime
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
inside:
any:
- kind: parameter
regex: pickupTime
- kind: parameter
regex: dropOffTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: pickupTime
- kind: class_parameter
regex: dropOffTime
- kind: nullable_type
inside:
any:
- kind: class_parameter
regex: pickupTime
- kind: class_parameter
regex: dropOffTime
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rule:
kind: "import_header"
regex: "OperationParams"
pattern: "$HEADER"
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
rule:
kind: value_argument
nthChild: 2
inside:
kind: call_suffix
stopBy: end
has:
any:
- kind: value_arguments
regex: pickupTime
- kind: value_arguments
regex: dropOffTime
inside:
kind: function_declaration
stopBy: end
regex: getQueryParams
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
rule:
kind: 'function_declaration'
regex: 'fun build'
pattern: '$FUNC'
inside:
kind: 'class_body'
inside:
pattern: 'class Builder'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rule:
kind: "import_header"
regex: "OperationParams"
pattern: "$HEADER"
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
utils:
room-builder:
kind: 'function_declaration'
regex: 'fun room*'
inside:
kind: 'class_body'
inside:
pattern: 'class Builder'
rule:
any:
- matches: room-builder
- kind: 'multiline_comment'
precedes:
matches: room-builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
rule:
kind: 'function_declaration'
regex: 'fun build'
pattern: '$FUNC'
inside:
kind: 'class_body'
inside:
pattern: 'class Builder'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rule:
kind: "import_header"
regex: "OperationParams"
pattern: "$HEADER"
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
utils:
room-builder:
kind: 'function_declaration'
regex: 'fun room*'
inside:
kind: 'class_body'
inside:
pattern: 'class Builder'
rule:
any:
- matches: room-builder
- kind: 'multiline_comment'
precedes:
matches: room-builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
inside:
any:
- kind: parameter
regex: startDateTime
- kind: parameter
regex: endDateTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: startDateTime
- kind: class_parameter
regex: endDateTime
- kind: nullable_type
inside:
any:
- kind: class_parameter
regex: startDateTime
- kind: class_parameter
regex: endDateTime
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
inside:
any:
- kind: parameter
regex: startDateTime
- kind: parameter
regex: endDateTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: startDateTime
- kind: class_parameter
regex: endDateTime
- kind: nullable_type
inside:
any:
- kind: class_parameter
regex: startDateTime
- kind: class_parameter
regex: endDateTime
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
rule:
kind: user_type
inside:
kind: parameter
regex: dateTime
stopBy:
kind: class_declaration
regex: Builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rule:
kind: user_type
pattern: $TYPE
inside:
any:
- kind: class_parameter
regex: dateTime
- kind: nullable_type
inside:
kind: class_parameter
regex: dateTime
Loading