From ba701f07827538e630461976ecea1fc1285accd4 Mon Sep 17 00:00:00 2001 From: cmurialdo Date: Wed, 26 Oct 2022 10:07:35 -0300 Subject: [PATCH 1/3] Add copy method for GxSilentTrnSdt. --- .../main/java/com/genexus/GxSilentTrnSdt.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/genexus/GxSilentTrnSdt.java b/common/src/main/java/com/genexus/GxSilentTrnSdt.java index 30ccf2764..8f9e815ae 100644 --- a/common/src/main/java/com/genexus/GxSilentTrnSdt.java +++ b/common/src/main/java/com/genexus/GxSilentTrnSdt.java @@ -2,6 +2,8 @@ import com.genexus.ModelContext; import com.genexus.common.interfaces.IPendingEventHelper; import com.genexus.common.interfaces.SpecificImplementation; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; import com.genexus.util.GXProperties; import java.io.InputStream; @@ -10,7 +12,7 @@ public class GxSilentTrnSdt extends com.genexus.xml.GXXMLSerializable { - + public static final ILogger logger = LogManager.getLogger(GxSilentTrnSdt.class); IPendingEventHelper pendingHelper; GXProperties dirties = new GXProperties(); @@ -288,6 +290,20 @@ public void setvalue(String name, String value) { } } + public void copy(GxSilentTrnSdt source) + { + try + { + Class me = getClass(); + for(java.lang.reflect.Field field : me.getDeclaredFields()) + { + field.set(this, field.get(source)); + } + }catch(Exception e) + { + logger.fatal(e.getMessage(), e); + } + } public String getvalue(String name) { From 870c20fdfdcca1962fa498380620d0bb4c48f7b9 Mon Sep 17 00:00:00 2001 From: cmurialdo Date: Wed, 26 Oct 2022 10:52:08 -0300 Subject: [PATCH 2/3] In copy method, take field in the super class instead of in GxSilentTrnSdt class. --- common/src/main/java/com/genexus/GxSilentTrnSdt.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/genexus/GxSilentTrnSdt.java b/common/src/main/java/com/genexus/GxSilentTrnSdt.java index 8f9e815ae..6b9a5af4e 100644 --- a/common/src/main/java/com/genexus/GxSilentTrnSdt.java +++ b/common/src/main/java/com/genexus/GxSilentTrnSdt.java @@ -294,8 +294,8 @@ public void copy(GxSilentTrnSdt source) { try { - Class me = getClass(); - for(java.lang.reflect.Field field : me.getDeclaredFields()) + Class superClass = source.getClass(); + for(java.lang.reflect.Field field : superClass.getDeclaredFields()) { field.set(this, field.get(source)); } From 375db75e1cd863f4f4aaf38f35c02b39593393a6 Mon Sep 17 00:00:00 2001 From: cmurialdo Date: Wed, 26 Oct 2022 11:58:46 -0300 Subject: [PATCH 3/3] Improve copy to only iterate the public methods set/get --- .../main/java/com/genexus/GxSilentTrnSdt.java | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/com/genexus/GxSilentTrnSdt.java b/common/src/main/java/com/genexus/GxSilentTrnSdt.java index 6b9a5af4e..83c97896a 100644 --- a/common/src/main/java/com/genexus/GxSilentTrnSdt.java +++ b/common/src/main/java/com/genexus/GxSilentTrnSdt.java @@ -7,12 +7,18 @@ import com.genexus.util.GXProperties; import java.io.InputStream; -import java.io.StringWriter; +import java.io.StringWriter; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.HashSet; + import com.genexus.xml.GXXMLSerializer; public class GxSilentTrnSdt extends com.genexus.xml.GXXMLSerializable { - public static final ILogger logger = LogManager.getLogger(GxSilentTrnSdt.class); + static final ILogger logger = LogManager.getLogger(GxSilentTrnSdt.class); + static final String SET_METHOD_PREFIX = "setgxTv_"; + static final String GET_METHOD_PREFIX = "getgxTv_"; IPendingEventHelper pendingHelper; GXProperties dirties = new GXProperties(); @@ -264,7 +270,7 @@ public void setvalue(String name, String value) try { Class me = getClass(); - String methodName = "setgxTv_" + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + String methodName = SET_METHOD_PREFIX + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); for(java.lang.reflect.Method method : me.getMethods()) { if(method.getName().equals(methodName)) @@ -274,7 +280,7 @@ public void setvalue(String name, String value) { if(GXSimpleCollection.class.isAssignableFrom(parmTypes[0])) { - String methodNameGet = "getgxTv_" + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + String methodNameGet = GET_METHOD_PREFIX + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); GXSimpleCollection col = (GXSimpleCollection)me.getMethod(methodNameGet, new Class[]{}).invoke(this, (Object[])null); col.removeAllItems(); col.fromJSonString(value); @@ -294,11 +300,27 @@ public void copy(GxSilentTrnSdt source) { try { - Class superClass = source.getClass(); - for(java.lang.reflect.Field field : superClass.getDeclaredFields()) + Class me = getClass(); + HashMap setMethods = new HashMap<>(); + HashMap getMethods = new HashMap<>(); + for(java.lang.reflect.Method method : me.getDeclaredMethods()) { - field.set(this, field.get(source)); + String methodName = method.getName(); + if(methodName.startsWith(SET_METHOD_PREFIX)) + { + setMethods.put(methodName, method); + }else if (methodName.startsWith(GET_METHOD_PREFIX)){ + getMethods.put(methodName, method); + } } + for(java.lang.reflect.Method setMethod : setMethods.values()) { + String getMethod = setMethod.getName().replace(SET_METHOD_PREFIX, GET_METHOD_PREFIX); + if (getMethods.containsKey(getMethod)) { + Object value = getMethods.get(getMethod).invoke(source, (Object[]) null); + setMethod.invoke(this, new Object[]{value}); + } + } + }catch(Exception e) { logger.fatal(e.getMessage(), e); @@ -310,7 +332,7 @@ public String getvalue(String name) try { Class me = getClass(); - String methodName = "getgxTv_" + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + String methodName = GET_METHOD_PREFIX + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); Object obj = me.getMethod(methodName, new Class[]{}).invoke(this, (Object[])null); if(obj instanceof GXSimpleCollection)