EMMA Coverage Report (generated Thu Jan 20 11:39:44 EST 2011)
[all classes][com.hammurapi.convert]

COVERAGE SUMMARY FOR SOURCE FILE [FoundationAtomicConvertersBundle.java]

nameclass, %method, %block, %line, %
FoundationAtomicConvertersBundle.java100% (10/10)62%  (13/21)75%  (371/493)61%  (42/69)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class FoundationAtomicConvertersBundle$1100% (1/1)50%  (1/2)14%  (8/57)20%  (2/10)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/49)0%   (0/8)
FoundationAtomicConvertersBundle$1 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$2100% (1/1)50%  (1/2)35%  (8/23)29%  (2/7)
convert (String, Converter, Context, ClassLoader): Class 0%   (0/1)0%   (0/15)0%   (0/5)
FoundationAtomicConvertersBundle$2 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$9100% (1/1)50%  (1/2)44%  (8/18)40%  (2/5)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/10)0%   (0/3)
FoundationAtomicConvertersBundle$9 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$3100% (1/1)50%  (1/2)57%  (8/14)67%  (2/3)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/6)0%   (0/1)
FoundationAtomicConvertersBundle$3 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$4100% (1/1)50%  (1/2)57%  (8/14)67%  (2/3)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/6)0%   (0/1)
FoundationAtomicConvertersBundle$4 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$5100% (1/1)50%  (1/2)57%  (8/14)67%  (2/3)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/6)0%   (0/1)
FoundationAtomicConvertersBundle$5 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$7100% (1/1)50%  (1/2)57%  (8/14)67%  (2/3)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/6)0%   (0/1)
FoundationAtomicConvertersBundle$7 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle$8100% (1/1)50%  (1/2)57%  (8/14)67%  (2/3)
convert (Object, Converter, Context, ClassLoader): Object 0%   (0/1)0%   (0/6)0%   (0/1)
FoundationAtomicConvertersBundle$8 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
     
class FoundationAtomicConvertersBundle100% (1/1)100% (3/3)94%  (293/311)87%  (40/46)
addConverter (Class, Class, String, Constructor): void 100% (1/1)76%  (19/25)50%  (2/4)
FoundationAtomicConvertersBundle (): void 100% (1/1)96%  (270/282)90%  (37/41)
getConverters (): Collection 100% (1/1)100% (4/4)100% (1/1)
     
class FoundationAtomicConvertersBundle$6100% (1/1)100% (2/2)100% (14/14)100% (3/3)
FoundationAtomicConvertersBundle$6 (FoundationAtomicConvertersBundle, Class, ... 100% (1/1)100% (8/8)100% (2/2)
convert (Object, Converter, Context, ClassLoader): Object 100% (1/1)100% (6/6)100% (1/1)

1/*
2@license.text@
3 */
4package com.hammurapi.convert;
5 
6import java.io.File;
7import java.io.FileInputStream;
8import java.io.FileReader;
9import java.io.InputStream;
10import java.io.InputStreamReader;
11import java.io.Reader;
12import java.lang.reflect.Constructor;
13import java.math.BigDecimal;
14import java.net.URL;
15import java.util.ArrayList;
16import java.util.Collection;
17import java.util.Collections;
18import java.util.List;
19import java.util.concurrent.Future;
20 
21import com.hammurapi.common.Context;
22 
23/**
24 * @author Pavel Vlasov
25 * @version $Revision: 1.7 $
26 */
27public class FoundationAtomicConvertersBundle implements AtomicConvertersBundle {
28 
29        private List<AtomicConverter<? extends Object,? extends Object>> converters=new ArrayList<AtomicConverter<? extends Object,? extends Object>>();
30        
31        public Collection<AtomicConverter<? extends Object,? extends Object>> getConverters() {
32                return Collections.unmodifiableCollection(converters);
33        }
34 
35    /**
36     * Creates new composite converter populated by default with some generic converters.
37     */
38        @SuppressWarnings("unchecked")
39        public FoundationAtomicConvertersBundle() {
40                addConverter(Number.class, byte.class, "byteValue", null);
41                addConverter(Number.class, double.class, "doubleValue", null);
42                addConverter(Number.class, float.class, "floatValue", null);
43                addConverter(Number.class, int.class, "intValue", null);
44                addConverter(Number.class, long.class, "longValue", null);
45                addConverter(Number.class, short.class, "shortValue", null);
46                
47                addConverter(Number.class, Byte.class, "byteValue", null);
48                addConverter(Number.class, Double.class, "doubleValue", null);
49                addConverter(Number.class, Float.class, "floatValue", null);
50                addConverter(Number.class, Integer.class, "intValue", null);
51                addConverter(Number.class, Long.class, "longValue", null);
52                addConverter(Number.class, Short.class, "shortValue", null);
53                
54                addConverter(Boolean.class, boolean.class, "booleanValue", null);
55                
56                converters.addAll(ReflectionConverter.discoverConstructorConverters(String.class));
57                converters.addAll(ReflectionConverter.discoverConstructorConverters(Integer.class));
58                converters.addAll(ReflectionConverter.discoverConstructorConverters(Long.class));
59                converters.addAll(ReflectionConverter.discoverConstructorConverters(Double.class));
60                converters.addAll(ReflectionConverter.discoverConstructorConverters(Float.class));
61                converters.addAll(ReflectionConverter.discoverConstructorConverters(Byte.class));
62                converters.addAll(ReflectionConverter.discoverConstructorConverters(Short.class));
63                converters.addAll(ReflectionConverter.discoverConstructorConverters(BigDecimal.class));
64                
65                try {
66                        addConverter(File.class, Reader.class, null, FileReader.class.getConstructor(File.class));
67                        addConverter(File.class, InputStream.class, null, FileInputStream.class.getConstructor(File.class));
68                        addConverter(InputStream.class, Reader.class, null, InputStreamReader.class.getConstructor(InputStream.class));
69                        addConverter(URL.class, InputStream.class, "openStream", null);
70                } catch (SecurityException e) {
71                        throw new ConversionException(e);
72                } catch (NoSuchMethodException e) {
73                        throw new ConversionException(e);
74                }
75                
76                converters.add(new AtomicConverterBase(String.class, boolean.class) {
77 
78                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
79                                if (source==null) {
80                                        return Boolean.FALSE;
81                                }
82                                
83                                String str = ((String) source).trim();
84                                if (str.length()==0 || "no".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str) || "0".equals(source) || "".equals(source)) {
85                                        return Boolean.FALSE;
86                                } else if ("yes".equalsIgnoreCase(str) || "true".equalsIgnoreCase(str) || "1".equals(source) || "on".equals(source)) {
87                                        return Boolean.TRUE;
88                                } 
89                                
90                                return null;
91                        }
92                        
93                });
94                
95                converters.add(new AtomicConverterBase<String,Class>(String.class, Class.class) {
96 
97                        public Class convert(String source, Converter master, Context context, ClassLoader classLoader) {
98                                if (source==null) {
99                                        return null;
100                                }
101                                
102                                try {
103                                        return classLoader.loadClass(source.trim());
104                                } catch (ClassNotFoundException e) {
105                                        throw new ConversionException(e);
106                                }
107                        }
108                        
109                });
110                
111                converters.add(new AtomicConverterBase(String.class, byte.class) {
112 
113                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
114                                return new Byte((String) source);
115                        }
116                        
117                });
118                
119                converters.add(new AtomicConverterBase(String.class, double.class) {
120 
121                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
122                                return new Double((String) source);
123                        }
124                        
125                });
126                
127                converters.add(new AtomicConverterBase(String.class, float.class) {
128 
129                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
130                                return new Float((String) source);
131                        }
132                        
133                });
134                
135 
136                converters.add(new AtomicConverterBase(String.class, int.class) {
137 
138                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
139                                return new Integer((String) source);
140                        }
141                        
142                });
143                
144 
145                converters.add(new AtomicConverterBase(String.class, long.class) {
146 
147                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
148                                return new Long((String) source);
149                        }
150                        
151                });
152                
153 
154                converters.add(new AtomicConverterBase(String.class, short.class) {
155 
156                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
157                                return new Short((String) source);
158                        }
159                        
160                });
161                                
162                converters.add(new AtomicConverterBase(String.class, Class.class) {
163 
164                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
165                                try {
166                                        return Class.forName((String) source);
167                                } catch (ClassNotFoundException e) {
168                                        throw new ConversionException(e);
169                                }
170                        }
171                        
172                });                
173                
174    }
175                
176        private <S, T> void  addConverter(Class<S> source, Class<T> target, String accessor, Constructor<? extends T> constructor) {
177                try {
178                        converters.add(new ReflectionConverter<S, T>(accessor==null ? null : source.getMethod(accessor), constructor));
179                } catch (Exception e) {
180                        throw new ConversionException(e);
181                }
182        }
183                
184}

[all classes][com.hammurapi.convert]
EMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov