Open Source Repository

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


org/hibernate/loader/GeneratedCollectionAliases.java
// $Id: GeneratedCollectionAliases.java 8410 2005-10-14 22:43:44Z maxcsaucdk $
package org.hibernate.loader;

import java.util.Map;

import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.util.CollectionHelper;
import org.hibernate.util.StringHelper;

/**
 * CollectionAliases which handles the logic of selecting user provided aliases (via return-property),
 * before using the default aliases. 
 *
 @author Steve Ebersole and Max Rydahl Andersen
 */
public class GeneratedCollectionAliases implements CollectionAliases {
  private final String suffix;
  private final String[] keyAliases;
  private final String[] indexAliases;
  private final String[] elementAliases;
  private final String identifierAlias;
  private Map userProvidedAliases;
  
  public GeneratedCollectionAliases(Map userProvidedAliases, CollectionPersister persister, String suffix) {
    this.suffix = suffix;
    this.userProvidedAliases = userProvidedAliases;

    this.keyAliases = getUserProvidedAliases(
        "key"
        persister.getKeyColumnAliasessuffix )
      );

    this.indexAliases = getUserProvidedAliases(
        "index",
        persister.getIndexColumnAliasessuffix )
        );
    
    this.elementAliases = getUserProvidedAliases"element"
        persister.getElementColumnAliasessuffix )
        );
        
    this.identifierAlias = getUserProvidedAlias"id"
        persister.getIdentifierColumnAliassuffix )
        );
  }

  public GeneratedCollectionAliases(CollectionPersister persister, String string) {
    this(CollectionHelper.EMPTY_MAP, persister, string);
  }

  /**
   * Returns the suffixed result-set column-aliases for columns making up the key for this collection (i.e., its FK to
   * its owner).
   *
   @return The key result-set column aliases.
   */
  public String[] getSuffixedKeyAliases() {
    return keyAliases;
  }

  /**
   * Returns the suffixed result-set column-aliases for the collumns making up the collection's index (map or list).
   *
   @return The index result-set column aliases.
   */
  public String[] getSuffixedIndexAliases() {
    return indexAliases;
  }

  /**
   * Returns the suffixed result-set column-aliases for the columns making up the collection's elements.
   *
   @return The element result-set column aliases.
   */
  public String[] getSuffixedElementAliases() {
    return elementAliases;
  }

  /**
   * Returns the suffixed result-set column-aliases for the column defining the collection's identifier (if any).
   *
   @return The identifier result-set column aliases.
   */
  public String getSuffixedIdentifierAlias() {
    return identifierAlias;
  }

  /**
   * Returns the suffix used to unique the column aliases for this particular alias set.
   *
   @return The uniqued column alias suffix.
   */
  public String getSuffix() {
    return suffix;
  }

  public String toString() {
    return super.toString() " [suffix=" + suffix +
            ", suffixedKeyAliases=[" + joinkeyAliases +
            "], suffixedIndexAliases=[" + joinindexAliases +
            "], suffixedElementAliases=[" + joinelementAliases +
            "], suffixedIdentifierAlias=[" + identifierAlias + "]]";
  }

  private String join(String[] aliases) {
    if aliases == nullreturn null;

    return StringHelper.join", ", aliases );
  }
  
  private String[] getUserProvidedAliases(String propertyPath, String[] defaultAliases) {
    String[] result = (String[]) userProvidedAliases.get(propertyPath);
    if (result==null) {
      return defaultAliases;      
    
    else {
      return result;
    }
  }

  private String getUserProvidedAlias(String propertyPath, String defaultAlias) {
    String[] columns = (String[]) userProvidedAliases.get(propertyPath);
    if (columns==null) {
      return defaultAlias;
    
    else {
      return columns[0];
    }
  }

}