blob: ff708023f75b1691385008985bffff1d6f113b67 [file] [log] [blame]
/*
* Copyright 2023 The Android Open Source Project
*
* 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.
*/
package androidx.appactions.builtintypes.types
import androidx.appactions.builtintypes.properties.Name
import androidx.appactions.builtintypes.properties.ItemListElement
interface ItemList : Thing {
val itemListElements: List<ItemListElement>
override fun toBuilder(): Builder<*>
companion object {
@JvmStatic
fun Builder(): Builder<*> = ItemListBuilderImpl()
}
interface Builder<Self : Builder<Self>> : Thing.Builder<Self> {
fun addItemListElements(itemListElements: List<ItemListElement>): Self
fun addItemListElement(itemListElement: ItemListElement): Self
fun addItemListElement(listItem: ListItem): Self
override fun build(): ItemList
}
}
private class ItemListBuilderImpl : ItemList.Builder<ItemListBuilderImpl> {
private var identifier: String? = null
private var name: Name? = null
private var itemListElements = mutableListOf<ItemListElement>()
override fun build() = ItemListImpl(identifier, name, itemListElements.toList())
override fun addItemListElements(itemListElements: List<ItemListElement>): ItemListBuilderImpl =
apply {
this.itemListElements.addAll(itemListElements)
}
override fun addItemListElement(itemListElement: ItemListElement): ItemListBuilderImpl = apply {
itemListElements.add(itemListElement)
}
override fun addItemListElement(listItem: ListItem): ItemListBuilderImpl = apply {
itemListElements.add(ItemListElement(listItem))
}
override fun setIdentifier(text: String?): ItemListBuilderImpl = apply {
identifier = text
}
override fun setName(text: String): ItemListBuilderImpl = apply {
name = Name(text)
}
override fun setName(name: Name?): ItemListBuilderImpl = apply {
this.name = name
}
override fun clearName(): ItemListBuilderImpl = apply { name = null }
}
private class ItemListImpl(
override val identifier: String?,
override val name: Name?,
override val itemListElements: List<ItemListElement>
) : ItemList {
override fun toBuilder(): ItemList.Builder<*> =
ItemListBuilderImpl()
.setIdentifier(identifier)
.setName(name)
.addItemListElements(itemListElements)
}