1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.tools.flicker.extractors
18 
19 import android.tools.io.Reader
20 import android.tools.traces.events.Cuj
21 import android.tools.traces.events.CujType
22 
23 class TaggedScenarioExtractorBuilder {
24     private var targetTag: CujType? = null
25     private var transitionMatcher: TransitionMatcher? = null
26     private var adjustCuj: CujAdjust =
27         object : CujAdjust {
adjustCujnull28             override fun adjustCuj(cujEntry: Cuj, reader: Reader): Cuj = cujEntry
29         }
30     private var additionalCujFilter: ((Cuj) -> Boolean)? = null
31     private var ignoreIfNoMatchingTransition: Boolean = false
32 
33     fun setTargetTag(value: CujType): TaggedScenarioExtractorBuilder = apply { targetTag = value }
34 
<lambda>null35     fun setTransitionMatcher(value: TransitionMatcher): TaggedScenarioExtractorBuilder = apply {
36         transitionMatcher = value
37     }
38 
<lambda>null39     fun setAdjustCuj(value: CujAdjust): TaggedScenarioExtractorBuilder = apply { adjustCuj = value }
40 
<lambda>null41     fun setAdditionalCujFilter(filter: (Cuj) -> Boolean) = apply { additionalCujFilter = filter }
42 
<lambda>null43     fun setIgnoreIfNoMatchingTransition(value: Boolean) = apply {
44         ignoreIfNoMatchingTransition = value
45     }
46 
buildnull47     fun build(): ScenarioExtractor {
48         val targetTag = targetTag ?: error("Missing targetTag")
49         return TaggedScenarioExtractor(
50             targetTag,
51             transitionMatcher,
52             adjustCuj,
53             additionalCujFilter,
54             ignoreIfNoMatchingTransition
55         )
56     }
57 }
58