diff --git a/pom.xml b/pom.xml index 12f4f58..352a3d5 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,12 @@ javaxt javaxt-core - 1.12.1 + 2.0.0 + + + org.openjdk.nashorn + nashorn-core + 15.4 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..fee6fd8 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 TreeSet 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 TreeSet<>(); + 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(); + TreeSet includes = new 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"); } @@ -541,15 +599,14 @@ else if (fieldType.equals("byte[]")){ getJson.append(" if (json.has(\""); getJson.append(fieldName); getJson.append("\")){\r\n"); - getJson.append(" JSONArray _"); + getJson.append(" for (JSONValue _"); getJson.append(fieldName); - getJson.append(" = json.get(\""); + getJson.append(" : json.get(\""); getJson.append(fieldName); - getJson.append("\").toJSONArray();\r\n"); - getJson.append(" for (int i=0; i<_" + fieldName + ".length(); i++){\r\n"); + getJson.append("\").toJSONArray()){\r\n"); getJson.append(" "); getJson.append(fieldName); - getJson.append(".add(new " + modelName + "(_" + fieldName + ".get(i).toJSONObject()));\r\n"); + getJson.append(".add(new " + modelName + "(_" + fieldName + ".toJSONObject()));\r\n"); getJson.append(" }\r\n"); getJson.append(" }\r\n\r\n"); } @@ -574,15 +631,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 +675,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,8 +758,8 @@ public String getTableSQL(){ //Add fields - java.util.ArrayList 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; @@ -775,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()){ @@ -877,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()){ @@ -919,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()){ @@ -988,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; 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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy