diff --git a/java/src/main/java/com/genexus/GxUserType.java b/java/src/main/java/com/genexus/GxUserType.java index e3a991116..a54218871 100644 --- a/java/src/main/java/com/genexus/GxUserType.java +++ b/java/src/main/java/com/genexus/GxUserType.java @@ -1,9 +1,13 @@ package com.genexus; import com.genexus.xml.GXXMLSerializable; +import java.util.HashMap; +import json.org.json.JSONObject; +import org.apache.logging.log4j.Logger; public abstract class GxUserType extends GXXMLSerializable implements Cloneable, java.io.Serializable, IGXAssigned { + private static Logger log = org.apache.logging.log4j.LogManager.getLogger(GxUserType.class); public GxUserType(ModelContext context, String type) { @@ -28,4 +32,22 @@ public boolean getIsAssigned() { public void setIsAssigned(boolean bAssigned) { bIsAssigned = bAssigned; } + + protected Object getJsonObjectFromHashMap( Object userType) { + JSONObject jsonObj = new JSONObject(); + try { + if (userType instanceof HashMap) + jsonObj = new json.org.json.JSONObject((HashMap)userType); + } + catch(Exception e) { + log.error("Could not create Json Object", e); + } + return jsonObj; + } + + protected void setHashMapFromJson(String json) { + fromjson(json); + } + + protected void fromjson(String json){} } diff --git a/java/src/main/java/com/genexus/util/GXHashMap.java b/java/src/main/java/com/genexus/util/GXHashMap.java new file mode 100644 index 000000000..b44ccfa49 --- /dev/null +++ b/java/src/main/java/com/genexus/util/GXHashMap.java @@ -0,0 +1,85 @@ +package com.genexus.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.logging.log4j.Logger; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; +import java.util.Vector; + +public class GXHashMap extends HashMap { + private static Logger log = org.apache.logging.log4j.LogManager.getLogger(GXHashMap.class); + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public void setHashMap(GXHashMap hashMap) { + putAll(hashMap); + } + + public boolean get(K key, V[] value) { + if (containsKey(key)) { + value[0] = get(key); + return true; + } + return false; + } + + public boolean removeKey(K key) { + if (containsKey(key)) { + if (remove(key) != null) + return true; + } + return false; + } + + public void removeKeys(Vector keys) { + for (int i = 0; i < keys.size(); i++) { + removeKey(keys.get(i)); + } + } + + public void removeAll(GXHashMap hashMap) { + for (Map.Entry entry : hashMap.entrySet()) { + removeKey(entry.getKey()); + } + } + + public String toJson() { + try { + return objectMapper.writeValueAsString(this); + } + catch (JsonProcessingException e) { + log.error("Could not obtain json form Dictionary", e); + return ""; + } + } + + public void fromJson(String json) { + Type type = new ParameterizedType() { + @Override + public Type[] getActualTypeArguments() { + return ((ParameterizedType) getClass().getEnclosingClass().getGenericSuperclass()).getActualTypeArguments(); + } + + @Override + public Type getRawType() { + return HashMap.class; + } + + @Override + public Type getOwnerType() { + return null; + } + }; + + try { + this.clear(); + this.putAll(objectMapper.readValue(json, objectMapper.getTypeFactory().constructType(type))); + } + catch (JsonProcessingException e) { + log.error("Could not set Dictionary from json", e); + } + } +}