Skip to content

Commit 79ac72b

Browse files
committed
Refactoring: reorg Maven modules for reusability #84
* refactoring extension loading
1 parent 76cb4eb commit 79ac72b

File tree

6 files changed

+55
-31
lines changed

6 files changed

+55
-31
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.dflib.jjava.distro;
2+
3+
import org.dflib.jjava.jupyter.Extension;
4+
import org.dflib.jjava.jupyter.kernel.BaseKernel;
5+
import org.dflib.jjava.jupyter.kernel.BaseNotebookStatics;
6+
import org.dflib.jjava.kernel.JavaNotebookStatics;
7+
8+
/**
9+
* An automatically-loaded extension that adds common imports to the notebook. This includes static method imports
10+
* from {@link BaseNotebookStatics} and {@link JavaNotebookStatics}.
11+
*/
12+
public class NotebookInitializer implements Extension {
13+
14+
private static final String BASE_STATICS_CLASS = BaseNotebookStatics.class.getName();
15+
private static final String JAVA_STATICS_CLASS = JavaNotebookStatics.class.getName();
16+
17+
private static final String STARTUP_SCRIPT = "import java.util.*;\n" +
18+
"import java.io.*;\n" +
19+
"import java.math.*;\n" +
20+
"import java.net.*;\n" +
21+
"import java.time.*;\n" +
22+
23+
"import java.util.concurrent.*;\n" +
24+
"import java.util.prefs.*;\n" +
25+
"import java.util.regex.*;\n" +
26+
27+
"import static " + BASE_STATICS_CLASS + ".*;\n" +
28+
"import static " + JAVA_STATICS_CLASS + ".*;";
29+
30+
@Override
31+
public void install(BaseKernel kernel) {
32+
kernel.eval(STARTUP_SCRIPT);
33+
}
34+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.dflib.jjava.distro.NotebookInitializer

jjava-jupyter/src/main/java/org/dflib/jjava/jupyter/kernel/NotebookStatics.java renamed to jjava-jupyter/src/main/java/org/dflib/jjava/jupyter/kernel/BaseNotebookStatics.java

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,26 @@
99
import java.util.UUID;
1010

1111
/**
12-
* A collection of methods exposed in every notebook via static imports. For the methods to work, an instance of
13-
* NotebookStatics must be loaded as a kernel extension, as this is when the kernel becomes known to the class.
12+
* An automatically-loaded extension that exposes a collection of static methods for notebook code to interact with the
13+
* kernel.
1414
*/
15-
public class NotebookStatics implements Extension {
16-
17-
private static final String STARTUP_SCRIPT = "import java.util.*;\n" +
18-
"import java.io.*;\n" +
19-
"import java.math.*;\n" +
20-
"import java.net.*;\n" +
21-
"import java.time.*;\n" +
22-
23-
"import java.util.concurrent.*;\n" +
24-
"import java.util.prefs.*;\n" +
25-
"import java.util.regex.*;\n" +
26-
27-
"import static org.dflib.jjava.jupyter.kernel.NotebookStatics.*;";
15+
public class BaseNotebookStatics implements Extension {
2816

2917
private static BaseKernel kernel;
3018

3119
@Override
3220
public void install(BaseKernel kernel) {
3321

34-
if (NotebookStatics.kernel != null) {
35-
throw new IllegalStateException("Already initialized with another kernel: " + NotebookStatics.kernel.getBanner());
22+
if (BaseNotebookStatics.kernel != null) {
23+
throw new IllegalStateException("Already initialized with another kernel: " + BaseNotebookStatics.kernel.getBanner());
3624
}
3725

38-
kernel.eval(STARTUP_SCRIPT);
39-
NotebookStatics.kernel = kernel;
26+
BaseNotebookStatics.kernel = kernel;
4027
}
4128

4229
private static BaseKernel nonNullKernel() {
4330
return Objects.requireNonNull(
44-
NotebookStatics.kernel,
31+
BaseNotebookStatics.kernel,
4532
"No kernel running. Likely called outside of the notebook lifecycle");
4633
}
4734

jjava-jupyter/src/main/java/org/dflib/jjava/jupyter/kernel/magic/MagicTranspiler.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.dflib.jjava.jupyter.kernel.magic;
22

3+
import org.dflib.jjava.jupyter.kernel.BaseNotebookStatics;
4+
35
import java.util.Base64;
46
import java.util.regex.Matcher;
57
import java.util.regex.Pattern;
@@ -12,9 +14,13 @@ public class MagicTranspiler {
1214

1315
private static final Pattern UNESCAPED_QUOTE = Pattern.compile("(?<!\\\\)\"");
1416

17+
// generated code templates
18+
private static final String CELL_CALL_TEMPLATE = BaseNotebookStatics.class.getName() + ".cellMagic(%s,java.util.List.of(%s),%s);{};";
19+
private static final String LINE_CALL_TEMPLATE = BaseNotebookStatics.class.getName() + ".lineMagic(%s,java.util.List.of(%s));{};";
20+
private static final String DECODE_TEMPLATE = "new String(java.util.Base64.getDecoder().decode(\"%s\"))";
21+
1522
public String transpileCell(ParsedCellMagic magic) {
16-
return String.format(
17-
"org.dflib.jjava.jupyter.kernel.NotebookStatics.cellMagic(%s,java.util.List.of(%s),%s);{};",
23+
return String.format(CELL_CALL_TEMPLATE,
1824
argWithEscapingToJava(magic.magicCall.name),
1925
magic.magicCall.args.stream()
2026
.map(this::argWithEscapingToJava)
@@ -35,8 +41,7 @@ public String transpileLine(ParsedLineMagic magic) {
3541
return magic.raw;
3642
}
3743

38-
return String.format(
39-
"org.dflib.jjava.jupyter.kernel.NotebookStatics.lineMagic(%s,java.util.List.of(%s));{};",
44+
return String.format(LINE_CALL_TEMPLATE,
4045
argWithEscapingToJava(magic.magicCall.name),
4146
magic.magicCall.args.stream()
4247
.map(this::argWithEscapingToJava)
@@ -47,6 +52,6 @@ public String transpileLine(ParsedLineMagic magic) {
4752
// Poor man's string escape
4853
private String argWithEscapingToJava(String arg) {
4954
String encoded = Base64.getEncoder().encodeToString(arg.getBytes());
50-
return String.format("new String(java.util.Base64.getDecoder().decode(\"%s\"))", encoded);
55+
return String.format(DECODE_TEMPLATE, encoded);
5156
}
5257
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
org.dflib.jjava.jupyter.kernel.NotebookStatics
1+
org.dflib.jjava.jupyter.kernel.BaseNotebookStatics

jjava-kernel/src/main/java/org/dflib/jjava/kernel/JavaNotebookStatics.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66
import java.util.Objects;
77

88
/**
9-
* A collection of methods exposed in every notebook via static imports. For the methods to work, an instance of
10-
* JavaNotebookStatics must be loaded as a kernel extension, as this is when the kernel becomes known to the class.
9+
* An automatically-loaded extension that exposes a collection of static methods for notebook code to interact with the
10+
* kernel.
1111
*/
1212
public class JavaNotebookStatics implements Extension {
1313

14-
private static final String STARTUP_SCRIPT = "import static org.dflib.jjava.kernel.JavaNotebookStatics.*;";
15-
1614
private static JavaKernel kernel;
1715

1816
@Override
@@ -23,7 +21,6 @@ public void install(BaseKernel kernel) {
2321
}
2422

2523
if (kernel instanceof JavaKernel) {
26-
kernel.eval(STARTUP_SCRIPT);
2724
JavaNotebookStatics.kernel = (JavaKernel) kernel;
2825
} else {
2926
// TODO: should we have some kind of abstract logger?

0 commit comments

Comments
 (0)