Skip to content

Commit 6548127

Browse files
authored
feat: add custom segment param for flight listings (#133)
1 parent 6075a82 commit 6548127

File tree

8 files changed

+178
-0
lines changed

8 files changed

+178
-0
lines changed

customizations/generator/openapi/src/main/kotlin/com/expediagroup/sdk/generators/openapi/OpenApiSdkGenerator.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class OpenApiSdkGenerator {
9999

100100
supportingFiles.add("${namespace.replaceFirstChar(Char::titlecase)}Client.kt")
101101
supportingFiles.add("Room.kt")
102+
supportingFiles.add("GetFlightListingsOperationSegmentParam.kt")
102103

103104
addGlobalProperty(CodegenConstants.SUPPORTING_FILES, supportingFiles.joinToString(","))
104105
// addGlobalProperty("debugSupportingFiles", "")
@@ -159,6 +160,14 @@ class OpenApiSdkGenerator {
159160
"Room.kt"
160161
)
161162
)
163+
164+
add(
165+
SupportingFile(
166+
"xap/get_flight_listings_operation_segment_param.mustache",
167+
"$packagePath/models/",
168+
"GetFlightListingsOperationSegmentParam.kt"
169+
)
170+
)
162171
}
163172
)
164173
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
rule:
2+
kind: 'function_declaration'
3+
regex: 'fun build'
4+
pattern: '$FUNC'
5+
inside:
6+
kind: 'class_body'
7+
inside:
8+
pattern: 'class Builder'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
rule:
2+
kind: "import_header"
3+
regex: "OperationParams"
4+
pattern: "$HEADER"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
utils:
2+
segment-builder:
3+
kind: 'function_declaration'
4+
regex: 'fun segment*'
5+
inside:
6+
kind: 'class_body'
7+
inside:
8+
pattern: 'class Builder'
9+
rule:
10+
any:
11+
- matches: segment-builder
12+
- kind: 'multiline_comment'
13+
precedes:
14+
matches: segment-builder
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
fun segment1(segment: GetFlightListingsOperationSegmentParam) = apply {
2+
this.segment1Origin = segment.origin
3+
this.segment1Destination = segment.destination
4+
this.segment1DepartureDate = segment.departureDate
5+
this.segment1DepartureStartTime = segment.departureStartTime
6+
this.segment1DepartureEndTime = segment.departureEndTime
7+
}
8+
9+
fun segment2(segment: GetFlightListingsOperationSegmentParam) = apply {
10+
this.segment2Origin = segment.origin
11+
this.segment2Destination = segment.destination
12+
this.segment2DepartureDate = segment.departureDate
13+
this.segment2DepartureStartTime = segment.departureStartTime
14+
this.segment2DepartureEndTime = segment.departureEndTime
15+
}
16+
17+
fun segment3(segment: GetFlightListingsOperationSegmentParam) = apply {
18+
this.segment3Origin = segment.origin
19+
this.segment3Destination = segment.destination
20+
this.segment3DepartureDate = segment.departureDate
21+
this.segment3DepartureStartTime = segment.departureStartTime
22+
this.segment3DepartureEndTime = segment.departureEndTime
23+
}
24+
25+
fun segment4(segment: GetFlightListingsOperationSegmentParam) = apply {
26+
this.segment4Origin = segment.origin
27+
this.segment4Destination = segment.destination
28+
this.segment4DepartureDate = segment.departureDate
29+
this.segment4DepartureStartTime = segment.departureStartTime
30+
this.segment4DepartureEndTime = segment.departureEndTime
31+
}
32+
33+
fun segment5(segment: GetFlightListingsOperationSegmentParam) = apply {
34+
this.segment5Origin = segment.origin
35+
this.segment5Destination = segment.destination
36+
this.segment5DepartureDate = segment.departureDate
37+
this.segment5DepartureStartTime = segment.departureStartTime
38+
this.segment5DepartureEndTime = segment.departureEndTime
39+
}
40+
41+
fun segment6(segment: GetFlightListingsOperationSegmentParam) = apply {
42+
this.segment6Origin = segment.origin
43+
this.segment6Destination = segment.destination
44+
this.segment6DepartureDate = segment.departureDate
45+
this.segment6DepartureStartTime = segment.departureStartTime
46+
this.segment6DepartureEndTime = segment.departureEndTime
47+
}

