diff --git a/common/src/main/java/com/genexus/GxSilentTrnSdt.java b/common/src/main/java/com/genexus/GxSilentTrnSdt.java index 30ccf2764..83c97896a 100644 --- a/common/src/main/java/com/genexus/GxSilentTrnSdt.java +++ b/common/src/main/java/com/genexus/GxSilentTrnSdt.java @@ -2,15 +2,23 @@ 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; -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 { - + 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(); @@ -262,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)) @@ -272,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); @@ -288,13 +296,43 @@ public void setvalue(String name, String value) { } } + public void copy(GxSilentTrnSdt source) + { + try + { + Class me = getClass(); + HashMap setMethods = new HashMap<>(); + HashMap getMethods = new HashMap<>(); + for(java.lang.reflect.Method method : me.getDeclaredMethods()) + { + 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); + } + } 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)