★計算式列(仮想列)機能を実装
[nucalgen] / nucalgen / src / main / java / jp / satomichan / nucalgen / NutritionColumnHolder.java
1 package jp.satomichan.nucalgen;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6
7 import org.apache.commons.configuration.ConfigurationException;
8 import org.apache.commons.configuration.XMLConfiguration;
9
10 public class NutritionColumnHolder {
11
12         private List<NutritionColumn> nutritionColumnList;
13
14         List<NutritionColumn> getNutritionColumnList() {
15                 return this.nutritionColumnList;
16         }
17
18         void addNutritionColumn(NutritionColumn aNutritionColumn) {
19                 this.nutritionColumnList.add(aNutritionColumn);
20         }
21
22         NutritionColumnHolder(String columnsXmlFileName){
23                 XMLConfiguration aConfig = new XMLConfiguration();
24                 aConfig.setDelimiterParsingDisabled(true);
25
26                 try {
27                         aConfig.load(columnsXmlFileName);
28                 } catch (ConfigurationException e) {
29                         // TODO 自動生成された catch ブロック
30                         e.printStackTrace();
31                 }
32
33                 this.nutritionColumnList = new ArrayList<NutritionColumn>();
34
35                 for (int index = 0; index < getRepetition(aConfig,"cols.column.no"); index++) {
36                         final String colIndex = "cols.column(" + index + ").";
37
38                         NutritionColumn nc = new NutritionColumn();
39                         nc.setName(aConfig.getString(colIndex + "name", ""));
40                         nc.setTable(aConfig.getString(colIndex + "table", ""));
41                         nc.setDispName(aConfig.getString(colIndex + "disp_name", ""));
42                         nc.setAlias(aConfig.getString(colIndex + "alias", ""));
43                         nc.setFormula(aConfig.getString(colIndex + "formula", ""));
44                         nc.setFormat(aConfig.getString(colIndex + "format", ""));
45                         nc.setUnit(aConfig.getString(colIndex + "unit"));
46                         nc.setUseRawValue(aConfig.getString(colIndex + "use_raw_value", "").equalsIgnoreCase("true"));
47                         nc.setUseSum(aConfig.getString(colIndex + "use_sum", "").equalsIgnoreCase("true"));
48
49                         this.addNutritionColumn(nc);
50                 }
51
52         }
53
54
55         public String toString() {
56                 String ret = "";
57                 for(NutritionColumn aColumn : this.getNutritionColumnList()) {
58                         ret += aColumn + "\n";
59                 }
60
61                 return ret;
62         }
63
64
65
66         public int indexOf(String alias) {
67                 for(int i = 0; i <= this.nutritionColumnList.size(); i++) {
68                         if(this.nutritionColumnList.get(i).getAlias().equals(alias)) {
69                                 return i;
70                         }
71                 }
72
73                 return -1;
74         }
75
76
77         public List<String> getNutritionAliasList(){
78                 List<String> retAliasList = new ArrayList<String>();
79
80                 for(NutritionColumn aColumn : this.getNutritionColumnList()) {
81                         if(aColumn.getAlias().length() > 0) {
82                                 retAliasList.add(aColumn.getAlias());
83                         }
84                 }
85
86                 return retAliasList;
87         }
88
89
90           private static int getRepetition(
91                             final XMLConfiguration config,
92                             final String path) {
93                             Object obj = config.getProperty(path);
94
95                             if (obj == null) {
96                               return 0;
97                             } else if (obj instanceof Collection) {
98                               return ((Collection) obj).size();
99                             }
100
101                             return 1;
102                           }
103 }