• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.onboarding.bedsteadonboarding.graph
2 
3 import com.android.onboarding.bedsteadonboarding.queryable.NodeQueryHelper
4 import com.android.onboarding.nodes.OnboardingGraphNode
5 import com.android.queryable.Queryable
6 
7 /**
8  * Builder for progressively building queries for [OnboardingGraph.Node].
9  */
10 class OnboardingGraphQueryBuilder(provider: OnboardingGraphProvider) : Queryable {
11 
12   private val provider: OnboardingGraphProvider = provider
13 
14   private val node = NodeQueryHelper<OnboardingGraphQueryBuilder>(this)
15 
16   /**
17    * Query for an [OnboardingGraph.Node].
18    */
whereNodenull19   fun whereNode(): NodeQueryHelper<OnboardingGraphQueryBuilder> = node
20 
21   /**
22    * Get the matching [OnboardingGraph.Node].
23    *
24    * returns null if there is no matching [OnboardingGraph.Node].
25    */
26   fun get(): OnboardingGraphNode? {
27     for (node in provider.graph.nodes.values) {
28       if (!matches(node)) {
29         continue
30       }
31 
32       return node
33     }
34 
35     return null
36   }
37 
matchesnull38   private fun matches(value: OnboardingGraphNode): Boolean {
39     return node.matches(value)
40   }
41 
describeQuerynull42   override fun describeQuery(fieldName: String?): String {
43     return Queryable.joinQueryStrings(
44       node.describeQuery(fieldName)
45     )
46   }
47 
isEmptyQuerynull48   override fun isEmptyQuery(): Boolean {
49     return Queryable.isEmptyQuery(node)
50   }
51 }
52