001package net.gdface.codegen.generic;
002
003import java.util.HashSet;
004import java.util.Iterator;
005import java.util.Map;
006import java.util.Map.Entry;
007import java.util.Set;
008
009import net.gdface.annotation.DefaultGenericTypes;
010import net.gdface.codegen.CodeGenUtils;
011import net.gdface.utils.Assert;
012
013public class DefaultParameterGenericTypes  implements GenericInterfaceConstants{
014        private final Map<Class<?>,String> defaultGenericTypes;
015        DefaultParameterGenericTypes(Class<?>clazz) {
016                Assert.notNull(clazz,"clazz");
017                defaultGenericTypes=getDefaultParameterGenericTypes(clazz);
018        }
019        private final Map<Class<?>,String> getDefaultParameterGenericTypes(Class<?>clazz) {
020                DefaultGenericTypes def = clazz.getAnnotation(DefaultGenericTypes.class);
021                try {
022                        return null != def ? CodeGenUtils.createMap(def.types(), def.names(), true) : GENERIC_TYPES_DEFAULT;
023                } catch (IllegalArgumentException e) {
024                        throw new DefaultGenericTypesExceptoin(e);
025                }
026        }
027        /**
028         * @param clazz
029         * @return
030         * @see java.util.HashMap#get(java.lang.Object)
031         */
032        public String getName(Class<?> clazz) {
033                return defaultGenericTypes.get(clazz);
034        }
035        /**
036         * @param name
037         * @return
038         * @see java.util.HashMap#containsKey(java.lang.Object)
039         */
040        public boolean hasName(String name) {
041                return defaultGenericTypes.containsKey(name);
042        }
043        /**
044         * @param clazz
045         * @return
046         * @see java.util.HashMap#containsValue(java.lang.Object)
047         */
048        public boolean hasType(Class<?> clazz) {
049                return defaultGenericTypes.containsKey(clazz);
050        }
051
052        /**
053         * @return
054         * @see java.util.HashMap#keySet()
055         */
056        public Set<String> names() {
057                return new HashSet<String>(defaultGenericTypes.values());
058        }
059        @Override
060        public String toString() {
061                StringBuilder builder=new StringBuilder();
062                Iterator<Entry<Class<?>, String>> it = defaultGenericTypes.entrySet().iterator();
063                Entry<Class<?>, String> entry;
064                builder.append("{\n");
065                while(it.hasNext()){
066                        entry = it.next();
067                        builder.append(entry.getKey().getName()).append(',').append(entry.getValue()).append("\n");
068                }
069                builder.append("}\n");
070                return builder.toString();
071        }
072}