class TransMeta extends AbstractMeta implements XMLInterface, Comparator<TransMeta>, Comparable<TransMeta>, Cloneable, ResourceExportInterface,
    RepositoryElementInterface, LoggingObjectInterface {

  public int getCacheVersion() throws KettleException {
    HashCodeBuilder hashCodeBuilder =  new HashCodeBuilder( 17, 31 )
        // info
        .append( this.getName() )
        .append( this.getTransformationType() )
        .append( this.getSizeRowset() )
        .append( this.getSleepTimeEmpty() )
        .append( this.getSleepTimeFull() )
        .append( this.isUsingUniqueConnections() )
        .append( this.isFeedbackShown() )
        .append( this.getFeedbackSize() )
        .append( this.isUsingThreadPriorityManagment() )
        .append( this.getSharedObjectsFile() )
        .append( this.isCapturingStepPerformanceSnapShots() )
        .append( this.getStepPerformanceCapturingDelay() )
        .append( this.getStepPerformanceCapturingSizeLimit() )

        .append( this.getMaxDateConnection() )
        .append( this.getMaxDateTable() )
        .append( this.getMaxDateField() )
        .append( this.getMaxDateOffset() )
        .append( this.getMaxDateDifference() )

        .append( this.getDependencies() )
        .append( this.getPartitionSchemas() )
        .append( this.getSlaveServers() )
        .append( this.getClusterSchemas() )
        .append( this.getSlaveStepCopyPartitionDistribution() )
        .append( this.isSlaveTransformation() )

        .append( this.nrTransHops() )

        // steps
        .append( this.getSteps().size() )
        .append( this.getStepNames() )

        // hops
        .append( this.hops );

    List<StepMeta> steps = this.getSteps();

    for ( StepMeta step : steps ) {
      hashCodeBuilder
          .append( step.getName() )
          .append( step.getStepMetaInterface().getXML() )
          .append( step.getClusterSchema() )
          .append( step.getRemoteInputSteps() )
          .append( step.getRemoteOutputSteps() )
          .append( step.isDoingErrorHandling() );
    }
    return hashCodeBuilder.toHashCode();
  }

  public  TransMeta();
  public  TransMeta( VariableSpace parent );
  public  TransMeta( String filename, String name );
  @Deprecated public  TransMeta( String filename, String name, String[] arguments );
  public  TransMeta( String fname );
  public  TransMeta( String fname, VariableSpace parentVariableSpace );
  public  TransMeta( String fname, boolean setInternalVariables );
  public  TransMeta( String fname, Repository rep );
  public  TransMeta( String fname, Repository rep, boolean setInternalVariables );
  public  TransMeta( String fname, Repository rep, boolean setInternalVariables, VariableSpace parentVariableSpace );
  public  TransMeta( String fname, Repository rep, boolean setInternalVariables, VariableSpace parentVariableSpace,
      OverwritePrompter prompter );
  public  TransMeta( String fname, IMetaStore metaStore, Repository rep, boolean setInternalVariables,
                    VariableSpace parentVariableSpace, OverwritePrompter prompter );
  public  TransMeta( InputStream xmlStream, Repository rep, boolean setInternalVariables,
                    VariableSpace parentVariableSpace, OverwritePrompter prompter );
  public  TransMeta( Node transnode, Repository rep );

}