From a10814aaa2f8209a9f28cf5ee82c29ca222c58d8 Mon Sep 17 00:00:00 2001 From: pborissow Date: Sat, 20 May 2023 12:53:18 -0400 Subject: [PATCH 1/5] Add support for OpenJDK version of Nashorn --- src/javaxt/orm/Parser.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/javaxt/orm/Parser.java b/src/javaxt/orm/Parser.java index 64865d0..991d370 100644 --- a/src/javaxt/orm/Parser.java +++ b/src/javaxt/orm/Parser.java @@ -1,8 +1,14 @@ package javaxt.orm; -import javax.script.*; -import jdk.nashorn.api.scripting.ScriptObjectMirror; + +import java.util.*; import javaxt.json.*; -import java.util.HashMap; + +//Scripting includes +import javax.script.*; +import org.openjdk.nashorn.api.scripting.ScriptObjectMirror; +import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory; +import org.openjdk.nashorn.api.scripting.NashornScriptEngine; + //****************************************************************************** //** Parser Class @@ -67,13 +73,13 @@ public Model[] getModels(){ private void init(JSONObject json){ String packageName = json.get("package").toString(); JSONObject models = json.get("models").toJSONObject(); - HashMap options = new HashMap(); + HashMap options = new HashMap<>(); for (String key : optionalVars){ String val = json.get(key).toString(); if (val!=null) options.put(key, val); } - java.util.ArrayList arr = new java.util.ArrayList(); + ArrayList arr = new ArrayList<>(); for (String modelName : models.keySet()){ Model model = new Model(modelName, models.get(modelName).toJSONObject(), packageName, options); arr.add(model); @@ -94,8 +100,9 @@ private JSONObject parseJavaScript(String js) throws Exception { //Instantiate ScriptEngine - ScriptEngineManager factory = new ScriptEngineManager(); - ScriptEngine engine = factory.getEngineByName("nashorn"); + String[] options = new String[] { "--language=es6" }; + NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); + NashornScriptEngine engine = (NashornScriptEngine) factory.getScriptEngine(options); //Extract variables From a9d4c9000917d8cd20a87a9a863aa4c1cc48394a Mon Sep 17 00:00:00 2001 From: pborissow Date: Sat, 20 May 2023 12:54:12 -0400 Subject: [PATCH 2/5] Updated pom.xml with new Nashorn dependency --- pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 12f4f58..94cf71a 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,12 @@ javaxt javaxt-core - 1.12.1 + 1.12.3 + + + org.openjdk.nashorn + nashorn-core + 15.4 From 911becf2fe02807c36c7074555f3b12a94a4a473 Mon Sep 17 00:00:00 2001 From: pborissow Date: Sat, 20 May 2023 12:57:21 -0400 Subject: [PATCH 3/5] Added support for new "implements" keyword. Also updated logic for returning passwords and cleaned up database code. --- src/javaxt/orm/Class.txt | 2 +- src/javaxt/orm/Model.java | 162 ++++++++++++++++++++++++-------------- 2 files changed, 106 insertions(+), 58 deletions(-) diff --git a/src/javaxt/orm/Class.txt b/src/javaxt/orm/Class.txt index 25063cb..c78c060 100644 --- a/src/javaxt/orm/Class.txt +++ b/src/javaxt/orm/Class.txt @@ -11,7 +11,7 @@ ${includes} * ******************************************************************************/ -public class ${modelName} extends javaxt.sql.Model { +public class ${modelName} extends javaxt.sql.Model ${implements}{ ${privateFields} diff --git a/src/javaxt/orm/Model.java b/src/javaxt/orm/Model.java index d1301c6..2461a13 100644 --- a/src/javaxt/orm/Model.java +++ b/src/javaxt/orm/Model.java @@ -1,6 +1,7 @@ package javaxt.orm; import javaxt.json.*; -import java.util.HashMap; +import java.util.*; +import java.util.stream.Collectors; //****************************************************************************** //** Model Class @@ -13,7 +14,8 @@ public class Model { private String name; - private java.util.ArrayList fields; + private HashSet implementations; + private ArrayList fields; private static final String template = getTemplate(); private String tableName; private String escapedTableName; @@ -30,7 +32,8 @@ public class Model { */ protected Model(String modelName, JSONObject modelInfo, String packageName, HashMap options){ this.name = modelName; - this.fields = new java.util.ArrayList(); + this.implementations = new HashSet<>(); + this.fields = new ArrayList<>(); this.options = options; this.packageName = packageName; this.tableName = Utils.camelCaseToUnderScore(name).toLowerCase(); @@ -47,6 +50,15 @@ protected Model(String modelName, JSONObject modelInfo, String packageName, Hash } + //Get implementation classes + JSONArray implementations = modelInfo.get("implements").toJSONArray(); + if (implementations!=null){ + for (JSONValue i : implementations){ + this.implementations.add(i.toString()); + } + } + + //Parse fields JSONArray arr = modelInfo.get("fields").toJSONArray(); if (arr!=null) @@ -180,6 +192,9 @@ public String getJavaCode(){ String str = template.replace("${modelName}", name); str = str.replace("${package}", packageName); str = str.replace("${tableName}", schemaName==null ? tableName : (schemaName + "." + tableName)); + str = str.replace("${implements}", implementations.isEmpty() ? "" : "\r\n implements " + + implementations.stream().map(Object::toString).collect(Collectors.joining(", ")) + " "); + StringBuilder fieldMap = new StringBuilder("\r\n"); StringBuilder privateFields = new StringBuilder(); @@ -192,7 +207,7 @@ public String getJavaCode(){ StringBuilder hasMany = new StringBuilder(); StringBuilder initArrays = new StringBuilder(); String getLastModified = ""; - java.util.TreeSet includes = new java.util.TreeSet(); + java.util.TreeSet includes = new java.util.TreeSet<>(); for (int i=0; i " + idArray + " = new ArrayList();\r\n"); - hasMany.append(" for (javaxt.sql.Recordset row : conn.getRecordset(\r\n"); + hasMany.append(" for (javaxt.sql.Record record : conn.getRecords(\r\n"); hasMany.append(" \"select " + rightColumn + " from " + tableName + " where " + leftColumn + "=\"+id)){\r\n"); - hasMany.append(" " + idArray + ".add(row.getValue(0).toLong());\r\n"); + hasMany.append(" " + fieldName + ".add(new " + modelName + "(record.get(0).toLong()));\r\n"); hasMany.append(" }\r\n"); - hasMany.append(" for (long " + id + " : " + idArray + "){\r\n"); - hasMany.append(" " + fieldName + ".add(new " + modelName + "(" + id + "));\r\n"); - hasMany.append(" }\r\n\r\n"); initArrays.append(" " + fieldName + " = new " + fieldType + "();\r\n"); @@ -438,24 +495,25 @@ else if (fieldType.equals("Geometry")){ //Update save models (see save method) saveModels.append("\r\n"); saveModels.append(" //Save " + fieldName + "\r\n"); - saveModels.append(" ArrayList " + idArray + " = new ArrayList();\r\n"); - saveModels.append(" for (" + modelName + " obj : " + fieldName + "){\r\n"); + saveModels.append(" ArrayList " + idArray + " = new ArrayList<>();\r\n"); + saveModels.append(" for (" + modelName + " obj : this." + fieldName + "){\r\n"); saveModels.append(" obj.save();\r\n"); saveModels.append(" " + idArray + ".add(obj.getID());\r\n"); saveModels.append(" }\r\n"); - saveModels.append("\r\n"); - saveModels.append(" conn.execute(\"delete from " + tableName + " where " + leftColumn + "=\" + id);\r\n"); - saveModels.append(" rs.open(\"select * from " + tableName + " where " + leftColumn + "=\" + id, conn, false);\r\n"); - saveModels.append(" for (long " + id + " : " + idArray + "){\r\n"); - saveModels.append(" rs.addNew();\r\n"); - saveModels.append(" rs.setValue(\"" + leftColumn + "\", id);\r\n"); - saveModels.append(" rs.setValue(\"" + rightColumn + "\", " + id + ");\r\n"); - saveModels.append(" rs.update();\r\n"); + saveModels.append("\r\n\r\n"); + saveModels.append(" //Link " + fieldName + " to this " + this.name + "\r\n"); + saveModels.append(" target = \"" + tableName + " where " + leftColumn + "=\" + this.id;\r\n"); + saveModels.append(" conn.execute(\"delete from \" + target);\r\n"); + saveModels.append(" try (javaxt.sql.Recordset rs = conn.getRecordset(\"select * from \" + target, false)){\r\n"); + saveModels.append(" for (long " + id + " : " + idArray + "){\r\n"); + saveModels.append(" rs.addNew();\r\n"); + saveModels.append(" rs.setValue(\"" + leftColumn + "\", this.id);\r\n"); + saveModels.append(" rs.setValue(\"" + rightColumn + "\", " + id + ");\r\n"); + saveModels.append(" rs.update();\r\n"); + saveModels.append(" }\r\n"); saveModels.append(" }\r\n"); - saveModels.append(" rs.close();\r\n"); - saveModels.append("\r\n"); } @@ -574,15 +632,8 @@ else if (fieldType.equals("byte[]")){ //Update the database constructor with hasMany variables if (hasMany.length()>0){ getValues.append("\r\n\r\n"); - getValues.append(" javaxt.sql.Connection conn = null;\r\n"); - getValues.append(" try{\r\n"); - getValues.append(" conn = getConnection(this.getClass());\r\n"); + getValues.append(" try (javaxt.sql.Connection conn = getConnection(this.getClass())) {\r\n"); getValues.append(hasMany); - getValues.append(" conn.close();\r\n"); - getValues.append(" }\r\n"); - getValues.append(" catch(SQLException e){\r\n"); - getValues.append(" if (conn!=null) conn.close();\r\n"); - getValues.append(" throw e;\r\n"); getValues.append(" }\r\n"); } @@ -625,18 +676,15 @@ else if (fieldType.equals("byte[]")){ " //**************************************************************************\r\n" + " /** Used to save a " + name + " in the database.\r\n" + " */\r\n" + - " public void save() throws SQLException {\r\n" + - " super.save();\r\n" + - " javaxt.sql.Connection conn = null;\r\n" + - " try{\r\n" + - " conn = getConnection(this.getClass());\r\n" + - " javaxt.sql.Recordset rs = new javaxt.sql.Recordset();\r\n" + - " " + saveModels + "\r\n" + - " conn.close();\r\n" + - " }\r\n" + - " catch(SQLException e){\r\n" + - " if (conn!=null) conn.close();\r\n" + - " throw e;\r\n" + + " public void save() throws SQLException {\r\n\r\n" + + + " //Update record in the " + this.tableName + " table\r\n" + + " super.save();\r\n\r\n\r\n" + + + " //Save models\r\n" + + " try (javaxt.sql.Connection conn = getConnection(this.getClass())) {\r\n" + + " String target;\r\n" + + " " + saveModels + " }\r\n" + " }\r\n"; @@ -711,7 +759,7 @@ public String getTableSQL(){ //Add fields - java.util.ArrayList foreignKeys = new java.util.ArrayList(); + java.util.ArrayList foreignKeys = new java.util.ArrayList<>(); java.util.Iterator it = fields.iterator(); while (it.hasNext()){ Field field = it.next(); From a7126fa07cbec1743fb992f539c44d25dca1a226 Mon Sep 17 00:00:00 2001 From: pborissow Date: Sat, 20 May 2023 13:47:17 -0400 Subject: [PATCH 4/5] Cleaned up JSONArray iterator --- src/javaxt/orm/Model.java | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/javaxt/orm/Model.java b/src/javaxt/orm/Model.java index 2461a13..fee6fd8 100644 --- a/src/javaxt/orm/Model.java +++ b/src/javaxt/orm/Model.java @@ -14,7 +14,7 @@ public class Model { private String name; - private HashSet implementations; + private TreeSet implementations; private ArrayList fields; private static final String template = getTemplate(); private String tableName; @@ -32,7 +32,7 @@ public class Model { */ protected Model(String modelName, JSONObject modelInfo, String packageName, HashMap options){ this.name = modelName; - this.implementations = new HashSet<>(); + this.implementations = new TreeSet<>(); this.fields = new ArrayList<>(); this.options = options; this.packageName = packageName; @@ -207,7 +207,7 @@ public String getJavaCode(){ StringBuilder hasMany = new StringBuilder(); StringBuilder initArrays = new StringBuilder(); String getLastModified = ""; - java.util.TreeSet includes = new java.util.TreeSet<>(); + TreeSet includes = new TreeSet<>(); for (int i=0; i foreignKeys = new java.util.ArrayList<>(); - java.util.Iterator it = fields.iterator(); + ArrayList foreignKeys = new ArrayList<>(); + Iterator it = fields.iterator(); while (it.hasNext()){ Field field = it.next(); if (field.isArray()) continue; @@ -823,7 +822,7 @@ public String getTableSQL(){ */ public String getDiamondTableSQL(){ StringBuilder str = new StringBuilder(); - java.util.Iterator it = fields.iterator(); + Iterator it = fields.iterator(); while (it.hasNext()){ Field field = it.next(); if (field.isArray()){ @@ -925,7 +924,7 @@ public String getDiamondTableSQL(){ */ public String getForeignKeySQL(){ StringBuilder str = new StringBuilder(); - java.util.Iterator it = fields.iterator(); + Iterator it = fields.iterator(); while (it.hasNext()){ Field field = it.next(); if (!field.isArray()){ @@ -967,7 +966,7 @@ public String getForeignKeySQL(){ public String getIndexSQL(){ StringBuilder str = new StringBuilder(); String indexPrefix = "IDX_" + tableName.toUpperCase()+ "_"; - java.util.Iterator it = fields.iterator(); + Iterator it = fields.iterator(); while (it.hasNext()){ Field field = it.next(); if (!field.isArray()){ @@ -1036,7 +1035,7 @@ public String getTriggerSQL(){ /** Returns true if the model contains a lastModified date field. */ protected boolean hasLastModifiedField(){ - java.util.Iterator it = fields.iterator(); + Iterator it = fields.iterator(); while (it.hasNext()){ Field field = it.next(); if (field.isArray()) continue; From 318973dc4ffa7d7dcb2bf19ca4fd210c33052a12 Mon Sep 17 00:00:00 2001 From: pborissow Date: Sun, 21 May 2023 09:31:30 -0400 Subject: [PATCH 5/5] Updated javaxt-core dependency in pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 94cf71a..352a3d5 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ javaxt javaxt-core - 1.12.3 + 2.0.0 org.openjdk.nashorn