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}