From c974151315bee43af4a6e717e5f9527632c34c01 Mon Sep 17 00:00:00 2001 From: arkanovicz Date: Thu, 4 Mar 2021 21:11:10 +0100 Subject: [PATCH 01/12] Use Json instances --- modality-api-client/pom.xml | 2 +- modality-api-server/pom.xml | 2 +- modality-core/pom.xml | 7 +- .../java/com/republicate/modality/Entity.java | 5 +- .../com/republicate/modality/Instance.java | 114 +++++++++--------- .../republicate/modality/ScalarAttribute.java | 30 ++--- .../modality/WrappingInstance.java | 12 +- .../modality/config/ConfigDigester.java | 4 +- .../modality/filter/ValueFilters.java | 23 ++-- .../modality/impl/AttributeHolder.java | 46 +++---- .../republicate/modality/impl/BaseModel.java | 2 +- .../{TypeUtils.java => ConversionUtils.java} | 2 +- .../modality/util/SlotHashMap.java | 34 ------ .../republicate/modality/util/SlotMap.java | 27 ----- .../modality/util/SlotTreeMap.java | 39 ------ .../modality/velosurf/Velosurf.java | 7 +- .../modality-example-bookshelf/pom.xml | 2 +- modality-examples/pom.xml | 2 +- modality-webapp-auth/pom.xml | 2 +- .../webapp/auth/BaseHTTPBasicAuthFilter.java | 4 +- .../webapp/auth/BaseHTTPDigestAuthFilter.java | 17 +-- .../webapp/auth/HTTPDigestAuthFilter.java | 9 +- .../auth/helpers/CredentialsCheckerImpl.java | 7 +- .../helpers/RememberMeCookieHandlerImpl.java | 20 +-- .../webapp/auth/BaseHTTPAuthTests.java | 3 - .../webapp/auth/HTTPBasicAuthTests.java | 4 +- modality-webapp/pom.xml | 2 +- pom.xml | 2 +- velocity-tools-apiclient/pom.xml | 2 +- velocity-tools-model/pom.xml | 2 +- .../tools/model/InstanceReference.java | 3 +- 31 files changed, 169 insertions(+), 268 deletions(-) rename modality-core/src/main/java/com/republicate/modality/util/{TypeUtils.java => ConversionUtils.java} (99%) delete mode 100644 modality-core/src/main/java/com/republicate/modality/util/SlotHashMap.java delete mode 100644 modality-core/src/main/java/com/republicate/modality/util/SlotMap.java delete mode 100644 modality-core/src/main/java/com/republicate/modality/util/SlotTreeMap.java diff --git a/modality-api-client/pom.xml b/modality-api-client/pom.xml index caeb893..6b920a5 100644 --- a/modality-api-client/pom.xml +++ b/modality-api-client/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-api-client diff --git a/modality-api-server/pom.xml b/modality-api-server/pom.xml index 0898bad..eb53c8e 100644 --- a/modality-api-server/pom.xml +++ b/modality-api-server/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-api-server jar diff --git a/modality-core/pom.xml b/modality-core/pom.xml index ba6e071..98c744a 100644 --- a/modality-core/pom.xml +++ b/modality-core/pom.xml @@ -24,7 +24,7 @@ com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-core @@ -101,6 +101,11 @@ commons-io 2.8.0 + + com.republicate + essential-json + 2.6.3 + junit junit diff --git a/modality-core/src/main/java/com/republicate/modality/Entity.java b/modality-core/src/main/java/com/republicate/modality/Entity.java index b00ff99..2bd34ca 100644 --- a/modality-core/src/main/java/com/republicate/modality/Entity.java +++ b/modality-core/src/main/java/com/republicate/modality/Entity.java @@ -20,10 +20,9 @@ */ import com.republicate.modality.impl.BaseEntity; -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.Serializable; import java.lang.reflect.Method; @@ -63,7 +62,7 @@ public Iterator iterator() public long getCount() throws SQLException { - return TypeUtils.toLong(getCountAttribute().evaluate()); + return ConversionUtils.toLong(getCountAttribute().evaluate()); } public Instance fetch(Serializable... key) throws SQLException diff --git a/modality-core/src/main/java/com/republicate/modality/Instance.java b/modality-core/src/main/java/com/republicate/modality/Instance.java index bd9c7fa..948fc36 100644 --- a/modality-core/src/main/java/com/republicate/modality/Instance.java +++ b/modality-core/src/main/java/com/republicate/modality/Instance.java @@ -19,19 +19,17 @@ * under the License. */ -import com.republicate.modality.filter.Filter; +import com.republicate.json.Json; import com.republicate.modality.filter.ValueFilters; import com.republicate.modality.sql.RowValues; import com.republicate.modality.util.ChainedMap; -import com.republicate.modality.util.SlotTreeMap; -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.sql.SQLException; -import java.util.Arrays; import java.util.BitSet; import java.util.Calendar; import java.util.Date; @@ -39,10 +37,9 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.function.Consumer; -public class Instance extends SlotTreeMap +public class Instance extends Json.Object { public Instance(Model model) { @@ -120,112 +117,112 @@ public Serializable evaluate(String name, Serializable... params) throws SQLExce public String evaluateString(String name, Map params) throws SQLException { - return TypeUtils.toString(evaluate(name, params)); + return ConversionUtils.toString(evaluate(name, params)); } public Character evaluateChar(String name, Map params) throws SQLException { - return TypeUtils.toChar(evaluate(name, params)); + return ConversionUtils.toChar(evaluate(name, params)); } public Boolean evaluateBoolean(String name, Map params) throws SQLException { - return TypeUtils.toBoolean(evaluate(name, params)); + return ConversionUtils.toBoolean(evaluate(name, params)); } public Byte evaluateByte(String name, Map params) throws SQLException { - return TypeUtils.toByte(evaluate(name, params)); + return ConversionUtils.toByte(evaluate(name, params)); } public Short evaluateShort(String name, Map params) throws SQLException { - return TypeUtils.toShort(evaluate(name, params)); + return ConversionUtils.toShort(evaluate(name, params)); } public Integer evaluateInteger(String name, Map params) throws SQLException { - return TypeUtils.toInteger(evaluate(name, params)); + return ConversionUtils.toInteger(evaluate(name, params)); } public Long evaluateLong(String name, Map params) throws SQLException { - return TypeUtils.toLong(evaluate(name, params)); + return ConversionUtils.toLong(evaluate(name, params)); } public Float evaluateFloat(String name, Map params) throws SQLException { - return TypeUtils.toFloat(evaluate(name, params)); + return ConversionUtils.toFloat(evaluate(name, params)); } public Double evaluateDouble(String name, Map params) throws SQLException { - return TypeUtils.toDouble(evaluate(name, params)); + return ConversionUtils.toDouble(evaluate(name, params)); } public Date evaluateDate(String name, Map params) throws SQLException { - return TypeUtils.toDate(evaluate(name, params)); + return ConversionUtils.toDate(evaluate(name, params)); } public Calendar evaluateCalendar(String name, Map params) throws SQLException { - return TypeUtils.toCalendar(evaluate(name, params)); + return ConversionUtils.toCalendar(evaluate(name, params)); } public String evaluateString(String name, Serializable... params) throws SQLException { - return TypeUtils.toString(evaluate(name, params)); + return ConversionUtils.toString(evaluate(name, params)); } public Character evaluateChar(String name, Serializable... params) throws SQLException { - return TypeUtils.toChar(evaluate(name, params)); + return ConversionUtils.toChar(evaluate(name, params)); } public Boolean evaluateBoolean(String name, Serializable... params) throws SQLException { - return TypeUtils.toBoolean(evaluate(name, params)); + return ConversionUtils.toBoolean(evaluate(name, params)); } public Byte evaluateByte(String name, Serializable... params) throws SQLException { - return TypeUtils.toByte(evaluate(name, params)); + return ConversionUtils.toByte(evaluate(name, params)); } public Short evaluateShort(String name, Serializable... params) throws SQLException { - return TypeUtils.toShort(evaluate(name, params)); + return ConversionUtils.toShort(evaluate(name, params)); } public Integer evaluateInteger(String name, Serializable... params) throws SQLException { - return TypeUtils.toInteger(evaluate(name, params)); + return ConversionUtils.toInteger(evaluate(name, params)); } public Long evaluateLong(String name, Serializable... params) throws SQLException { - return TypeUtils.toLong(evaluate(name, params)); + return ConversionUtils.toLong(evaluate(name, params)); } public Float evaluateFloat(String name, Serializable... params) throws SQLException { - return TypeUtils.toFloat(evaluate(name, params)); + return ConversionUtils.toFloat(evaluate(name, params)); } public Double evaluateDouble(String name, Serializable... params) throws SQLException { - return TypeUtils.toDouble(evaluate(name, params)); + return ConversionUtils.toDouble(evaluate(name, params)); } public Date evaluateDate(String name, Serializable... params) throws SQLException { - return TypeUtils.toDate(evaluate(name, params)); + return ConversionUtils.toDate(evaluate(name, params)); } public Calendar evaluateCalendar(String name, Serializable... params) throws SQLException { - return TypeUtils.toCalendar(evaluate(name, params)); + return ConversionUtils.toCalendar(evaluate(name, params)); } public Instance retrieve(String name, Map params) throws SQLException @@ -278,57 +275,57 @@ public long perform(String name, Serializable... params) throws SQLException public String getString(String name) { - return TypeUtils.toString(get(name)); + return ConversionUtils.toString(get(name)); } public Character getChar(String name) { - return TypeUtils.toChar(get(name)); + return ConversionUtils.toChar(get(name)); } public Boolean getBoolean(String name) { - return TypeUtils.toBoolean(get(name)); + return ConversionUtils.toBoolean(get(name)); } public Byte getByte(String name) { - return TypeUtils.toByte(get(name)); + return ConversionUtils.toByte(get(name)); } public Short getShort(String name) { - return TypeUtils.toShort(get(name)); + return ConversionUtils.toShort(get(name)); } public Integer getInteger(String name) { - return TypeUtils.toInteger(get(name)); + return ConversionUtils.toInteger(get(name)); } public Long getLong(String name) { - return TypeUtils.toLong(get(name)); + return ConversionUtils.toLong(get(name)); } public Float getFloat(String name) { - return TypeUtils.toFloat(get(name)); + return ConversionUtils.toFloat(get(name)); } public Double getDouble(String name) { - return TypeUtils.toDouble(get(name)); + return ConversionUtils.toDouble(get(name)); } public Date getDate(String name) { - return TypeUtils.toDate(get(name)); + return ConversionUtils.toDate(get(name)); } public Calendar getCalendar(String name) { - return TypeUtils.toCalendar(get(name)); + return ConversionUtils.toCalendar(get(name)); } public final Model getModel() @@ -454,25 +451,30 @@ public void upsert() throws SQLException @Override public void putAll(Map map) { - /* CB TODO check PK change - Serializable[] pk = null; - if (persisted) - { - pk = getPrimaryKey(); - } - */ - super.putAll(map); if (persisted) { - // the persisted flag should be false before this point if PK changed - entity.getNonPrimaryKeyMask().stream() - .filter(col -> + for (Entity.Column column : entity.getPrimaryKey()) + { + if (map.containsKey(column.name) && !Objects.equals(ConversionUtils.toString(get(column.name)), ConversionUtils.toString(map.get(column.name)))) { - String colName = entity.getColumn(col).name; - return !Objects.equals(get(colName), map.get(colName)); - }) - .forEach(col -> dirtyFlags.set(col)); + persisted = false; + break; + } + } + + if (persisted) + { + // the persisted flag should be false before this point if PK changed + entity.getNonPrimaryKeyMask().stream() + .filter(col -> + { + String colName = entity.getColumn(col).name; + return map.containsKey(colName) && !Objects.equals(ConversionUtils.toString(get(colName)), ConversionUtils.toString(map.get(colName))); + }) + .forEach(col -> dirtyFlags.set(col)); + } } + super.putAll(map); } public void putColumns(Map map) throws SQLException @@ -530,7 +532,7 @@ public final Serializable put(String key, Serializable value) { if (column.isKeyColumn()) { - if (!TypeUtils.sameValues(ret, value)) + if (!ConversionUtils.sameValues(ret, value)) { persisted = false; } @@ -550,7 +552,7 @@ public final Serializable put(String key, Serializable value) * @return equality status */ @Override - public boolean equals(final Object o) + public boolean equals(final java.lang.Object o) { return (o instanceof Instance) && getEntity() == ((Instance)o).getEntity() diff --git a/modality-core/src/main/java/com/republicate/modality/ScalarAttribute.java b/modality-core/src/main/java/com/republicate/modality/ScalarAttribute.java index 4094c55..1afe962 100644 --- a/modality-core/src/main/java/com/republicate/modality/ScalarAttribute.java +++ b/modality-core/src/main/java/com/republicate/modality/ScalarAttribute.java @@ -21,7 +21,7 @@ import com.republicate.modality.impl.AttributeHolder; import com.republicate.modality.sql.PooledStatement; -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import java.io.Serializable; import java.sql.ResultSet; @@ -86,71 +86,71 @@ public String getQueryMethodName() public String getString(Serializable... paramValues) throws SQLException { - return TypeUtils.toString(evaluate(paramValues)); + return ConversionUtils.toString(evaluate(paramValues)); } public String getString(Map source) throws SQLException { - return TypeUtils.toString(evaluate(source)); + return ConversionUtils.toString(evaluate(source)); } public Boolean getBoolean(Serializable... paramValues) throws SQLException { - return TypeUtils.toBoolean(evaluate(paramValues)); + return ConversionUtils.toBoolean(evaluate(paramValues)); } public Boolean getBoolean(Map source) throws SQLException { - return TypeUtils.toBoolean(evaluate(source)); + return ConversionUtils.toBoolean(evaluate(source)); } public Short getShort(Serializable... paramValues) throws SQLException { - return TypeUtils.toShort(evaluate(paramValues)); + return ConversionUtils.toShort(evaluate(paramValues)); } public Short getShort(Map source) throws SQLException { - return TypeUtils.toShort(evaluate(source)); + return ConversionUtils.toShort(evaluate(source)); } public Integer getInteger(Serializable... paramValues) throws SQLException { - return TypeUtils.toInteger(evaluate(paramValues)); + return ConversionUtils.toInteger(evaluate(paramValues)); } public Integer getInteger(Map source) throws SQLException { - return TypeUtils.toInteger(evaluate(source)); + return ConversionUtils.toInteger(evaluate(source)); } public Long getLong(Serializable... paramValues) throws SQLException { - return TypeUtils.toLong(evaluate(paramValues)); + return ConversionUtils.toLong(evaluate(paramValues)); } public Long getLong(Map source) throws SQLException { - return TypeUtils.toLong(evaluate(source)); + return ConversionUtils.toLong(evaluate(source)); } public Float getFloat(Serializable... paramValues) throws SQLException { - return TypeUtils.toFloat(evaluate(paramValues)); + return ConversionUtils.toFloat(evaluate(paramValues)); } public Float getFloat(Map source) throws SQLException { - return TypeUtils.toFloat(evaluate(source)); + return ConversionUtils.toFloat(evaluate(source)); } public Double getDouble(Serializable... paramValues) throws SQLException { - return TypeUtils.toDouble(evaluate(paramValues)); + return ConversionUtils.toDouble(evaluate(paramValues)); } public Double getDouble(Map source) throws SQLException { - return TypeUtils.toDouble(evaluate(source)); + return ConversionUtils.toDouble(evaluate(source)); } } diff --git a/modality-core/src/main/java/com/republicate/modality/WrappingInstance.java b/modality-core/src/main/java/com/republicate/modality/WrappingInstance.java index 05903e3..07f840f 100644 --- a/modality-core/src/main/java/com/republicate/modality/WrappingInstance.java +++ b/modality-core/src/main/java/com/republicate/modality/WrappingInstance.java @@ -19,8 +19,8 @@ * under the License. */ +import com.republicate.modality.util.ConversionUtils; import com.republicate.modality.util.Converter; -import com.republicate.modality.util.TypeUtils; import org.apache.commons.lang3.tuple.Pair; import java.io.Serializable; @@ -34,7 +34,7 @@ public class WrappingInstance extends Instance implements Wrapper { - public WrappingInstance(Entity entity, Object pojo) + public WrappingInstance(Entity entity, java.lang.Object pojo) { super(entity); this.pojo = pojo; @@ -49,7 +49,7 @@ private Serializable callSetter(Pair setter, Serializable value) Class paramClass = setter.getRight(); try { - if (value != null && value.getClass() != paramClass && !TypeUtils.isMethodInvocationConvertible(paramClass, value.getClass())) + if (value != null && value.getClass() != paramClass && !ConversionUtils.isMethodInvocationConvertible(paramClass, value.getClass())) { Converter converter = getModel().getConversionHandler().getNeededConverter(paramClass, value.getClass()); if (converter == null) @@ -58,7 +58,7 @@ private Serializable callSetter(Pair setter, Serializable value) } value = converter.convert(value); } - Object methodRet = method.invoke(pojo, value); + java.lang.Object methodRet = method.invoke(pojo, value); if (methodRet != null && !(methodRet instanceof Void)) { if (!(methodRet instanceof Serializable)) @@ -90,7 +90,7 @@ public void readValue(String columnName, Serializable value) throws SQLException } @Override - public Serializable get(Object key) + public Serializable get(java.lang.Object key) { Method getter = getters.get(key); if (getter == null) @@ -124,7 +124,7 @@ protected Serializable putImpl(String key, Serializable value) } } - private Object pojo; + private java.lang.Object pojo; private Map getters = null; private Map> setters = null; diff --git a/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java b/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java index 4b8428c..d0618f6 100644 --- a/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java +++ b/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java @@ -23,7 +23,7 @@ import com.republicate.modality.Model; import com.republicate.modality.impl.AttributeHolder; import com.republicate.modality.impl.BaseAttribute; -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.velocity.tools.ClassUtils; import org.w3c.dom.Attr; @@ -435,7 +435,7 @@ public static Object convertParamToClass(Object value, Class clazz) throws Confi } else if (clazz == Boolean.TYPE) { - ret = TypeUtils.toBoolean(value); + ret = ConversionUtils.toBoolean(value); } else if (Enum.class.isAssignableFrom(clazz) && value instanceof String) { diff --git a/modality-core/src/main/java/com/republicate/modality/filter/ValueFilters.java b/modality-core/src/main/java/com/republicate/modality/filter/ValueFilters.java index 34c87a1..b1da6b3 100644 --- a/modality-core/src/main/java/com/republicate/modality/filter/ValueFilters.java +++ b/modality-core/src/main/java/com/republicate/modality/filter/ValueFilters.java @@ -1,7 +1,7 @@ package com.republicate.modality.filter; +import com.republicate.modality.util.ConversionUtils; import com.republicate.modality.util.Cryptograph; -import com.republicate.modality.util.TypeUtils; import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; @@ -10,14 +10,11 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Calendar; -import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; -import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; -import java.util.regex.Pattern; public class ValueFilters extends ConfigurableFilters { @@ -26,16 +23,16 @@ public ValueFilters(String configurationPrefix) super(configurationPrefix); addStockFilter("lowercase", x -> String.valueOf(x).toLowerCase(Locale.ROOT)); addStockFilter("uppercase", x -> String.valueOf(x).toUpperCase(Locale.ROOT)); - addStockFilter("calendar_to_date", x -> x instanceof Calendar ? TypeUtils.toDate(x) : x); - addStockFilter("date_to_calendar", x -> x instanceof java.sql.Date ? TypeUtils.toCalendar(x) : x); + addStockFilter("calendar_to_date", x -> x instanceof Calendar ? ConversionUtils.toDate(x) : x); + addStockFilter("date_to_calendar", x -> x instanceof java.sql.Date ? ConversionUtils.toCalendar(x) : x); addStockFilter("number_to_boolean", x -> x instanceof Number ? ((Number)x).longValue() != 0 : x); - addStockFilter("raw_obfuscate", x -> cryptograph.encrypt(TypeUtils.toString(x))); - addStockFilter("raw_deobfuscate", x -> cryptograph.decrypt(TypeUtils.toBytes(x))); - addStockFilter("obfuscate", x -> TypeUtils.base64Encode(cryptograph.encrypt(String.valueOf(x)))); - addStockFilter("deobfuscate", x -> cryptograph.decrypt(TypeUtils.base64Decode(x))); - addStockFilter("deobfuscate_strings", x -> x instanceof String ? cryptograph.decrypt(TypeUtils.base64Decode(x)) : x); - addStockFilter("base64_encode", x -> TypeUtils.base64Encode(x)); - addStockFilter("base64_decode", x -> TypeUtils.base64Decode(x)); + addStockFilter("raw_obfuscate", x -> cryptograph.encrypt(ConversionUtils.toString(x))); + addStockFilter("raw_deobfuscate", x -> cryptograph.decrypt(ConversionUtils.toBytes(x))); + addStockFilter("obfuscate", x -> ConversionUtils.base64Encode(cryptograph.encrypt(String.valueOf(x)))); + addStockFilter("deobfuscate", x -> cryptograph.decrypt(ConversionUtils.base64Decode(x))); + addStockFilter("deobfuscate_strings", x -> x instanceof String ? cryptograph.decrypt(ConversionUtils.base64Decode(x)) : x); + addStockFilter("base64_encode", x -> ConversionUtils.base64Encode(x)); + addStockFilter("base64_decode", x -> ConversionUtils.base64Decode(x)); addStockFilter("mask", x -> null); addStockFilter("no_html", x -> StringUtils.indexOfAny(String.valueOf(x), "<>\"") == -1 ? x : error("invalid character")); addStockFilter("escape_html", x -> new HtmlEscaped(x)); diff --git a/modality-core/src/main/java/com/republicate/modality/impl/AttributeHolder.java b/modality-core/src/main/java/com/republicate/modality/impl/AttributeHolder.java index 337bed2..1de3008 100644 --- a/modality-core/src/main/java/com/republicate/modality/impl/AttributeHolder.java +++ b/modality-core/src/main/java/com/republicate/modality/impl/AttributeHolder.java @@ -30,7 +30,7 @@ import com.republicate.modality.Transaction; import com.republicate.modality.config.ConfigurationException; import com.republicate.modality.sql.SqlUtils; -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import org.slf4j.Logger; import java.io.Serializable; @@ -167,112 +167,112 @@ public Serializable evaluate(String name, Map source, Serializable... params) th public String evaluateString(String name, Map params) throws SQLException { - return TypeUtils.toString(evaluate(name, params)); + return ConversionUtils.toString(evaluate(name, params)); } public Character evaluateChar(String name, Map params) throws SQLException { - return TypeUtils.toChar(evaluate(name, params)); + return ConversionUtils.toChar(evaluate(name, params)); } public Boolean evaluateBoolean(String name, Map params) throws SQLException { - return TypeUtils.toBoolean(evaluate(name, params)); + return ConversionUtils.toBoolean(evaluate(name, params)); } public Byte evaluateByte(String name, Map params) throws SQLException { - return TypeUtils.toByte(evaluate(name, params)); + return ConversionUtils.toByte(evaluate(name, params)); } public Short evaluateShort(String name, Map params) throws SQLException { - return TypeUtils.toShort(evaluate(name, params)); + return ConversionUtils.toShort(evaluate(name, params)); } public Integer evaluateInteger(String name, Map params) throws SQLException { - return TypeUtils.toInteger(evaluate(name, params)); + return ConversionUtils.toInteger(evaluate(name, params)); } public Long evaluateLong(String name, Map params) throws SQLException { - return TypeUtils.toLong(evaluate(name, params)); + return ConversionUtils.toLong(evaluate(name, params)); } public Float evaluateFloat(String name, Map params) throws SQLException { - return TypeUtils.toFloat(evaluate(name, params)); + return ConversionUtils.toFloat(evaluate(name, params)); } public Double evaluateDouble(String name, Map params) throws SQLException { - return TypeUtils.toDouble(evaluate(name, params)); + return ConversionUtils.toDouble(evaluate(name, params)); } public Date evaluateDate(String name, Map params) throws SQLException { - return TypeUtils.toDate(evaluate(name, params)); + return ConversionUtils.toDate(evaluate(name, params)); } public Calendar evaluateCalendar(String name, Map params) throws SQLException { - return TypeUtils.toCalendar(evaluate(name, params)); + return ConversionUtils.toCalendar(evaluate(name, params)); } public String evaluateString(String name, Serializable... params) throws SQLException { - return TypeUtils.toString(evaluate(name, params)); + return ConversionUtils.toString(evaluate(name, params)); } public Character evaluateChar(String name, Serializable... params) throws SQLException { - return TypeUtils.toChar(evaluate(name, params)); + return ConversionUtils.toChar(evaluate(name, params)); } public Boolean evaluateBoolean(String name, Serializable... params) throws SQLException { - return TypeUtils.toBoolean(evaluate(name, params)); + return ConversionUtils.toBoolean(evaluate(name, params)); } public Byte evaluateByte(String name, Serializable... params) throws SQLException { - return TypeUtils.toByte(evaluate(name, params)); + return ConversionUtils.toByte(evaluate(name, params)); } public Short evaluateShort(String name, Serializable... params) throws SQLException { - return TypeUtils.toShort(evaluate(name, params)); + return ConversionUtils.toShort(evaluate(name, params)); } public Integer evaluateInteger(String name, Serializable... params) throws SQLException { - return TypeUtils.toInteger(evaluate(name, params)); + return ConversionUtils.toInteger(evaluate(name, params)); } public Long evaluateLong(String name, Serializable... params) throws SQLException { - return TypeUtils.toLong(evaluate(name, params)); + return ConversionUtils.toLong(evaluate(name, params)); } public Float evaluateFloat(String name, Serializable... params) throws SQLException { - return TypeUtils.toFloat(evaluate(name, params)); + return ConversionUtils.toFloat(evaluate(name, params)); } public Double evaluateDouble(String name, Serializable... params) throws SQLException { - return TypeUtils.toDouble(evaluate(name, params)); + return ConversionUtils.toDouble(evaluate(name, params)); } public Date evaluateDate(String name, Serializable... params) throws SQLException { - return TypeUtils.toDate(evaluate(name, params)); + return ConversionUtils.toDate(evaluate(name, params)); } public Calendar evaluateCalendar(String name, Serializable... params) throws SQLException { - return TypeUtils.toCalendar(evaluate(name, params)); + return ConversionUtils.toCalendar(evaluate(name, params)); } // --- diff --git a/modality-core/src/main/java/com/republicate/modality/impl/BaseModel.java b/modality-core/src/main/java/com/republicate/modality/impl/BaseModel.java index a04262e..540fa36 100644 --- a/modality-core/src/main/java/com/republicate/modality/impl/BaseModel.java +++ b/modality-core/src/main/java/com/republicate/modality/impl/BaseModel.java @@ -1285,7 +1285,7 @@ protected void initialize() { try { - Object obj = clazz.newInstance(); + java.lang.Object obj = clazz.newInstance(); return new WrappingInstance(entity, obj); } catch (InstantiationException | IllegalAccessException e) diff --git a/modality-core/src/main/java/com/republicate/modality/util/TypeUtils.java b/modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java similarity index 99% rename from modality-core/src/main/java/com/republicate/modality/util/TypeUtils.java rename to modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java index b74c3f1..4e5caf8 100644 --- a/modality-core/src/main/java/com/republicate/modality/util/TypeUtils.java +++ b/modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java @@ -32,7 +32,7 @@ import java.util.Map; import java.util.Set; -public class TypeUtils +public class ConversionUtils { protected static Logger logger = LoggerFactory.getLogger("sql-types"); diff --git a/modality-core/src/main/java/com/republicate/modality/util/SlotHashMap.java b/modality-core/src/main/java/com/republicate/modality/util/SlotHashMap.java deleted file mode 100644 index a8ef62c..0000000 --- a/modality-core/src/main/java/com/republicate/modality/util/SlotHashMap.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.republicate.modality.util; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -public class SlotHashMap extends HashMap implements SlotMap -{ - public SlotHashMap() {} - - public SlotHashMap(Map m) - { - super(m); - } -} diff --git a/modality-core/src/main/java/com/republicate/modality/util/SlotMap.java b/modality-core/src/main/java/com/republicate/modality/util/SlotMap.java deleted file mode 100644 index abbb2cc..0000000 --- a/modality-core/src/main/java/com/republicate/modality/util/SlotMap.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.republicate.modality.util; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.Serializable; -import java.util.Map; - -public interface SlotMap extends Map, Serializable -{ -} diff --git a/modality-core/src/main/java/com/republicate/modality/util/SlotTreeMap.java b/modality-core/src/main/java/com/republicate/modality/util/SlotTreeMap.java deleted file mode 100644 index 29329f6..0000000 --- a/modality-core/src/main/java/com/republicate/modality/util/SlotTreeMap.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.republicate.modality.util; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.Serializable; -import java.util.Map; -import java.util.TreeMap; - -public class SlotTreeMap extends TreeMap implements SlotMap -{ - public SlotTreeMap() {} - - public SlotTreeMap(java.util.Comparator comparator) - { - super(comparator); - } - - public SlotTreeMap(Map m) - { - super(m); - } -} diff --git a/modality-core/src/main/java/com/republicate/modality/velosurf/Velosurf.java b/modality-core/src/main/java/com/republicate/modality/velosurf/Velosurf.java index aa879b1..7ce075c 100644 --- a/modality-core/src/main/java/com/republicate/modality/velosurf/Velosurf.java +++ b/modality-core/src/main/java/com/republicate/modality/velosurf/Velosurf.java @@ -20,11 +20,10 @@ */ import com.republicate.modality.Model; -import com.republicate.modality.config.ConfigDigester; import com.republicate.modality.config.ConfigurationException; import com.republicate.modality.util.AESCryptograph; +import com.republicate.modality.util.ConversionUtils; import com.republicate.modality.util.Cryptograph; -import com.republicate.modality.util.TypeUtils; import org.apache.velocity.tools.XmlUtils; import org.w3c.dom.Element; import org.xml.sax.InputSource; @@ -87,12 +86,12 @@ protected void initObuscator(String seed) public String obfuscate(String clear) { - return TypeUtils.base64Encode(obfuscator.encrypt(clear)); + return ConversionUtils.base64Encode(obfuscator.encrypt(clear)); } public String deobfuscate(String obfuscated) { - return obfuscator.decrypt(TypeUtils.base64Decode(obfuscated)); + return obfuscator.decrypt(ConversionUtils.base64Decode(obfuscated)); } private Cryptograph obfuscator = null; diff --git a/modality-examples/modality-example-bookshelf/pom.xml b/modality-examples/modality-example-bookshelf/pom.xml index 79d6ed7..34e4c02 100644 --- a/modality-examples/modality-example-bookshelf/pom.xml +++ b/modality-examples/modality-example-bookshelf/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality-examples - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-example-bookshelf diff --git a/modality-examples/pom.xml b/modality-examples/pom.xml index d4094a5..cd30750 100644 --- a/modality-examples/pom.xml +++ b/modality-examples/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-examples diff --git a/modality-webapp-auth/pom.xml b/modality-webapp-auth/pom.xml index 04e1bdb..c902b40 100644 --- a/modality-webapp-auth/pom.xml +++ b/modality-webapp-auth/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-webapp-auth diff --git a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPBasicAuthFilter.java b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPBasicAuthFilter.java index e662835..1d0af3d 100644 --- a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPBasicAuthFilter.java +++ b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPBasicAuthFilter.java @@ -19,7 +19,7 @@ * under the License. */ -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -48,7 +48,7 @@ protected USER authenticate(HttpServletRequest request) throws ServletException USER ret = null; if (authHeader != null && authHeader.startsWith("Basic ")) { - byte[] decrypted = TypeUtils.base64Decode(authHeader.substring(6)); + byte[] decrypted = ConversionUtils.base64Decode(authHeader.substring(6)); String clear = new String(decrypted, StandardCharsets.UTF_8); int sep = clear.indexOf(':'); if (sep == -1) diff --git a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPDigestAuthFilter.java b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPDigestAuthFilter.java index fc05c01..ff33072 100644 --- a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPDigestAuthFilter.java +++ b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/BaseHTTPDigestAuthFilter.java @@ -19,15 +19,16 @@ * under the License. */ -import com.republicate.modality.util.SlotHashMap; -import com.republicate.modality.util.SlotMap; import com.republicate.modality.webapp.auth.helpers.NonceStore; import com.republicate.modality.webapp.util.Digester; import com.republicate.modality.webapp.util.HttpUtils; import org.apache.commons.lang3.tuple.Pair; import java.io.IOException; +import java.io.Serializable; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -77,7 +78,7 @@ protected USER authenticate(HttpServletRequest request) throws ServletException { String authHeader = request.getHeader("Authenticate"); USER ret = null; - SlotMap authParams = null; + Map authParams = null; if (authHeader != null) { try @@ -117,13 +118,13 @@ protected USER authenticate(HttpServletRequest request) throws ServletException return ret; } - private SlotMap getAuthenticationParams(String headerValue) throws AuthenticationException + private Map getAuthenticationParams(String headerValue) throws AuthenticationException { if (!headerValue.startsWith("Digest ")) { throw new AuthenticationException("invalid Digest authentication: " + headerValue); } - SlotMap ret = new SlotHashMap(); + Map ret = new HashMap<>(); boolean hasQOP = false; int nc = 0; String[] parts = headerValue.substring(7).split(", *"); @@ -208,7 +209,7 @@ private SlotMap getAuthenticationParams(String headerValue) throws Authenticatio return ret; } - private Pair calcExpectedResponse(SlotMap authParams, HttpServletRequest request) throws AuthenticationException + private Pair calcExpectedResponse(Map authParams, HttpServletRequest request) throws AuthenticationException { String username = (String) authParams.get("username"); String md5 = getUserRealmPasswordMD5(username); @@ -242,7 +243,7 @@ private Pair calcExpectedResponse(SlotMap authParams, HttpServletR protected abstract USER getUserInstance(String login) throws AuthenticationException; - private String calcHA1(SlotMap authParams, String md5) throws AuthenticationException + private String calcHA1(Map authParams, String md5) throws AuthenticationException { String algorithm = (String)authParams.get("algorithm"); String ha1; @@ -260,7 +261,7 @@ private String calcHA1(SlotMap authParams, String md5) throws AuthenticationExce return ha1; } - private String calcHA2(SlotMap authParams, HttpServletRequest request) throws AuthenticationException + private String calcHA2(Map authParams, HttpServletRequest request) throws AuthenticationException { String qop = (String)authParams.get("qop"); String ha2; diff --git a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/HTTPDigestAuthFilter.java b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/HTTPDigestAuthFilter.java index 715c3d2..9ba3e4e 100644 --- a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/HTTPDigestAuthFilter.java +++ b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/HTTPDigestAuthFilter.java @@ -24,10 +24,11 @@ import com.republicate.modality.RowAttribute; import com.republicate.modality.ScalarAttribute; import com.republicate.modality.config.ConfigurationException; -import com.republicate.modality.util.SlotHashMap; -import com.republicate.modality.util.SlotMap; +import java.io.Serializable; import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import javax.servlet.FilterConfig; import javax.servlet.ServletException; @@ -89,7 +90,7 @@ protected String getUserRealmPasswordMD5(String login) throws AuthenticationExce try { getModel(); // force initialization - SlotMap params = new SlotHashMap(); + Map params = new HashMap<>(); params.put("realm", getRealm()); params.put("login", login); return digestByLoginAttribute.getString(params); @@ -107,7 +108,7 @@ protected Instance getUserInstance(String login) throws AuthenticationException try { getModel(); // force initialization - SlotMap params = new SlotHashMap(); + Map params = new HashMap<>(); params.put("realm", getRealm()); params.put("login", login); return userByLoginAttribute.retrieve(params); diff --git a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/CredentialsCheckerImpl.java b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/CredentialsCheckerImpl.java index f2ea92f..a2514f4 100644 --- a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/CredentialsCheckerImpl.java +++ b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/CredentialsCheckerImpl.java @@ -24,12 +24,13 @@ import com.republicate.modality.Model; import com.republicate.modality.RowAttribute; import com.republicate.modality.config.ConfigurationException; -import com.republicate.modality.util.SlotHashMap; -import com.republicate.modality.util.SlotMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Serializable; import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; import javax.servlet.ServletException; public class CredentialsCheckerImpl implements CredentialsChecker @@ -59,7 +60,7 @@ public Instance checkCredentials(String realm, String login, String password) th { try { - SlotMap params = new SlotHashMap(); + Map params = new HashMap<>(); params.put("realm", realm); params.put("login", login); params.put("password", password); diff --git a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/RememberMeCookieHandlerImpl.java b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/RememberMeCookieHandlerImpl.java index 4f4bc0d..e83509c 100644 --- a/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/RememberMeCookieHandlerImpl.java +++ b/modality-webapp-auth/src/main/java/com/republicate/modality/webapp/auth/helpers/RememberMeCookieHandlerImpl.java @@ -25,10 +25,8 @@ import com.republicate.modality.Model; import com.republicate.modality.RowAttribute; import com.republicate.modality.util.AESCryptograph; +import com.republicate.modality.util.ConversionUtils; import com.republicate.modality.util.Cryptograph; -import com.republicate.modality.util.SlotHashMap; -import com.republicate.modality.util.SlotMap; -import com.republicate.modality.util.TypeUtils; import com.republicate.modality.webapp.util.HttpUtils; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; @@ -37,7 +35,9 @@ import java.io.Serializable; import java.sql.SQLException; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -131,7 +131,7 @@ private Instance getRememberMe(String rememberMeValue, String requestIp, String String decrypted; try { - byte[] bytes = TypeUtils.base64Decode(rememberMeValue); + byte[] bytes = ConversionUtils.base64Decode(rememberMeValue); decrypted = cryptograph.decrypt(bytes); } catch (Exception e) @@ -158,7 +158,7 @@ private Instance getRememberMe(String rememberMeValue, String requestIp, String logger.debug("wrong number of user key values"); return null; } - SlotMap params = buildParams(pk, ip, ua, secureKey); + Map params = buildParams(pk, ip, ua, secureKey); try { return doCheckCookie.retrieve(params); @@ -187,7 +187,7 @@ public void setRememberMe(Instance user, HttpServletRequest request, HttpServlet Cookie cookie = createCookie(pk, ip, ua, secureKey); response.addCookie(cookie); - SlotMap params = buildParams(pk, ip, ua, secureKey); + Map params = buildParams(pk, ip, ua, secureKey); try { doCreateCookie.perform(params); @@ -246,7 +246,7 @@ private void manageCookie(Instance user, HttpServletRequest request, HttpServlet cookie.setMaxAge(maxAge); response.addCookie(cookie); - SlotMap params = buildParams(pk, ip, ua, secureKey); + Map params = buildParams(pk, ip, ua, secureKey); try { action.perform(params); @@ -265,9 +265,9 @@ private String getCookieValue(HttpServletRequest request) .orElse(null); } - private SlotMap buildParams(Serializable[] pk, String ip, String ua, String secureKey) + private Map buildParams(Serializable[] pk, String ip, String ua, String secureKey) { - SlotMap params = new SlotHashMap(); + Map params = new HashMap<>(); IntStream.range(0, pk.length).forEach(i -> params.put(usersPrimaryKey.get(i), pk[i])); params.put("ip", ip); params.put("user_agent", ua); @@ -283,7 +283,7 @@ private Cookie createCookie(Serializable[] pk, String ip, String ua, String secu .append('#').append(ip) .append('#').append(ua) .append('#').append(secureKey); - String encrypted = TypeUtils.base64Encode(cryptograph.encrypt(cleanCookie.toString())); + String encrypted = ConversionUtils.base64Encode(cryptograph.encrypt(cleanCookie.toString())); Cookie cookie = new Cookie(cookieName, encrypted); if (cookieDomain != null) { diff --git a/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/BaseHTTPAuthTests.java b/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/BaseHTTPAuthTests.java index 438b42e..ce6d31b 100644 --- a/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/BaseHTTPAuthTests.java +++ b/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/BaseHTTPAuthTests.java @@ -20,8 +20,6 @@ */ import com.republicate.modality.Model; -import com.republicate.modality.util.TypeUtils; -import com.republicate.modality.webapp.ModalityFilter; import org.apache.commons.collections4.iterators.IteratorEnumeration; import org.eclipse.jetty.servlet.ServletTester; @@ -34,7 +32,6 @@ import javax.servlet.DispatcherType; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; -import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/HTTPBasicAuthTests.java b/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/HTTPBasicAuthTests.java index c4cdf90..7da63bc 100644 --- a/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/HTTPBasicAuthTests.java +++ b/modality-webapp-auth/src/test/java/com/republicate/modality/webapp/auth/HTTPBasicAuthTests.java @@ -23,7 +23,7 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; -import com.republicate.modality.util.TypeUtils; +import com.republicate.modality.util.ConversionUtils; import com.republicate.modality.webapp.WebappModelProvider; import org.junit.After; import org.junit.Before; @@ -110,7 +110,7 @@ public void testBadAuthenticate() throws Exception @Test public void testGoodAuthenticate() throws Exception { - String b64 = TypeUtils.base64Encode("nestor:secret"); + String b64 = ConversionUtils.base64Encode("nestor:secret"); String request = "GET / HTTP/1.1\r\n" + "Host: test\r\n" + diff --git a/modality-webapp/pom.xml b/modality-webapp/pom.xml index 5342d6e..2880776 100644 --- a/modality-webapp/pom.xml +++ b/modality-webapp/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT modality-webapp diff --git a/pom.xml b/pom.xml index 0fbe170..53af932 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT pom ${project.groupId}:${project.artifactId} diff --git a/velocity-tools-apiclient/pom.xml b/velocity-tools-apiclient/pom.xml index 2a668d2..6f8db04 100644 --- a/velocity-tools-apiclient/pom.xml +++ b/velocity-tools-apiclient/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT velocity-tools-apiclient diff --git a/velocity-tools-model/pom.xml b/velocity-tools-model/pom.xml index cdbd903..9efadf7 100644 --- a/velocity-tools-model/pom.xml +++ b/velocity-tools-model/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 1.1-SNAPSHOT + 2.0-SNAPSHOT velocity-tools-model diff --git a/velocity-tools-model/src/main/java/com/republicate/modality/tools/model/InstanceReference.java b/velocity-tools-model/src/main/java/com/republicate/modality/tools/model/InstanceReference.java index f260afc..b795c65 100644 --- a/velocity-tools-model/src/main/java/com/republicate/modality/tools/model/InstanceReference.java +++ b/velocity-tools-model/src/main/java/com/republicate/modality/tools/model/InstanceReference.java @@ -21,7 +21,6 @@ import com.republicate.modality.Instance; import com.republicate.modality.Model; -import com.republicate.modality.util.SlotMap; import java.io.Serializable; import java.sql.SQLException; @@ -30,7 +29,7 @@ import java.util.Map; import java.util.Set; -public class InstanceReference implements Reference, SlotMap +public class InstanceReference implements Reference, Map, Serializable { public InstanceReference(Instance instance, ModelTool modelReference) { From 9da1774f5be7465103edfa19e95b5256361a386c Mon Sep 17 00:00:00 2001 From: arkanovicz Date: Mon, 31 May 2021 21:09:14 +0200 Subject: [PATCH 02/12] Proper handling of 'OTHER' sql types for Postgresql (json, jsonb) --- .../modality/config/ConfigDigester.java | 5 ++- .../republicate/modality/impl/BaseEntity.java | 23 +++++++--- .../modality/impl/ReverseEngineer.java | 3 +- .../republicate/modality/sql/SqlUtils.java | 43 ++++++++++++++++++- .../modality/util/ConversionHandlerImpl.java | 37 +++++++++++++++- 5 files changed, 100 insertions(+), 11 deletions(-) diff --git a/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java b/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java index d0618f6..c09be44 100644 --- a/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java +++ b/modality-core/src/main/java/com/republicate/modality/config/ConfigDigester.java @@ -284,9 +284,10 @@ public static void setProperty(Object bean, String name, Object value) throws Ex for (Method method : clazz.getDeclaredMethods()) { // prefix matching: we allow a method name like setWriteAccess for a parameter like write="..." - if (method.getParameterCount() == 2 && method.getName().equals("put") && method.getParameterTypes()[0] == String.class) + if (method.getParameterCount() == 2 && method.getName().equals("put") && method.getParameterTypes()[0].isAssignableFrom(String.class)) { setter = method; + break; } } clazz = clazz.getSuperclass(); @@ -429,7 +430,7 @@ public static boolean isMapType(Class typeClass) public static Object convertParamToClass(Object value, Class clazz) throws ConfigurationException { Object ret; - if (clazz == String.class || Map.class.isAssignableFrom(clazz)) + if (clazz == String.class || clazz == Object.class || Map.class.isAssignableFrom(clazz)) { ret = value; } diff --git a/modality-core/src/main/java/com/republicate/modality/impl/BaseEntity.java b/modality-core/src/main/java/com/republicate/modality/impl/BaseEntity.java index e329c50..6e18d58 100644 --- a/modality-core/src/main/java/com/republicate/modality/impl/BaseEntity.java +++ b/modality-core/src/main/java/com/republicate/modality/impl/BaseEntity.java @@ -37,6 +37,7 @@ import java.io.Serializable; import java.lang.reflect.Method; import java.sql.SQLException; +import java.sql.Types; import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; @@ -70,9 +71,9 @@ public void setTable(String table) this.sqlName = table; } - protected void addColumn(String name, String sqlName, int type, Integer size, boolean generated) throws SQLException + protected void addColumn(String name, String sqlName, int type, Integer size, boolean generated, String typeName) throws SQLException { - addColumn(new Entity.Column(name, sqlName, type, size, generated)); + addColumn(new Entity.Column(name, sqlName, type, size, generated, typeName)); } protected void addColumn(Entity.Column column) throws SQLException @@ -405,7 +406,6 @@ protected final String quoteIdentifier(String id) protected final Serializable filterValue(String columnName, Serializable value) throws SQLException { if (value != null) - { value = getModel().getFilters().getWriteFilters().filter(value); Column column = getColumn(columnName); @@ -417,7 +417,8 @@ protected final Serializable filterValue(String columnName, Serializable value) Class formalClass = SqlUtils.getSqlTypeClass(column.type); if (formalClass == null) { - throw new SQLException("unhandled SQL type: " + column.type); + getLogger().warn("unhandled SQL type (falling back to String): {} ", column.typeName); + formalClass = String.class; } Class actualClass = value.getClass(); if (formalClass != actualClass) @@ -428,6 +429,16 @@ protected final Serializable filterValue(String columnName, Serializable value) value = converter.convert(value); } } + // special mappings + if (column.type == Types.OTHER) + { + switch (getModel().getDriverInfos().getTag()) + { + case "postgresql": + value = SqlUtils.getPGObject(column.typeName, value); + break; + } + } } } } @@ -504,11 +515,12 @@ protected interface InstanceBuilder public static class Column implements Serializable { - public Column(String name, String sqlName, int type, Integer size, boolean generated) + public Column(String name, String sqlName, int type, Integer size, boolean generated, String typeName) { this.name = name; this.sqlName = sqlName; this.type = type; + this.typeName = typeName; this.size = size; this.generated = generated; } @@ -560,6 +572,7 @@ public final Serializable write(Serializable value) throws SQLException public final String name; public final String sqlName; public final int type; + public final String typeName; public final Integer size; public final boolean generated; private int index = -1; diff --git a/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java b/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java index 602cc7b..6bb79da 100644 --- a/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java +++ b/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java @@ -154,10 +154,11 @@ public List getColumns(Entity entity) throws SQLException String colSqlName = columns.getString("COLUMN_NAME"); String colName = identifiers.transformColumnName(table, colSqlName); int dataType = columns.getInt("DATA_TYPE"); + String typeName = columns.getString("TYPE_NAME"); String gen1 = columns.getString("IS_AUTOINCREMENT"); String gen2 = columns.getString("IS_GENERATEDCOLUMN"); boolean generated = "YES".equals(gen1) || "YES".equals(gen2); - ret.add(new Entity.Column(colName, colSqlName, dataType, size, generated)); + ret.add(new Entity.Column(colName, colSqlName, dataType, size, generated, typeName)); } } return ret; diff --git a/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java b/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java index 0f5e178..56142fb 100644 --- a/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java +++ b/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java @@ -20,10 +20,13 @@ */ -import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.math.BigInteger; import java.sql.ResultSet; import java.sql.ResultSetMetaData; @@ -127,6 +130,44 @@ public static List splitStatements(String query, Character identifierQuo return splitStatements(query, identifierQuoteChar, false); } + private static Constructor pgObjectCtor = null; + private static Method pgObjectSetType = null; + private static Method pgObjectSetValue = null; + + private static synchronized void initPGObjectStuff() throws SQLException + { + if (pgObjectCtor == null) + { + try + { + Class clazz = Class.forName("org.postgresql.util.PGobject"); + pgObjectCtor = clazz.getConstructor(); + pgObjectSetType = clazz.getMethod("setType", String.class); + pgObjectSetValue = clazz.getMethod("setValue", String.class); + } + catch (ClassNotFoundException|NoSuchMethodException e) + { + throw new SQLException("could not initialize PgObject accessors", e); + } + } + } + + public static Serializable getPGObject(String typeName, Serializable value) throws SQLException + { + if (pgObjectCtor == null) initPGObjectStuff(); + try + { + Serializable pgObject = (Serializable)pgObjectCtor.newInstance(); + pgObjectSetType.invoke(pgObject, typeName); + pgObjectSetValue.invoke(pgObject, String.valueOf(value)); + return pgObject; + } + catch (IllegalAccessException|InvocationTargetException|InstantiationException e) + { + throw new SQLException("could not build PgObject", e); + } + } + public enum SplitState { NORMAL, diff --git a/modality-core/src/main/java/com/republicate/modality/util/ConversionHandlerImpl.java b/modality-core/src/main/java/com/republicate/modality/util/ConversionHandlerImpl.java index 1e4ea3c..36dd8b4 100644 --- a/modality-core/src/main/java/com/republicate/modality/util/ConversionHandlerImpl.java +++ b/modality-core/src/main/java/com/republicate/modality/util/ConversionHandlerImpl.java @@ -19,12 +19,14 @@ * under the License. */ +import com.republicate.json.Json; import org.apache.commons.lang3.LocaleUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.velocity.util.introspection.IntrospectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; import java.io.Serializable; import java.text.DateFormat; import java.text.ParseException; @@ -662,7 +664,7 @@ public java.sql.Date convert(Serializable o) } catch (ParseException pe) { - logger.warn("could not parse '{}' into an iso date", o); + logger.warn("could not parse '{}' into an iso date", o, pe); return null; } } @@ -679,12 +681,43 @@ public java.sql.Timestamp convert(Serializable o) } catch (ParseException pe) { - logger.warn("could not parse '{}' into an iso timestamp", o); + logger.warn("could not parse '{}' into an iso timestamp", o, pe); return null; } } }; standardConverterMap.put(Pair.of(java.sql.Timestamp.class, String.class), stringToTimestamp); + + /* String to Json */ + + Converter stringToJson = new Converter() + { + @Override + public Json convert(Serializable o) + { + try + { + return Json.parse(String.valueOf(o)); + } + catch (IOException ioe) + { + logger.warn("could not parse '{}' into an iso timestamp", o, ioe); + return null; + } + } + }; + standardConverterMap.put(Pair.of(Json.class, String.class), stringToJson); + + /* Json to String */ + Converter jsonToString = new Converter() + { + @Override + public String convert(Serializable o) + { + return ((Json)o).toString(); + } + }; + standardConverterMap.put(Pair.of(String.class, Json.class), jsonToString); } /** From 7d6144873036f8b13bae5d13c54905655138c985 Mon Sep 17 00:00:00 2001 From: arkanovicz Date: Mon, 11 Oct 2021 17:13:16 +0200 Subject: [PATCH 03/12] Code cleanup --- modality-core/pom.xml | 14 -------------- pom.xml | 17 +++-------------- 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/modality-core/pom.xml b/modality-core/pom.xml index f87934f..9d4608d 100644 --- a/modality-core/pom.xml +++ b/modality-core/pom.xml @@ -55,20 +55,6 @@ - - - nexus-release-key - - - - org.apache.maven.plugins - maven-gpg-plugin - - - - - - diff --git a/pom.xml b/pom.xml index 1d03ef3..7aa3837 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,9 @@ under the License. velocity-tools-apiclient --> velocity-tools-model + @@ -173,20 +176,6 @@ under the License. - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - org.apache.maven.plugins maven-javadoc-plugin From fb141bfd8e03e0572d15b41c565b302f6548ea35 Mon Sep 17 00:00:00 2001 From: arkanovicz Date: Mon, 11 Oct 2021 17:14:54 +0200 Subject: [PATCH 04/12] Add getInt() methods as synonyms for getInteger() --- .../src/main/java/com/republicate/modality/Instance.java | 5 +++++ .../java/com/republicate/modality/util/ConversionUtils.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/modality-core/src/main/java/com/republicate/modality/Instance.java b/modality-core/src/main/java/com/republicate/modality/Instance.java index 948fc36..6d183c4 100644 --- a/modality-core/src/main/java/com/republicate/modality/Instance.java +++ b/modality-core/src/main/java/com/republicate/modality/Instance.java @@ -303,6 +303,11 @@ public Integer getInteger(String name) return ConversionUtils.toInteger(get(name)); } + public Integer getInt(String name) + { + return ConversionUtils.toInteger(get(name)); + } + public Long getLong(String name) { return ConversionUtils.toLong(get(name)); diff --git a/modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java b/modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java index 4e5caf8..eecbe6a 100644 --- a/modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java +++ b/modality-core/src/main/java/com/republicate/modality/util/ConversionUtils.java @@ -167,6 +167,11 @@ public static Short toShort(Object value) return null; } + public static Integer toInt(Object value) + { + return toInteger(value); + } + public static Integer toInteger(Object value) { if (value == null) From 63bdce6ec70654f98fdc6ef34866c0a22499e9bc Mon Sep 17 00:00:00 2001 From: arkanovicz Date: Mon, 11 Oct 2021 17:15:20 +0200 Subject: [PATCH 05/12] Fix dirty state handling --- .../main/java/com/republicate/modality/Instance.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modality-core/src/main/java/com/republicate/modality/Instance.java b/modality-core/src/main/java/com/republicate/modality/Instance.java index 6d183c4..9cdb8f5 100644 --- a/modality-core/src/main/java/com/republicate/modality/Instance.java +++ b/modality-core/src/main/java/com/republicate/modality/Instance.java @@ -499,11 +499,13 @@ public void putColumns(Map map, boolea if (entity == null) throw new SQLException("Instance doesn't have any entity"); entity.getColumnNames().forEach(column -> { - // null values are - Serializable value = map.get(column); - if (!skipNullInputs || value != null) + if (map.containsKey(column)) { - put(column, value); + Serializable value = map.get(column); + if (!skipNullInputs || value != null) + { + put(column, value); + } } } ); @@ -514,7 +516,7 @@ public void putColumns(Map map, boolea .filter(col -> { String colName = entity.getColumn(col).name; - return !Objects.equals(get(colName), map.get(colName)); + return map.containsKey(colName); }) .forEach(col -> dirtyFlags.set(col)); } From 957371524d8010379159982f71cf8f934624e007 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Wed, 13 Oct 2021 12:49:43 +0200 Subject: [PATCH 06/12] More generic iterator utils methods --- .../com/republicate/modality/util/IteratorUtils.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modality-core/src/main/java/com/republicate/modality/util/IteratorUtils.java b/modality-core/src/main/java/com/republicate/modality/util/IteratorUtils.java index 57279a3..e507538 100644 --- a/modality-core/src/main/java/com/republicate/modality/util/IteratorUtils.java +++ b/modality-core/src/main/java/com/republicate/modality/util/IteratorUtils.java @@ -32,14 +32,14 @@ public static List toList(Iterator iterator) * @param iterator * @return instances indexed by key column */ - public static NavigableMap toMap(String keyColumn, Iterator iterator) + public static NavigableMap toMap(String keyColumn, Iterator iterator) { - NavigableMap ret = new TreeMap<>(); + NavigableMap ret = new TreeMap<>(); while (iterator.hasNext()) { Instance instance = iterator.next(); Serializable key = instance.get(keyColumn); - Instance previous = ret.put(key, instance); + Instance previous = ret.put((T)key, instance); if (previous != null) { throw new RuntimeException("toMap(): column " + keyColumn + " is not a key"); @@ -54,13 +54,13 @@ public static NavigableMap toMap(String keyColumn, Itera * @param iterator * @return grouped instances */ - public static NavigableMap> toGroupsMap(String column, Iterator iterator) + public static NavigableMap> toGroupsMap(String column, Iterator iterator) { - NavigableMap> ret = new TreeMap<>(); + NavigableMap> ret = new TreeMap<>(); while (iterator.hasNext()) { Instance instance = iterator.next(); - Serializable value = instance.get(column); + T value = (T)instance.get(column); List lst = ret.get(value); if (lst == null) { From 2a94737fa3a5d62d6e9d7cdb4510b347933ff5b0 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Wed, 13 Oct 2021 12:50:11 +0200 Subject: [PATCH 07/12] Fix dirty flag handling --- .../com/republicate/modality/Instance.java | 40 +++++-------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/modality-core/src/main/java/com/republicate/modality/Instance.java b/modality-core/src/main/java/com/republicate/modality/Instance.java index 9cdb8f5..60dde61 100644 --- a/modality-core/src/main/java/com/republicate/modality/Instance.java +++ b/modality-core/src/main/java/com/republicate/modality/Instance.java @@ -371,7 +371,7 @@ public BitSet getDirtyFlags() public boolean isDirty() { - return dirtyFlags.cardinality() > 0; + return !persisted || dirtyFlags.cardinality() > 0; } public void refresh() throws SQLException @@ -467,17 +467,14 @@ public void putAll(Map map) } } - if (persisted) - { - // the persisted flag should be false before this point if PK changed - entity.getNonPrimaryKeyMask().stream() - .filter(col -> - { - String colName = entity.getColumn(col).name; - return map.containsKey(colName) && !Objects.equals(ConversionUtils.toString(get(colName)), ConversionUtils.toString(map.get(colName))); - }) - .forEach(col -> dirtyFlags.set(col)); - } + // the persisted flag should be false before this point if PK changed + entity.getNonPrimaryKeyMask().stream() + .filter(col -> + { + String colName = entity.getColumn(col).name; + return map.containsKey(colName) && !Objects.equals(ConversionUtils.toString(get(colName)), ConversionUtils.toString(map.get(colName))); + }) + .forEach(col -> dirtyFlags.set(col)); } super.putAll(map); } @@ -489,13 +486,6 @@ public void putColumns(Map map) throws public void putColumns(Map map, boolean skipNullInputs) throws SQLException { - /* CB TODO check PK change - Serializable[] pk = null; - if (persisted) - { - pk = getPrimaryKey(); - } - */ if (entity == null) throw new SQLException("Instance doesn't have any entity"); entity.getColumnNames().forEach(column -> { @@ -509,18 +499,6 @@ public void putColumns(Map map, boolea } } ); - if (persisted) - { - // the persisted flag should be false before this point if PK changed - entity.getNonPrimaryKeyMask().stream() - .filter(col -> - { - String colName = entity.getColumn(col).name; - return map.containsKey(colName); - }) - .forEach(col -> dirtyFlags.set(col)); - } - } protected Serializable putImpl(String key, Serializable value) From 13cbd787f01521ab51d05432bff8b7957d018bab Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Wed, 13 Oct 2021 13:07:21 +0200 Subject: [PATCH 08/12] Fix conflict side effect --- .../src/main/java/com/republicate/modality/Instance.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modality-core/src/main/java/com/republicate/modality/Instance.java b/modality-core/src/main/java/com/republicate/modality/Instance.java index 019b123..60dde61 100644 --- a/modality-core/src/main/java/com/republicate/modality/Instance.java +++ b/modality-core/src/main/java/com/republicate/modality/Instance.java @@ -308,11 +308,6 @@ public Integer getInt(String name) return ConversionUtils.toInteger(get(name)); } - public Integer getInt(String name) - { - return ConversionUtils.toInteger(get(name)); - } - public Long getLong(String name) { return ConversionUtils.toLong(get(name)); From 172f98e3c47b2f90b7a84c5aeb052e4ee2141bc6 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Sun, 7 Nov 2021 10:34:44 +0100 Subject: [PATCH 09/12] Prepare 2.0 release --- modality-api-client/pom.xml | 2 +- modality-api-server/pom.xml | 2 +- modality-core/pom.xml | 2 +- modality-examples/modality-example-bookshelf/pom.xml | 2 +- modality-examples/pom.xml | 2 +- modality-webapp-auth/pom.xml | 2 +- modality-webapp/pom.xml | 2 +- pom.xml | 2 +- velocity-tools-apiclient/pom.xml | 2 +- velocity-tools-model/pom.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modality-api-client/pom.xml b/modality-api-client/pom.xml index a78dc2b..12c9ff1 100644 --- a/modality-api-client/pom.xml +++ b/modality-api-client/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 modality-api-client diff --git a/modality-api-server/pom.xml b/modality-api-server/pom.xml index eb53c8e..696d814 100644 --- a/modality-api-server/pom.xml +++ b/modality-api-server/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 modality-api-server jar diff --git a/modality-core/pom.xml b/modality-core/pom.xml index 9d4608d..adde647 100644 --- a/modality-core/pom.xml +++ b/modality-core/pom.xml @@ -24,7 +24,7 @@ com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 modality-core diff --git a/modality-examples/modality-example-bookshelf/pom.xml b/modality-examples/modality-example-bookshelf/pom.xml index 533d0b3..d372331 100644 --- a/modality-examples/modality-example-bookshelf/pom.xml +++ b/modality-examples/modality-example-bookshelf/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality-examples - 2.0-SNAPSHOT + 2.0 modality-example-bookshelf diff --git a/modality-examples/pom.xml b/modality-examples/pom.xml index cd30750..a14ffb5 100644 --- a/modality-examples/pom.xml +++ b/modality-examples/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 modality-examples diff --git a/modality-webapp-auth/pom.xml b/modality-webapp-auth/pom.xml index 7a23539..931dbdb 100644 --- a/modality-webapp-auth/pom.xml +++ b/modality-webapp-auth/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 modality-webapp-auth diff --git a/modality-webapp/pom.xml b/modality-webapp/pom.xml index 2880776..7360bb0 100644 --- a/modality-webapp/pom.xml +++ b/modality-webapp/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 modality-webapp diff --git a/pom.xml b/pom.xml index 7aa3837..00edea8 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 pom ${project.groupId}:${project.artifactId} diff --git a/velocity-tools-apiclient/pom.xml b/velocity-tools-apiclient/pom.xml index 1e69036..9eb3bab 100644 --- a/velocity-tools-apiclient/pom.xml +++ b/velocity-tools-apiclient/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 velocity-tools-apiclient diff --git a/velocity-tools-model/pom.xml b/velocity-tools-model/pom.xml index b9f47cd..885365a 100644 --- a/velocity-tools-model/pom.xml +++ b/velocity-tools-model/pom.xml @@ -22,7 +22,7 @@ under the License. com.republicate.modality modality - 2.0-SNAPSHOT + 2.0 velocity-tools-model From eee4b84b2824398e3377c9374471481aafd7c1c9 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Wed, 22 Dec 2021 07:03:18 +0100 Subject: [PATCH 10/12] Fix some pom URLs --- modality-api-client/pom.xml | 2 +- modality-api-server/pom.xml | 2 +- modality-core/pom.xml | 2 +- modality-webapp-oauth-client/pom.xml | 2 +- modality-webapp-oauth-server/pom.xml | 2 +- pom.xml | 9 +++++---- velocity-tools-apiclient/pom.xml | 2 +- velocity-tools-model/pom.xml | 2 +- 8 files changed, 12 insertions(+), 11 deletions(-) diff --git a/modality-api-client/pom.xml b/modality-api-client/pom.xml index 12c9ff1..fcac94a 100644 --- a/modality-api-client/pom.xml +++ b/modality-api-client/pom.xml @@ -33,7 +33,7 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 diff --git a/modality-api-server/pom.xml b/modality-api-server/pom.xml index 696d814..98ed12b 100644 --- a/modality-api-server/pom.xml +++ b/modality-api-server/pom.xml @@ -31,7 +31,7 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 diff --git a/modality-core/pom.xml b/modality-core/pom.xml index adde647..b71236b 100644 --- a/modality-core/pom.xml +++ b/modality-core/pom.xml @@ -60,7 +60,7 @@ org.apache.velocity.tools velocity-tools-generic - 3.1-SNAPSHOT + ${velocity-tools.version} org.apache.commons diff --git a/modality-webapp-oauth-client/pom.xml b/modality-webapp-oauth-client/pom.xml index ba9b38f..5a732d0 100644 --- a/modality-webapp-oauth-client/pom.xml +++ b/modality-webapp-oauth-client/pom.xml @@ -34,7 +34,7 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 diff --git a/modality-webapp-oauth-server/pom.xml b/modality-webapp-oauth-server/pom.xml index 28fff96..d7957d5 100644 --- a/modality-webapp-oauth-server/pom.xml +++ b/modality-webapp-oauth-server/pom.xml @@ -34,7 +34,7 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 diff --git a/pom.xml b/pom.xml index 00edea8..9a768dd 100644 --- a/pom.xml +++ b/pom.xml @@ -55,13 +55,13 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 scm:git:git@github.com:arkanovicz/velocity-model.git scm:git:git@github.com:arkanovicz/velocity-model.git - http://arkanovicz.github.io/velocity-model/ + https://arkanovicz.github.io/modality/ @@ -69,7 +69,7 @@ under the License. Claude Brisson claude@renegat.net republicate.com - http://republicate.com + https://republicate.com @@ -87,7 +87,7 @@ under the License. republicate.com - http://republicate.com/maven2 + https://republicate.com/maven2 false @@ -181,6 +181,7 @@ under the License. maven-javadoc-plugin 3.2.0 + ${java.home}/bin/javadoc none diff --git a/velocity-tools-apiclient/pom.xml b/velocity-tools-apiclient/pom.xml index 9eb3bab..7189135 100644 --- a/velocity-tools-apiclient/pom.xml +++ b/velocity-tools-apiclient/pom.xml @@ -33,7 +33,7 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 diff --git a/velocity-tools-model/pom.xml b/velocity-tools-model/pom.xml index 885365a..c3ba35e 100644 --- a/velocity-tools-model/pom.xml +++ b/velocity-tools-model/pom.xml @@ -33,7 +33,7 @@ under the License. Apache Licence - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 From 040a19440a3ee7e2f9f674cb71c6821e53912936 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Mon, 25 Apr 2022 08:17:27 +0200 Subject: [PATCH 11/12] Add a check to protect from an NPE --- .../java/com/republicate/modality/impl/ReverseEngineer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java b/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java index 6bb79da..71ba343 100644 --- a/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java +++ b/modality-core/src/main/java/com/republicate/modality/impl/ReverseEngineer.java @@ -314,6 +314,10 @@ public List describeEnum(Entity entity, String column) throws SQLExcepti */ private List sortColumns(List ordered, List unordered, List target) { + if (ordered.size() != unordered.size() || ordered.size() != target.size()) + { + throw new ConfigurationException("FK/PK cardinality inconsistency"); + } if(ordered.size() == 1) { return target; From 5d5dc6d2318b21d1c895ab198b6f168afc9a8ca2 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Mon, 25 Apr 2022 08:33:27 +0200 Subject: [PATCH 12/12] Fix comment detection --- .../java/com/republicate/modality/sql/SqlUtils.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java b/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java index 56142fb..6d011fb 100644 --- a/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java +++ b/modality-core/src/main/java/com/republicate/modality/sql/SqlUtils.java @@ -184,12 +184,13 @@ public static List splitStatements(String query, Character identifierQuo Stack state = new Stack<>(); state.push(SplitState.NORMAL); int dollars = 0; - boolean afterHyphen = false; + Character c = null, prevChar = null; int parLevel = 0; StringBuilder currentQuery = new StringBuilder(); for (int i = 0; i < query.length(); ++i) { - Character c = query.charAt(i); + prevChar = c; + c = query.charAt(i); if(state.peek() != SplitState.COMMENT) currentQuery.append(c); switch (state.peek()) { @@ -199,16 +200,11 @@ public static List splitStatements(String query, Character identifierQuo { case '-': { - if (afterHyphen) + if (prevChar != null && prevChar == '-') { - afterHyphen = false; state.push(SplitState.COMMENT); currentQuery.delete(currentQuery.length() - 2, currentQuery.length()); } - else - { - afterHyphen = true; - } break; } case '\'':