001    package org.trails.engine.encoders.abbreviator;
002    
003    import org.apache.commons.collections.BidiMap;
004    import org.apache.commons.collections.bidimap.TreeBidiMap;
005    import org.trails.util.Utils;
006    import org.trails.descriptor.DescriptorService;
007    import org.trails.descriptor.IClassDescriptor;
008    
009    /**
010     * This class is a Trails adaptation of Tapernate's DefaultAbbreviator
011     * <p/>
012     * Credits to James Carman.
013     */
014    public class DefaultAbbreviator implements EntityNameAbbreviator
015    {
016    
017            private BidiMap abbreviationMap;
018            private DescriptorService descriptorService;
019    
020            public String abbreviate(Class entityName)
021            {
022                    return (String) abbreviationMap.get(entityName.getName());
023            }
024    
025            public Class unabbreviate(String abbreviation)
026            {
027                    return Utils.classForName((String) abbreviationMap.getKey(abbreviation)); //@todo check NPEs
028            }
029    
030            public void initializeService()
031            {
032                    abbreviationMap = new TreeBidiMap();
033                    for (IClassDescriptor classDescriptor : descriptorService.getAllDescriptors())
034                    {
035                            abbreviationMap.put(classDescriptor.getType().getName(), classDescriptor.getType().getSimpleName());
036                    }
037            }
038    
039            public void setDescriptorService(DescriptorService descriptorService)
040            {
041                    this.descriptorService = descriptorService;
042            }
043    }