Open Source Repository

Home /hibernate/hibernate-3.2.7.ga | Repository Home



org/hibernate/pretty/MessageHelper.java
//$Id: MessageHelper.java 9561 2006-03-07 14:17:16Z [email protected] $
package org.hibernate.pretty;

import java.io.Serializable;

import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.type.Type;

/**
 * MessageHelper methods for rendering log messages relating to managed
 * entities and collections typically used in log statements and exception
 * messages.
 *
 * @author Max Andersen, Gavin King
 */
public final class MessageHelper {

  private MessageHelper() {
  }


  // entities ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  /**
   * Generate an info message string relating to a particular entity,
   * based on the given entityName and id.
   *
   * @param entityName The defined entity name.
   * @param id The entity id value.
   * @return An info string, in the form [FooBar#1].
   */
  public static String infoString(String entityName, Serializable id) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if( entityName == null ) {
      s.append( "<null entity name>" );
    }
    else {
      s.append( entityName );
    }
    s.append( '#' );

    if ( id == null ) {
      s.append( "<null>" );
    }
    else {
      s.append( id );
    }
    s.append( ']' );

    return s.toString();
  }

  /**
   * Generate an info message string relating to a particular entity.
   *
   * @param persister The persister for the entity
   * @param id The entity id value
   * @param factory The session factory
   * @return An info string, in the form [FooBar#1]
   */
  public static String infoString(
      EntityPersister persister, 
      Object id, 
      SessionFactoryImplementor factory) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    Type idType;
    if( persister == null ) {
      s.append( "<null EntityPersister>" );
      idType = null;
    }
    else {
      s.append( persister.getEntityName() );
      idType = persister.getIdentifierType();
    }
    s.append( '#' );

    if ( id == null ) {
      s.append( "<null>" );
    }
    else {
      if ( idType == null ) {
        s.append( id );
      }
      else {
        s.append( idType.toLoggableString( id, factory ) );
      }
    }
    s.append( ']' );

    return s.toString();

  }

  /**
   * Generate an info message string relating to a particular entity,.
   *
   * @param persister The persister for the entity
   * @param id The entity id value
   * @param identifierType The entity identifier type mapping
   * @param factory The session factory
   * @return An info string, in the form [FooBar#1]
   */
  public static String infoString(
      EntityPersister persister, 
      Object id, 
      Type identifierType,
      SessionFactoryImplementor factory) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if( persister == null ) {
      s.append( "<null EntityPersister>" );
    }
    else {
      s.append( persister.getEntityName() );
    }
    s.append( '#' );

    if ( id == null ) {
      s.append( "<null>" );
    }
    else {
      s.append( identifierType.toLoggableString( id, factory ) );
    }
    s.append( ']' );

    return s.toString();
  }

  /**
   * Generate an info message string relating to a series of entities.
   *
   * @param persister The persister for the entities
   * @param ids The entity id values
   * @param factory The session factory
   * @return An info string, in the form [FooBar#<1,2,3>]
   */
  public static String infoString(
      EntityPersister persister, 
      Serializable[] ids, 
      SessionFactoryImplementor factory) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if( persister == null ) {
      s.append( "<null EntityPersister>" );
    }
    else {
      s.append( persister.getEntityName() );
      s.append( "#<" );
      for ( int i=0; i<ids.length; i++ ) {
        s.append( persister.getIdentifierType().toLoggableString( ids[i], factory ) );
        if ( i < ids.length-1 ) {
          s.append( ", " );
        }
      }
      s.append( '>' );
    }
    s.append( ']' );

    return s.toString();

  }

  /**
   * Generate an info message string relating to given entity persister.
   *
   * @param persister The persister.
   * @return An info string, in the form [FooBar]
   */
  public static String infoString(EntityPersister persister) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if ( persister == null ) {
      s.append( "<null EntityPersister>" );
    }
    else {
      s.append( persister.getEntityName() );
    }
    s.append( ']' );
    return s.toString();
  }

  /**
   * Generate an info message string relating to a given property value
   * for an entity.
   *
   * @param entityName The entity name
   * @param propertyName The name of the property
   * @param key The property value.
   * @return An info string, in the form [Foo.bars#1]
   */
  public static String infoString(String entityName, String propertyName, Object key) {
    StringBuffer s = new StringBuffer()
        .append( '[' )
        .append( entityName )
        .append( '.' )
        .append( propertyName )
        .append( '#' );

    if ( key == null ) {
      s.append( "<null>" );
    }
    else {
      s.append( key );
    }
    s.append( ']' );
    return s.toString();
  }


  // collections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


  /**
   * Generate an info message string relating to a series of managed
   * collections.
   *
   * @param persister The persister for the collections
   * @param ids The id values of the owners
   * @param factory The session factory
   * @return An info string, in the form [Foo.bars#<1,2,3>]
   */
  public static String collectionInfoString(
      CollectionPersister persister, 
      Serializable[] ids, 
      SessionFactoryImplementor factory) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if ( persister == null ) {
      s.append( "<unreferenced>" );
    }
    else {
      s.append( persister.getRole() );
      s.append( "#<" );
      for ( int i = 0; i < ids.length; i++ ) {
        // Need to use the identifier type of the collection owner
        // since the incoming is value is actually the owner's id.
        // Using the collection's key type causes problems with
        // property-ref keys...
        s.append( persister.getOwnerEntityPersister().getIdentifierType().toLoggableString( ids[i], factory ) );
        if ( i < ids.length-1 ) {
          s.append( ", " );
        }
      }
      s.append( '>' );
    }
    s.append( ']' );
    return s.toString();
  }

  /**
   * Generate an info message string relating to a particular managed
   * collection.
   *
   * @param persister The persister for the collection
   * @param id The id value of the owner
   * @param factory The session factory
   * @return An info string, in the form [Foo.bars#1]
   */
  public static String collectionInfoString(
      CollectionPersister persister, 
      Serializable id, 
      SessionFactoryImplementor factory) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if ( persister == null ) {
      s.append( "<unreferenced>" );
    }
    else {
      s.append( persister.getRole() );
      s.append( '#' );

      if ( id == null ) {
        s.append( "<null>" );
      }
      else {
        // Need to use the identifier type of the collection owner
        // since the incoming is value is actually the owner's id.
        // Using the collection's key type causes problems with
        // property-ref keys...
        s.append( persister.getOwnerEntityPersister().getIdentifierType().toLoggableString( id, factory ) );
      }
    }
    s.append( ']' );

    return s.toString();
  }

  /**
   * Generate an info message string relating to a particular managed
   * collection.
   *
   * @param role The role-name of the collection
   * @param id The id value of the owner
   * @return An info string, in the form [Foo.bars#1]
   */
  public static String collectionInfoString(String role, Serializable id) {
    StringBuffer s = new StringBuffer();
    s.append( '[' );
    if( role == null ) {
      s.append( "<unreferenced>" );
    }
    else {
      s.append( role );
      s.append( '#' );

      if ( id == null ) {
        s.append( "<null>" );
      }
      else {
        s.append( id );
      }
    }
    s.append( ']' );
    return s.toString();
  }

}