* lisp/ob-java.el: (org-babel-execute:java): Inject a private static class inside the Java class designated by `:classname'. (org-babel-variable-assignments:java): Assign the header variables to static fields in a private static class `Data'. (org-babel-java-var-to-java): Translate string to String, list to java.util.List, float to double and others to int. --- lisp/ob-java.el | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/lisp/ob-java.el b/lisp/ob-java.el index 8c64171..a2a1f40 100644 --- a/lisp/ob-java.el +++ b/lisp/ob-java.el @@ -58,7 +58,13 @@ parameters may be used, like javac -verbose" (src-file (concat classname ".java")) (cmpflag (or (cdr (assoc :cmpflag params)) "")) (cmdline (or (cdr (assoc :cmdline params)) "")) - (full-body (org-babel-expand-body:generic body params)) + (split-body + (split-string body (concat classname "[\n\t ]*{"))) + (full-body + (org-babel-expand-body:generic + (concat (car split-body) (concat classname " {\n") (org-babel-variable-assignments:java params) + (mapconcat 'identity (cdr split-body) (concat classname " {"))) + params)) (compile (progn (with-temp-file src-file (insert full-body)) (org-babel-eval @@ -80,6 +86,37 @@ parameters may be used, like javac -verbose" (org-babel-pick-name (cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))))))) +(defun org-babel-variable-assignments:java (params) + "Return an internal Java class assigning the block's variables." + (concat " private static class Data {\n" + (mapconcat 'identity + (mapcar + (lambda (pair) + (format " public static %s %s = %s;" + (cond + ((stringp (cdr pair)) "String") + ((listp (cdr pair)) "java.util.List") + ((floatp (cdr pair)) "double") + (t "int")) + (car pair) + (org-babel-java-var-to-java (cdr pair)))) + (mapcar #'cdr (org-babel-get-header params :var))) + "\n") + "\n }") + ) + +(defun org-babel-java-var-to-java (var) + "Convert an elisp value to a java string. +Convert an elisp value, VAR, into a string of Java source code +specifying a variable of the same value." + (if (listp var) + (concat "java.util.Arrays.asList(" (mapconcat #'org-babel-java-var-to-java var ", ") ")") + (if (equal var 'hline) + "null" + (format + (if (and (stringp var) (string-match "[\n\r]" var)) "\"\"%S\"\"" "%S") + var)))) + (provide 'ob-java) -- 1.9.1