001/*
002@license.text@
003 */
004package com.hammurapi.common;
005
006import java.util.ArrayList;
007import java.util.List;
008
009
010/**
011 * Utility class which searches class hierarchy for a resource.
012 * Resource shall be named after class name, profile name is separated from
013 * class name by ! and locale separated from class name/profile by _.
014 * @author Pavel Vlasov
015 * @revision $Revision$
016 */
017public class ClassResourceLoader extends ResourceLoaderImpl {
018        
019        public static String[] inheritancePath(Class<?> clazz) {
020                final List<String> accumulator = new ArrayList<String>();
021                
022                new ClassHierarchyVisitable(clazz).accept(new Visitor<Class<?>>() {
023                        
024                        @Override
025                        public boolean visit(Class<?> target) {
026                                String cPath = target.getName().replace('.', '/');
027                                if (accumulator.contains(cPath)) {
028                                        return false;
029                                }
030                                accumulator.add(cPath);
031                                return true;
032                        }
033                });
034                
035                return accumulator.toArray(new String[accumulator.size()]);
036        }
037
038        private Class<?> clazz;
039        
040        public ClassResourceLoader(ResourceSet resourceSet, Class<?> clazz) {             
041                super(resourceSet, inheritancePath(clazz));
042                this.clazz = clazz;
043        }
044        
045        @Override
046        public String toString() {
047                return "Class resource loader for "+clazz.getName();
048        }
049                
050}