Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this file,
   * You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  package pt.webdetails.cda.cache;
  
 import java.util.List;
 
 import  org.apache.commons.codec.binary.Base64;
 import  org.apache.commons.lang.StringUtils;
 import  org.pentaho.reporting.engine.classic.core.ParameterDataRow;
 
 
 public class TableCacheKey implements Serializable
   {
 
     private static final long serialVersionUID = 5L; //5: hazelcast version
     
     private int connectionHash;
     private String query;
     private Parameter[] parameters;
     
     private Serializable extraCacheKey;

    
For serialization
 
     protected TableCacheKey()
     {
     }
 
 
     public TableCacheKey(final Connection connectionfinal String query,
         final List<Parameterparametersfinal Serializable extraCacheKey)
     {
       if (connection == null)
       {
         throw new NullPointerException();
       }
       if (query == null)
       {
         throw new NullPointerException();
       }
       if (parameters == null)
       {
         throw new NullPointerException();
       }
 
       this. = connection.hashCode();
       this. = query;
       this. = parameters.toArray(new Parameter[parameters.size()]); //createParametersFromParameterDataRow(parameterDataRow);
       this. = extraCacheKey;
     }
 
     
     public int getConnectionHash() {
       return ;
     }
 
 
     public void setConnectionHash(int connectionHash) {
       this. = connectionHash;
     }
 
 
     public String getQuery() {
       return ;
     }
 
 
     public void setQuery(String query) {
       this. = query;
     }
 
 
 //    public ParameterDataRow getParameterDataRow() {
 //      return Parameter.createParameterDataRowFromParameters(parameters);
 //    }
     
     public Parameter[] getParameters(){
       return ;
     }
 
 
     public void setParameterDataRow(ParameterDataRow parameterDataRow) {
       //this.parameterDataRow = parameterDataRow;
       this. = createParametersFromParameterDataRow(parameterDataRow);
    }
    public Object getExtraCacheKey() {
      return ;
    }
    public void setExtraCacheKey(Serializable extraCacheKey) {
      this. = extraCacheKey;
    }
    //Hazelcast will use serialized version to perform comparisons and hashcodes
    {
      //to be hazelcast compatible needs to serialize EXACTLY the same
      //binary comparison/hash will be used
      
      //connection
       = in.readInt();
      //query
       = (Stringin.readObject();
      int len = in.readInt();
      Parameter[] params = new Parameter[len];
      
      for(int i =0; i < params.lengthi++)
      {
        Parameter param = new Parameter();
        param.readObject(in);
        params[i] = param;
      }
       = params;
       = (Serializablein.readObject();
    }
    //Hazelcast will use serialized version to perform comparisons and hashcodes
    private void writeObject(java.io.ObjectOutputStream outthrows IOException
    {
      //to be hazelcast compatible needs to serialize EXACTLY the same
      //binary comparison/hash will be used
      
      out.writeInt();
      out.writeObject();
      
      out.writeInt(.);
      for(Parameter param : ){
        param.writeObject(out);     
      }
      
      out.writeObject();
    }
    
    
Serialize as printable String.
      ByteArrayOutputStream keyStream = new ByteArrayOutputStream();
      ObjectOutputStream objStream = new ObjectOutputStream(keyStream);
      cacheKey.writeObject(objStream);
      String identifier = new String(Base64.encodeBase64(keyStream.toByteArray()), "UTF-8");
      return identifier;
    }
    
    

See also:
TableCacheKey.getTableCacheKeyAsString(TableCacheKey)
      ByteArrayInputStream keyStream = new ByteArrayInputStream( Base64.decodeBase64(encodedCacheKey.getBytes()));
      ObjectInputStream objStream = new ObjectInputStream(keyStream);   
      TableCacheKey cacheKey = new TableCacheKey();
      cacheKey.readObject(objStream);
      return cacheKey;
    }
    public boolean equals(final Object o)
    {
      if (this == o)
      {
        return true;
      }
      if (o == null || getClass() != o.getClass())
      {
        return false;
      }
      final TableCacheKey that = (TableCacheKeyo;
      if( != that.connectionHash){
        return false;
      }
      if( != null ? !Arrays.equals(,that.parameters) : that.parameters != null)
      {
        return false;
      }
      if ( != null ? !.equals(that.query) : that.query != null)
      {
        return false;
      }
      if ( != null ? !.equals(that.extraCacheKey) : that.extraCacheKey != null)
      {
        return false;
      }
      return true;
    }
    @Override
    public int hashCode()
    {
      int result = ;
      result = 31 * result + ( != null ? .hashCode() : 0);
      result = 31 * result + ( != null ? Arrays.hashCode() : 0);
      result = 31 * result + ( != null ? .hashCode() : 0);
      return result;
    }
    
    @Override
    public String toString(){
      return 
          TableCacheKey.class.getName() + " [" + hashCode() + "]\n" +
          "\tConnectionHash:[" + getConnectionHash() + "]\n" +
          "\tQuery:[" + getQuery() + "]\n" +
          "\tParameters: [" + StringUtils.join(getParameters(), ", ") + "]\n" +
          "\tExtra: [" + getExtraCacheKey() + "]\n";
    }
    
    
for serialization
    private static Parameter[] createParametersFromParameterDataRow(final ParameterDataRow row)
    {
      ArrayList<Parameterparameters = new ArrayList<Parameter>();
      if(row != nullfor (String name : row.getColumnNames())
      {
        Object value = row.get(name);
        Parameter param = new Parameter (namevalue != null ? value : null);
        Parameter.Type type = Parameter.Type.inferTypeFromObject(value);
        param.setType(type);
        parameters.add(param);
      }
      Parameter[] params = parameters.toArray(new Parameter[parameters.size()]);
      //so comparisons will not fail when parameters are added in different order
      Arrays.sort(paramsnew Comparator<Parameter> () {
        public int compare(Parameter o1Parameter o2) {
         return o1.getName().compareTo(o2.getName()); 
        }
      });
      return params;
    }
   
New to GrepCode? Check out our FAQ X