001: package org.hibernate.loader.custom;
002:
003: import java.util.Map;
004:
005: import org.hibernate.loader.CollectionAliases;
006: import org.hibernate.persister.collection.SQLLoadableCollection;
007: import org.hibernate.util.StringHelper;
008:
009: /**
010: * CollectionAliases that uses columnnames instead of generated aliases.
011: * Aliases can still be overwritten via <return-property>
012: *
013: * @author Max Rydahl Andersen
014: *
015: */
016: public class ColumnCollectionAliases implements CollectionAliases {
017: private final String[] keyAliases;
018: private final String[] indexAliases;
019: private final String[] elementAliases;
020: private final String identifierAlias;
021: private Map userProvidedAliases;
022:
023: public ColumnCollectionAliases(Map userProvidedAliases,
024: SQLLoadableCollection persister) {
025: this .userProvidedAliases = userProvidedAliases;
026:
027: this .keyAliases = getUserProvidedAliases("key", persister
028: .getKeyColumnNames());
029:
030: this .indexAliases = getUserProvidedAliases("index", persister
031: .getIndexColumnNames());
032:
033: this .elementAliases = getUserProvidedAliases("element",
034: persister.getElementColumnNames());
035:
036: this .identifierAlias = getUserProvidedAlias("id", persister
037: .getIdentifierColumnName());
038:
039: }
040:
041: /**
042: * Returns the suffixed result-set column-aliases for columns making up the key for this collection (i.e., its FK to
043: * its owner).
044: *
045: * @return The key result-set column aliases.
046: */
047: public String[] getSuffixedKeyAliases() {
048: return keyAliases;
049: }
050:
051: /**
052: * Returns the suffixed result-set column-aliases for the collumns making up the collection's index (map or list).
053: *
054: * @return The index result-set column aliases.
055: */
056: public String[] getSuffixedIndexAliases() {
057: return indexAliases;
058: }
059:
060: /**
061: * Returns the suffixed result-set column-aliases for the columns making up the collection's elements.
062: *
063: * @return The element result-set column aliases.
064: */
065: public String[] getSuffixedElementAliases() {
066: return elementAliases;
067: }
068:
069: /**
070: * Returns the suffixed result-set column-aliases for the column defining the collection's identifier (if any).
071: *
072: * @return The identifier result-set column aliases.
073: */
074: public String getSuffixedIdentifierAlias() {
075: return identifierAlias;
076: }
077:
078: /**
079: * Returns the suffix used to unique the column aliases for this particular alias set.
080: *
081: * @return The uniqued column alias suffix.
082: */
083: public String getSuffix() {
084: return "";
085: }
086:
087: public String toString() {
088: return super .toString() + " [ suffixedKeyAliases=["
089: + join(keyAliases) + "], suffixedIndexAliases=["
090: + join(indexAliases) + "], suffixedElementAliases=["
091: + join(elementAliases) + "], suffixedIdentifierAlias=["
092: + identifierAlias + "]]";
093: }
094:
095: private String join(String[] aliases) {
096: if (aliases == null)
097: return null;
098:
099: return StringHelper.join(", ", aliases);
100: }
101:
102: private String[] getUserProvidedAliases(String propertyPath,
103: String[] defaultAliases) {
104: String[] result = (String[]) userProvidedAliases
105: .get(propertyPath);
106: if (result == null) {
107: return defaultAliases;
108: } else {
109: return result;
110: }
111: }
112:
113: private String getUserProvidedAlias(String propertyPath,
114: String defaultAlias) {
115: String[] columns = (String[]) userProvidedAliases
116: .get(propertyPath);
117: if (columns == null) {
118: return defaultAlias;
119: } else {
120: return columns[0];
121: }
122: }
123:
124: }
|