All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.genexus.db.CacheKey Maven / Gradle / Ivy

Go to download

Core classes for the runtime used by Java and Android apps generated with GeneXus

There is a newer version: 4.7.3
Show newest version
package com.genexus.db;

import java.io.Serializable;
import java.util.Date;

import com.genexus.GXutil;


@SuppressWarnings("serial")
public class CacheKey implements Serializable
{
	private String key;
	private Object []parms;

	public CacheKey()
	{
	}
	public CacheKey(String key, Object [] parms)
	{
		this.key = key;
		this.parms = parms;
	}
		
	public String getKey()
	{
		return key;
	}
	
	public Object [] getParameters()
	{
		return parms;
	}	
	
	public int hashCode()
	{
		return key.hashCode();
	}
	
	/** Este método retorna un hash sobre los parametros
	 * Sirve para que en el equals cuando se utiliza un
	 * DataStoreProvider remoto no se deba comparar todos
	 * los bytes del parametro, primero comparamos el hash y si 
	 * ya son distintos salimos.
	 */
	private Integer paramsHash = null;
	protected int paramsHashCode()
	{
		if(paramsHash == null)
		{ // Si es la primera vez que se llama a paramsHash, calculo el hash
			int hash = 0;
			if(parms != null)
			{
				for(int i = 0; i < parms.length; i++)
				{
					if(parms[i] instanceof byte[])
					{
						int len = ((byte[])parms[i]).length;
						byte [] temp = (byte[])parms[i];
						for(int j = 0; j < len; j++)
						{ 
							hash ^= temp[j];
							hash <<= 1;
						}
					}
					else
					{
						hash ^= parms[i].hashCode();
					}
				}
			}
			paramsHash = new Integer(hash);
		}
		return paramsHash.intValue();
	}
	
	private String stringKey = null;
	@Override
	public String toString()
	{
		StringBuilder str = new StringBuilder();
		if(stringKey == null)
		{
			if(parms != null)
			{
				for(int i = 0; i < parms.length; i++)
				{
					if(parms[i] instanceof byte[])
					{
						
						int len = ((byte[])parms[i]).length;
						byte [] temp = (byte[])parms[i];
						for(int j = 0; j < len; j++)
						{ 
							str.append(Byte.toString(temp[j]));
						}
					}
					else if (parms[i] instanceof String)
					{
						str.append(parms[i]);
						str.append(((String)parms[i]).length());
					}
					else if (parms[i] instanceof Date)
					{
						str.append(GXutil.DateTimeToUTC((Date) parms[i]));
					}
					else
					{
						str.append(parms[i].toString());
					}
					str.append(',');
				}
			}
			str.append(key);
			stringKey = str.toString();
		}
		return stringKey;
	}

	public boolean equals(Object o)
	{
		if(!(o instanceof CacheKey))
		{
			return false;
		}
		CacheKey comp = (CacheKey)o;
		
		// Primero que nada comparamos con la key
		if(!key.equalsIgnoreCase(comp.key))
		{
			return false;
		}
		
		if(paramsHashCode() != comp.paramsHashCode())
		{ // Si el hash code de los parametros tampoco coincide
			return false;
		}
		
		// Ok, el hashcode coincidio, ahora debo ver si los parms son iguales
		if(parms == null)
		{ // Si la key no tiene parametros...
			return (comp.parms == null);
		}
		else
		{ // Si la key tiene parametros
			if(comp.parms == null || parms.length != comp.parms.length)
			{ // Chequeo que la cantidad de parametros sea la misma
				return false;
			}
		}
		return toString().equals(comp.toString());
	}		
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy