OSDN Git Service

e400fba524b01b06884ee3e889f71a067616a349
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / cvfv / ConstantValueOfFieldVariableBirthmarkService.java
1 package jp.sourceforge.stigmata.birthmarks.cvfv;
2
3 import jp.sourceforge.stigmata.BirthmarkComparator;
4 import jp.sourceforge.stigmata.BirthmarkElement;
5 import jp.sourceforge.stigmata.BirthmarkExtractor;
6 import jp.sourceforge.stigmata.birthmarks.AbstractBirthmarkService;
7 import jp.sourceforge.stigmata.birthmarks.comparators.PlainBirthmarkComparator;
8 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
9
10 /**
11  * 
12  * 
13  *
14  * @author Haruaki TAMADA
15  */
16 public class ConstantValueOfFieldVariableBirthmarkService extends AbstractBirthmarkService implements BirthmarkSpi{
17         private BirthmarkComparator comparator = new PlainBirthmarkComparator(this);
18     private BirthmarkExtractor extractor = new ConstantValueOfFieldVariableBirthmarkExtractor(this);
19
20     @Override
21     public String getType(){
22         return "cvfv";
23     }
24
25     @Override
26     public String getDefaultDescription(){
27         return "Field type and its initial value.";
28     }
29
30     @Override
31     public BirthmarkExtractor getExtractor(){
32         return extractor;
33     }
34
35     @Override
36     public BirthmarkComparator getComparator(){
37         return comparator;
38     }
39
40     @Override
41     public boolean isExperimental(){
42         return false;
43     }
44
45     @Override
46     public boolean isUserDefined(){
47         return false;
48     }
49
50     @Override
51         public BirthmarkElement buildBirthmarkElement(String value) {
52         String signature = value.substring(0, value.indexOf('='));
53         String subValue = value.substring(value.indexOf('=') + 1);
54         Object elementValue = subValue;
55
56         if(subValue.equals("null")){
57             elementValue = null;
58         }
59         else{
60             switch(signature.charAt(0)){
61             case 'Z':{
62                 if(value.equals("true")) elementValue = Boolean.TRUE;
63                 else                     elementValue = Boolean.FALSE;
64                 break;
65             }
66             case 'C': elementValue = new Character(subValue.charAt(0)); break;
67             case 'D': elementValue = new Double(subValue);  break;
68             case 'F': elementValue = new Float(subValue);   break;
69             case 'S': elementValue = new Short(subValue);   break;
70             case 'B': elementValue = new Byte(subValue);    break;
71             case 'I': elementValue = new Integer(subValue); break;
72             default:  elementValue = value; break;
73             }
74         }
75         return new TypeAndValueBirthmarkElement(signature, elementValue);
76         }
77 }