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