customizations/generator/openapi/src/main/resources/post-processor/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {VendorLocationDetailsProcessor} from './processors/vendor-location-detai
77
import {GetCarsListingsOperationParamsProcessor} from './processors/get-cars-listings-operation-params-processor';
88
import {ActivitiesCancellationPolicyProcessor} from './processors/activities-cancellation-policy-processor';
99
import {AvailableTimeSlotProcessor} from './processors/available-time-slot-processor';
10+
import {GetFlightListingsOperationParamsProcessor} from "./processors/get-flight-listings-operation-params-processor";
1011

1112
import * as path from 'path';
1213

@@ -42,4 +43,7 @@ switch (fileName) {
4243
case 'AvailableTimeSlot':
4344
new AvailableTimeSlotProcessor().process(filePath);
4445
break;
46+
case 'GetFlightListingsOperationParams':
47+
new GetFlightListingsOperationParamsProcessor().process(filePath);
48+
break;
4549
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import * as fs from 'node:fs';
2+
import {Edit, NapiConfig, SgNode} from '@ast-grep/napi';
3+
import {Processor} from './processor';
4+
import {RuleFunction} from './shared.types';
5+
6+
export class GetFlightListingsOperationParamsProcessor extends Processor {
7+
rules: RuleFunction[];
8+
id: String = 'get-flight-listings-operation-params';
9+
10+
constructor() {
11+
super();
12+
this.rules = [
13+
this.removeSegmentBuilderMethods,
14+
this.importSegment,
15+
this.addSegmentsBuilderMethods,
16+
].map(rule => rule.bind(this));
17+
}
18+
19+
removeSegmentBuilderMethods(root: SgNode): Edit[] {
20+
const config = this.readRule('remove-segments-builder-methods');
21+
22+
return root.findAll(config).map(node => {
23+
return node.replace('');
24+
});
25+
}
26+
27+
importSegment(root: SgNode): Edit[] {
28+
const config = this.readRule('import-segment');
29+
30+
return root.findAll(config).map(node => {
31+
const segment = 'import com.expediagroup.sdk.xap.models.GetFlightListingsOperationSegmentParam';
32+
const header = node.getMatch('HEADER')?.text();
33+
34+
return node.replace(`${segment}\n${header}`);
35+
});
36+
}
37+
38+
addSegmentsBuilderMethods(root: SgNode): Edit[] {
39+
const config = this.readRule('add-segments-builder-methods');
40+
41+
const source = fs.readFileSync(
42+
'./assets/templates/get-flight-listings-operation-params/segments.kt',
43+
'utf-8'
44+
);
45+
46+
return root.findAll(config).map(node => {
47+
const func = node.getMatch('FUNC')?.text();
48+
return node.replace(`${source}\n${func}`);
49+
});
50+
}
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.expediagroup.sdk.xap.models
2+
3+
data class GetFlightListingsOperationSegmentParam(
4+
val origin: String,
5+
val destination: String,
6+
val departureDate: java.time.LocalDate,
7+
val departureStartTime: String?,
8+
val departureEndTime: String?
9+
) {
10+
companion object {
11+
@JvmStatic
12+
fun builder() = Builder()
13+
}
14+
15+
class Builder(
16+
private var origin: String? = null,
17+
private var destination: String? = null,
18+
private var departureDate: java.time.LocalDate? = null,
19+
private var departureStartTime: String? = null,
20+
private var departureEndTime: String? = null
21+
) {
22+
fun origin(origin: String?) = apply { this.origin = origin }
23+
24+
fun destination(destination: String?) = apply { this.destination = destination }
25+
26+
fun departureDate(departureDate: java.time.LocalDate?) = apply { this.departureDate = departureDate }
27+
28+
fun departureStartTime(departureStartTime: String?) = apply { this.departureStartTime = departureStartTime }
29+
30+
fun departureEndTime(departureEndTime: String?) = apply { this.departureEndTime = departureEndTime }
31+
32+
fun build(): GetFlightListingsOperationSegmentParam =
33+
GetFlightListingsOperationSegmentParam(
34+
origin = this.origin!!,
35+
destination = this.destination!!,
36+
departureDate = this.departureDate!!,
37+
departureStartTime = this.departureStartTime,
38+
departureEndTime = this.departureEndTime
39+
)
40+
}
41+
}

0 commit comments

Comments
 (0)