All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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