
org.jetbrains.kotlinx.dataframe.impl.columns.ColumnGroupWithParent.kt Maven / Gradle / Ivy
package org.jetbrains.kotlinx.dataframe.impl.columns
import org.jetbrains.kotlinx.dataframe.AnyCol
import org.jetbrains.kotlinx.dataframe.ColumnGroupReference
import org.jetbrains.kotlinx.dataframe.ColumnSelector
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
import org.jetbrains.kotlinx.dataframe.DataColumn
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.DataRow
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
import org.jetbrains.kotlinx.dataframe.api.cast
import org.jetbrains.kotlinx.dataframe.api.castFrameColumn
import org.jetbrains.kotlinx.dataframe.api.getColumn
import org.jetbrains.kotlinx.dataframe.api.getColumnWithPath
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
import org.jetbrains.kotlinx.dataframe.impl.columnName
import kotlin.reflect.KProperty
internal class ColumnGroupWithParent(override val parent: ColumnGroupReference?, override val source: ColumnGroup) : ColumnGroupImpl(source.name(), source), ColumnWithParent> {
override fun path() = super.path()
override fun getValue(thisRef: Any?, property: KProperty<*>): DataColumnGroup = source.getValue(thisRef, property) as DataColumnGroup
override fun equals(other: Any?) = source.checkEquals(other)
override fun hashCode() = source.hashCode()
override fun resolveSingle(context: ColumnResolutionContext) = super.resolveSingle(context)
override fun resolve(context: ColumnResolutionContext) = super.resolve(context)
// region get column
override fun columns() = super.columns().map { it.addParent(this) }
override fun getColumnOrNull(index: Int) = super.getColumnOrNull(index)?.addParent(this)
override fun getColumnOrNull(name: String) = super.getColumnOrNull(name)?.addParent(this)
override fun getColumnOrNull(column: ColumnReference) = super.getColumnOrNull(column)?.addParent(this)
override fun getColumnOrNull(path: ColumnPath) = path.fold(this as AnyCol?) { col, name -> col?.asColumnGroup()?.getColumnOrNull(name) }
override fun getColumnOrNull(column: ColumnSelector) = getColumnOrNull(getColumnWithPath(column).path)?.cast()
override operator fun get(columnName: String): AnyCol = getColumn(columnName)
override operator fun get(columnPath: ColumnPath): AnyCol = getColumn(columnPath)
override operator fun get(column: KProperty): DataColumn = get(column.columnName).cast()
override operator fun get(column: KProperty>): ColumnGroup = get(column.columnName).asColumnGroup().cast()
override operator fun get(column: KProperty>): FrameColumn = get(column.columnName).asAnyFrameColumn().castFrameColumn()
override operator fun get(columns: ColumnsSelector): List> = super.get(columns).map { it.addParent(this) }
override operator fun get(column: ColumnSelector): DataColumn = get(column as ColumnsSelector).single()
// endregion
override fun get(firstIndex: Int, vararg otherIndices: Int) = ColumnGroupWithParent(parent, super.get(firstIndex, *otherIndices))
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy