Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package pt.webdetails.cda.cache;
  
 import java.util.List;
 
 import  org.apache.commons.codec.binary.Base64;
 import  org.pentaho.reporting.engine.classic.core.ParameterDataRow;
 
 
 public class TableCacheKey implements Serializable
   {
 
     private static final long serialVersionUID = 5L; //1->2 only hash of connection kept; 2->3 file/dataAccessId; 4->5 hazelcast version
     
     private int connectionHash;
     private String query;
     //private ParameterDataRow parameterDataRow;
     private Parameter[] parameters;
     
     private Serializable extraCacheKey;

    
For serialization
 
     protected TableCacheKey()
     {
     }
 
 
     public TableCacheKey(final Connection connectionfinal String query,
         final List<Parameterparametersfinal Serializable extraCacheKey)
             //final ParameterDataRow parameterDataRow, final 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.parameterDataRow = parameterDataRow;
       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
    {
      //connection
       = in.readInt();
      //query
       = (Stringin.readObject();
      //parameterDataRow
//      try
//      {          
          //to be hazelcast compatible needs to serialize EXACTLY the same
          //binary comparison/hash will be used
          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;
          //parameterDataRow = Parameter.createParameterDataRowFromParameters(params);
//      }
//      catch (InvalidParameterException e)
//      {
//        parameters = null;
//      }
       = (Serializablein.readObject();
    }
    //Hazelcast will use serialized version to perform comparisons and hashcodes
    private void writeObject(java.io.ObjectOutputStream outthrows IOException
    {
      out.writeInt();
      out.writeObject();
     // out.writeObject(createParametersFromParameterDataRow(parameterDataRow));
      
      //new parameters write
  //    Parameter[] params = createParametersFromParameterDataRow(parameterDataRow);
      
//      Arrays.sort(params, new Comparator<Parameter> () {
//        public int compare(Parameter o1, Parameter o2) {
//         return o1.getName().compareTo(o2.getName()); 
//        }
//      });
      
      out.writeInt(.);
      for(Parameter param : ){
        param.writeObject(out);     
      }
      
      out.writeObject();
//      out.writeObject(cdaSettingsId);//information only, not used in hash/equals
//      out.writeObject(dataAccessId);//information only, not used in hash/equals
    }
    
    
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)
//      
//      if (parameterDataRow != null ? !Arrays.equals(createParametersFromParameterDataRow(parameterDataRow),createParametersFromParameterDataRow(that.parameterDataRow)) 
//                                     : that.parameterDataRow != 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 + (parameterDataRow != null ? Arrays.hashCode(createParametersFromParameterDataRow(parameterDataRow)) : 0);
      result = 31 * result + ( != null ? Arrays.hashCode() : 0);
      result = 31 * result + ( != null ? .hashCode() : 0);
      return result;
    }
    
//    public String getDataAccessId(){
//      return this.dataAccessId;
//    }
//    
//    public String getCdaSettingsId(){
//      return this.cdaSettingsId;
//    }
    
    
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