Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion common/src/main/java/com/genexus/GXBaseCollection.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class GXBaseCollection<T extends GXXMLSerializable> extends GXSimpleColle
private static final long serialVersionUID = 1L;
public GXBaseCollection()
{
super();
}

public GXBaseCollection(Class<T> elementsType, String elementsName, String containedXmlNamespace)
Expand All @@ -42,7 +43,7 @@ public GXBaseCollection(Class<T> elementsType, String elementsName, String conta

public GXBaseCollection(Class<T> elementsType, String elementsName, String containedXmlNamespace, Vector<T> data, int remoteHandle)
{

super();
this.elementsType = elementsType;
this.elementsName = elementsName;
xmlElementsName = elementsName;
Expand Down
82 changes: 82 additions & 0 deletions common/src/main/java/com/genexus/GXBaseList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.genexus;

import java.io.Serializable;
import java.util.Vector;
import com.genexus.internet.IGxJSONAble;
import com.genexus.internet.IGxJSONSerializable;

public abstract class GXBaseList<T> extends Vector<T> implements Serializable, IGxJSONAble, IGxJSONSerializable, IGXAssigned
{
private boolean IsAssigned;

public GXBaseList()
{
IsAssigned = true;
}

public boolean getIsAssigned()
{
return this.IsAssigned;
}
public void setIsAssigned(boolean bAssigned)
{
this.IsAssigned = bAssigned;
}
public void removeAllItems()
{
super.clear();
IsAssigned = true;
}
public byte removeItem(int index)
{
T item = null;
if(index > 0 && index <= size())
{
item = super.remove((int)index - 1);//Vector.remove(int)
IsAssigned = true;
return (byte)1;
}
return (byte)0;
}
public byte removeElement(double index)
{
if(index > 0 && index <= size())
{
super.remove((int)index - 1);//Vector.remove(int)
IsAssigned = true;
return (byte)1;
}
else
{
return (byte)0;
}
}

@SuppressWarnings("unchecked")
public void addObject(Object obj){
super.add((T)obj);
IsAssigned = true;
}
@SuppressWarnings("unchecked")
public void add(Object item, int index)
{
if(index < 1 || index > size())
{
add((T)item); //this.add, GXBCLevelCollection.add for example
}
else
{
super.add(index - 1, (T)item); //Vector insert element
IsAssigned = true;
}
}
@SuppressWarnings("unchecked")
public void addBase( Object item)
{
super.add((T)item);
IsAssigned = true;
}
}



56 changes: 3 additions & 53 deletions common/src/main/java/com/genexus/GXSimpleCollection.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import org.simpleframework.xml.*;

@Root(name="Collection")
public class GXSimpleCollection<T> extends Vector<T> implements Serializable, IGxJSONAble, IGxJSONSerializable {
public class GXSimpleCollection<T> extends GXBaseList<T> {

@ElementList(entry="item",inline=true)
GXSimpleCollection<T> list;
Expand All @@ -50,6 +50,7 @@ public class GXSimpleCollection<T> extends Vector<T> implements Serializable, IG

public GXSimpleCollection()
{
super();
}

public GXSimpleCollection(Class<T> elementsType, String elementsName, String containedXmlNamespace)
Expand All @@ -69,6 +70,7 @@ public GXSimpleCollection(Class<T> elementsType, String elementsName, String con

public GXSimpleCollection(Class<T> elementsType, String elementsName, String containedXmlNamespace, Vector data, int remoteHandle)
{
super();
this.elementsType = elementsType;
this.elementsName = elementsName;
xmlElementsName = elementsName;
Expand Down Expand Up @@ -432,11 +434,6 @@ public Object currentItem()

//-- Este add se usa cuando se quiere agregar a las lineas de un BC sin usar la logica de manteniomiento del estado
// de la linea
@SuppressWarnings("unchecked")
public void addBase( Object item)
{
super.add((T)item);
}
protected String getMethodName(boolean isGet, String method)
{
String getName = elementsType.getName();
Expand All @@ -456,19 +453,6 @@ public void addInternal(Object item)
super.add((T)item);
}

@SuppressWarnings("unchecked")
public void add(Object item, int index)
{
if(index < 1 || index > size())
{
add((T)item); //this.add, GXBCLevelCollection.add for example
}
else
{
super.add(index - 1, (T)item); //Vector insert element
}
}

public void add(byte item)
{
addInternal(new Byte(item));
Expand Down Expand Up @@ -520,11 +504,6 @@ public void addIntegralConstant(double item)
}
}

@SuppressWarnings("unchecked")
public void addObject(Object obj){
super.add((T)obj);
}

public void add(long item)
{
addInternal(new Long(item));
Expand Down Expand Up @@ -602,11 +581,6 @@ public void add(double item, int index)
addIntegralConstant(item, index);
}

public void removeAllItems()
{
super.clear();
}

public void clearCollection()
{
removeAllItems();
Expand Down Expand Up @@ -694,30 +668,6 @@ public boolean remove(char item)
return remove(new Character(item));
}

public byte removeItem(int index)
{
T item = null;
if(index > 0 && index <= size())
{
item = super.remove((int)index - 1);//Vector.remove(int)
return (byte)1;
}
return (byte)0;
}

public byte removeElement(double index)
{
if(index > 0 && index <= size())
{
super.remove((int)index - 1);//Vector.remove(int)
return (byte)1;
}
else
{
return (byte)0;
}
}

/** Ordena la Collection de acuerdo a un proc pasado por parametro
* El proc tiene que recibir como parms
* parm(IN: &SDT1, IN: &SDT2, OUT: INT)
Expand Down
6 changes: 6 additions & 0 deletions common/src/main/java/com/genexus/IGXAssigned.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.genexus;
public interface IGXAssigned
{
boolean getIsAssigned();
void setIsAssigned(boolean bAssigned);
}
31 changes: 31 additions & 0 deletions java/src/main/java/com/genexus/GxUserType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.genexus;

import com.genexus.xml.GXXMLSerializable;

public abstract class GxUserType extends GXXMLSerializable implements Cloneable, java.io.Serializable, IGXAssigned
{

public GxUserType(ModelContext context, String type)
{
super(-1, context, type);
}

public GxUserType(int remoteHandle, ModelContext context, String type)
{
super( remoteHandle, context, type);
}

boolean bIsAssigned = true;

public abstract String getJsonMap( String value );

@Override
public boolean getIsAssigned() {
return bIsAssigned;
}

@Override
public void setIsAssigned(boolean bAssigned) {
bIsAssigned = bAssigned;
}
}
28 changes: 24 additions & 4 deletions java/src/main/java/com/genexus/internet/HttpAjaxContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
import java.util.Hashtable;
import java.util.Stack;

import com.genexus.IGXAssigned;
import com.genexus.diagnostics.core.ILogger;
import com.genexus.diagnostics.core.LogManager;
import com.genexus.webpanels.DynAjaxEventContext;
import com.genexus.webpanels.GXWebPanel;
import com.genexus.webpanels.GXWebRow;

import json.org.json.IJsonFormattable;
Expand Down Expand Up @@ -44,8 +47,13 @@ public abstract class HttpAjaxContext
public void setAjaxOnSessionTimeout( String ajaxOnSessionTimeout){ this._ajaxOnSessionTimeout = ajaxOnSessionTimeout;}
public String ajaxOnSessionTimeout(){ return _ajaxOnSessionTimeout;}

DynAjaxEventContext dynAjaxEventContext = new DynAjaxEventContext();

public abstract boolean isMultipartContent();
public DynAjaxEventContext getDynAjaxEventContext() {
return dynAjaxEventContext;
}

public abstract boolean isMultipartContent();
public abstract void ajax_rsp_assign_prop_as_hidden(String Control, String Property, String Value);

public abstract boolean isSpaRequest();
Expand Down Expand Up @@ -319,16 +327,28 @@ public void ajax_rsp_assign_attri( String CmpContext, boolean IsMasterPage, Stri
}
}

public void ajax_rsp_assign_sdt_attri( String CmpContext, boolean IsMasterPage, String AttName, Object SdtObj)
private boolean isUndefinedOutParam(String key, Object SdtObj) {
if (!dynAjaxEventContext.isInputParm(key))
{
if (SdtObj instanceof IGXAssigned)
{
return !((IGXAssigned)SdtObj).getIsAssigned();
}
}
return false;
}


public void ajax_rsp_assign_sdt_attri( String CmpContext, boolean IsMasterPage, String AttName, Object SdtObj)
{
if (isJsOutputEnabled)
{
if (!isSpaRequest() || (isSpaRequest() && (CmpContext == null || CmpContext.trim().length() == 0)))
{
try {
JSONObject obj = getGxObject(AttValues, CmpContext, IsMasterPage);
if (obj != null)
{
if (obj != null && (dynAjaxEventContext.isParmModified(AttName, SdtObj) || !isUndefinedOutParam( AttName, SdtObj)))
{
if (SdtObj instanceof IGxJSONAble)
obj.put(AttName, ((IGxJSONAble)SdtObj).GetJSONObject());
else
Expand Down
48 changes: 48 additions & 0 deletions java/src/main/java/com/genexus/webpanels/DynAjaxEventContext.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.genexus.webpanels;

import com.genexus.GXutil;
import com.genexus.internet.IGxJSONSerializable;
import json.org.json.JSONArray;

import java.util.HashSet;
import java.util.Hashtable;

public class DynAjaxEventContext implements GXWebPanel.IDynAjaxEventContext {
JSONArray inParmsMetadata;
HashSet<String> inParmsMetadataHash = new HashSet<String>();
JSONArray outParmsMetadata;
HashSet<String> outParmsMetadataHash = new HashSet<String>();
private Hashtable<String, String> inParmsHashValue = new Hashtable<String, String>();

public void ClearParmsMetadata() {
inParmsMetadata = new JSONArray();
inParmsMetadataHash = new HashSet<String>();
outParmsMetadata = new JSONArray();
outParmsMetadataHash = new HashSet<String>();
}

public boolean isInputParm(String key) {
return inParmsMetadataHash.contains(key);
}

public void Clear() {
inParmsHashValue.clear();
}

public void SetParmHash(String fieldName, Object value) {
IGxJSONSerializable jsonValue = (value instanceof IGxJSONSerializable) ? (IGxJSONSerializable) value : null;
if (jsonValue != null) {
inParmsHashValue.put(fieldName, GXutil.getHash(jsonValue.toJSonString()));
}
}

public boolean isParmModified(String fieldName, Object value) {
IGxJSONSerializable jsonValue = (value instanceof IGxJSONSerializable) ? (IGxJSONSerializable) value : null;
if (value != null) {
if (!inParmsHashValue.containsKey(fieldName))
return true;
return !GXutil.getHash(jsonValue.toJSonString()).equals(inParmsHashValue.get(fieldName));
}
return true;
}
}
Loading