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

COVERAGE SUMMARY FOR SOURCE FILE [JXPathExtractor.java]

nameclass, %method, %block, %line, %
JXPathExtractor.java100% (1/1)50%  (3/6)57%  (122/214)47%  (24.4/52)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class JXPathExtractor100% (1/1)50%  (3/6)57%  (122/214)47%  (24.4/52)
equals (Object): boolean 0%   (0/1)0%   (0/79)0%   (0/25)
isContextDependent (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
parameterIndices (): Set 0%   (0/1)0%   (0/3)0%   (0/1)
hashCode (): int 100% (1/1)89%  (47/53)97%  (9.6/10)
extractInternal (Object, Map, Object []): Object 100% (1/1)95%  (36/38)96%  (4.8/5)
JXPathExtractor (String, String [], Class): void 100% (1/1)100% (39/39)100% (10/10)

1package com.hammurapi.extract.jxpath;
2 
3import java.util.Arrays;
4import java.util.Collections;
5import java.util.Map;
6import java.util.Set;
7import java.util.TreeSet;
8 
9import org.apache.commons.jxpath.JXPathContext;
10 
11import com.hammurapi.extract.Extractor;
12import com.hammurapi.extract.ExtractorBase;
13 
14class JXPathExtractor<T, V, C> extends ExtractorBase<T, V, C> implements Extractor<T, V, C> {
15 
16        private Set<Integer> parameterIndices;
17        private String code;
18        private String[] parameterNames;
19        private Class<V> valueType;
20 
21        public JXPathExtractor(String code, String[] parameterNames, Class<V> valueType) {
22                super(0, null);
23                this.code = code;
24                this.parameterNames = parameterNames;
25                this.valueType = valueType;
26                Set<Integer> pi = new TreeSet<Integer>();        
27                for (int i=0; i<parameterNames.length; ++i) {
28                        if (parameterNames[i]!=null) {
29                                pi.add(i);
30                        }
31                }
32                parameterIndices = Collections.unmodifiableSet(pi);
33        }
34 
35        @Override
36        public Set<Integer> parameterIndices() {
37                return parameterIndices;
38        }
39 
40        @Override
41        public boolean isContextDependent() {
42                return true;
43        }
44 
45        @SuppressWarnings("unchecked")
46        @Override
47        protected V extractInternal(
48                        C context,
49                        Map<C, Map<Extractor<T, ? super V, C>, ? super V>> cache, 
50                        T... obj) {
51 
52                JXPathContext ctx = JXPathContext.newContext(context==null ? obj : context);
53                for (int i=0; i<parameterNames.length; ++i) {
54                        if (parameterNames[i]!=null) {
55                                ctx.getVariables().declareVariable(parameterNames[i], obj[i]);
56                        }
57                }
58                return (V) ctx.getValue(code, valueType);
59        }
60 
61        @Override
62        public int hashCode() {
63                final int prime = 31;
64                int result = 1;
65                result = prime * result + ((code == null) ? 0 : code.hashCode());
66                result = prime
67                                * result
68                                + ((parameterIndices == null) ? 0 : parameterIndices.hashCode());
69                result = prime * result + Arrays.hashCode(parameterNames);
70                result = prime * result
71                                + ((valueType == null) ? 0 : valueType.hashCode());
72                return result;
73        }
74 
75        @Override
76        public boolean equals(Object obj) {
77                if (this == obj)
78                        return true;
79                if (!super.equals(obj))
80                        return false;
81                if (getClass() != obj.getClass())
82                        return false;
83                JXPathExtractor other = (JXPathExtractor) obj;
84                if (code == null) {
85                        if (other.code != null)
86                                return false;
87                } else if (!code.equals(other.code))
88                        return false;
89                if (parameterIndices == null) {
90                        if (other.parameterIndices != null)
91                                return false;
92                } else if (!parameterIndices.equals(other.parameterIndices))
93                        return false;
94                if (!Arrays.equals(parameterNames, other.parameterNames))
95                        return false;
96                if (valueType == null) {
97                        if (other.valueType != null)
98                                return false;
99                } else if (!valueType.equals(other.valueType))
100                        return false;
101                return true;
102        }
103        
104}

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