@@ -45,6 +45,96 @@ internal class Integration(
45
45
46
46
val version = options[" v" ]
47
47
48
+ private fun KotlinKernelHost.execute (codeWithConverter : CodeWithConverter , argument : String ): VariableName ? {
49
+ val code = codeWithConverter.with (argument)
50
+ return if (code.isNotBlank()) {
51
+ val result = execute(code)
52
+ if (codeWithConverter.hasConverter) {
53
+ result.name
54
+ } else null
55
+ } else null
56
+ }
57
+
58
+ private fun KotlinKernelHost.execute (
59
+ codeWithConverter : CodeWithConverter ,
60
+ property : KProperty <* >,
61
+ type : String ,
62
+ ): VariableName ? {
63
+ val variableName = " (${property.name}${if (property.returnType.isMarkedNullable) " !!" else " " } as $type )"
64
+ return execute(codeWithConverter, variableName)
65
+ }
66
+
67
+ private fun KotlinKernelHost.updateImportDataSchemaVariable (
68
+ importDataSchema : ImportDataSchema ,
69
+ property : KProperty <* >,
70
+ ): VariableName ? {
71
+ val formats = supportedFormats.filterIsInstance<SupportedCodeGenerationFormat >()
72
+ val name = property.name + " DataSchema"
73
+ return when (
74
+ val codeGenResult = CodeGenerator .urlCodeGenReader(importDataSchema.url, name, formats, true )
75
+ ) {
76
+ is CodeGenerationReadResult .Success -> {
77
+ val readDfMethod = codeGenResult.getReadDfMethod(importDataSchema.url.toExternalForm())
78
+ val code = readDfMethod.additionalImports.joinToString(" \n " ) +
79
+ " \n " +
80
+ codeGenResult.code
81
+
82
+ execute(code)
83
+ execute(""" DISPLAY("Data schema successfully imported as ${property.name} : $name ")""" )
84
+
85
+ name
86
+ }
87
+
88
+ is CodeGenerationReadResult .Error -> {
89
+ execute(""" DISPLAY("Failed to read data schema from ${importDataSchema.url} : ${codeGenResult.reason} ")""" )
90
+ null
91
+ }
92
+ }
93
+ }
94
+
95
+ private fun KotlinKernelHost.updateAnyFrameVariable (
96
+ df : AnyFrame ,
97
+ property : KProperty <* >,
98
+ codeGen : ReplCodeGenerator ,
99
+ ): VariableName ? = execute(
100
+ codeWithConverter = codeGen.process(df, property),
101
+ property = property,
102
+ type = " AnyFrame" ,
103
+ )
104
+
105
+ private fun KotlinKernelHost.updateAnyRowVariable (
106
+ row : AnyRow ,
107
+ property : KProperty <* >,
108
+ codeGen : ReplCodeGenerator ,
109
+ ): VariableName ? = execute(
110
+ codeWithConverter = codeGen.process(row, property),
111
+ property = property,
112
+ type = " AnyRow" ,
113
+ )
114
+
115
+ private fun KotlinKernelHost.updateColumnGroupVariable (
116
+ col : ColumnGroup <* >,
117
+ property : KProperty <* >,
118
+ codeGen : ReplCodeGenerator ,
119
+ ): VariableName ? = execute(
120
+ codeWithConverter = codeGen.process(col.asDataFrame(), property),
121
+ property = property,
122
+ type = " ColumnGroup<*>" ,
123
+ )
124
+
125
+ private fun KotlinKernelHost.updateAnyColVariable (
126
+ col : AnyCol ,
127
+ property : KProperty <* >,
128
+ codeGen : ReplCodeGenerator ,
129
+ ): VariableName ? = if (col.isColumnGroup()) {
130
+ val codeWithConverter = codeGen.process(col.asColumnGroup().asDataFrame(), property).let { c ->
131
+ CodeWithConverter (c.declarations) { c.converter(" $it .asColumnGroup()" ) }
132
+ }
133
+ execute(codeWithConverter = codeWithConverter, property = property, type = " AnyCol" )
134
+ } else {
135
+ null
136
+ }
137
+
48
138
override fun Builder.onLoaded () {
49
139
if (version != null ) {
50
140
dependencies(
@@ -152,65 +242,17 @@ internal class Integration(
152
242
import(" org.jetbrains.kotlinx.dataframe.dataTypes.*" )
153
243
import(" org.jetbrains.kotlinx.dataframe.impl.codeGen.urlCodeGenReader" )
154
244
155
- fun KotlinKernelHost.execute (codeWithConverter : CodeWithConverter , argument : String ): VariableName ? {
156
- val code = codeWithConverter.with (argument)
157
- return if (code.isNotBlank()) {
158
- val result = execute(code)
159
- if (codeWithConverter.hasConverter) {
160
- result.name
161
- } else null
162
- } else null
163
- }
164
-
165
- fun KotlinKernelHost.execute (codeWithConverter : CodeWithConverter , property : KProperty <* >): VariableName ? {
166
- val variableName = property.name + if (property.returnType.isMarkedNullable) " !!" else " "
167
- return execute(codeWithConverter, variableName)
168
- }
169
-
170
- updateVariable<ImportDataSchema > { importDataSchema, property ->
171
- val formats = supportedFormats.filterIsInstance<SupportedCodeGenerationFormat >()
172
- val name = property.name + " DataSchema"
173
- when (val codeGenResult = CodeGenerator .urlCodeGenReader(importDataSchema.url, name, formats, true )) {
174
- is CodeGenerationReadResult .Success -> {
175
- val readDfMethod = codeGenResult.getReadDfMethod(importDataSchema.url.toExternalForm())
176
- val code = readDfMethod.additionalImports.joinToString(" \n " ) +
177
- " \n " +
178
- codeGenResult.code
179
-
180
- execute(code)
181
- execute(""" DISPLAY("Data schema successfully imported as ${property.name} : $name ")""" )
182
-
183
- name
184
- }
185
-
186
- is CodeGenerationReadResult .Error -> {
187
- execute(""" DISPLAY("Failed to read data schema from ${importDataSchema.url} : ${codeGenResult.reason} ")""" )
188
- null
189
- }
245
+ updateVariable<Any > { instance, property ->
246
+ when (instance) {
247
+ is AnyCol -> updateAnyColVariable(instance, property, codeGen)
248
+ is ColumnGroup <* > -> updateColumnGroupVariable(instance, property, codeGen)
249
+ is AnyRow -> updateAnyRowVariable(instance, property, codeGen)
250
+ is AnyFrame -> updateAnyFrameVariable(instance, property, codeGen)
251
+ is ImportDataSchema -> updateImportDataSchemaVariable(instance, property)
252
+ else -> null
190
253
}
191
254
}
192
255
193
- updateVariable<AnyFrame > { df, property ->
194
- execute(codeGen.process(df, property), property)
195
- }
196
-
197
- updateVariable<AnyRow > { row, property ->
198
- execute(codeGen.process(row, property), property)
199
- }
200
-
201
- updateVariable<ColumnGroup <* >> { col, property ->
202
- execute(codeGen.process(col.asDataFrame(), property), property)
203
- }
204
-
205
- updateVariable<AnyCol > { col, property ->
206
- if (col.isColumnGroup()) {
207
- val codeWithConverter = codeGen.process(col.asColumnGroup().asDataFrame(), property).let { c ->
208
- CodeWithConverter (c.declarations) { c.converter(" $it .asColumnGroup()" ) }
209
- }
210
- execute(codeWithConverter, property)
211
- } else null
212
- }
213
-
214
256
fun KotlinKernelHost.addDataSchemas (classes : List <KClass <* >>) {
215
257
val code = classes.joinToString(" \n " ) {
216
258
codeGen.process(it)
0 commit comments