★計算式列(仮想列)機能を実装
[nucalgen] / nucalgen / src / main / java / jp / satomichan / nucalgen / NutritionColumnHolder.java
index e20d7994094b4e5e54e7412824aa2531ff996b1c..8067ef4b5a8e18639c68bfa4da9c75f935440b61 100644 (file)
@@ -1,8 +1,10 @@
 package jp.satomichan.nucalgen;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
+import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.XMLConfiguration;
 
 public class NutritionColumnHolder {
@@ -17,26 +19,32 @@ public class NutritionColumnHolder {
                this.nutritionColumnList.add(aNutritionColumn);
        }
 
-       NutritionColumnHolder(XMLConfiguration aConfig){
+       NutritionColumnHolder(String columnsXmlFileName){
+               XMLConfiguration aConfig = new XMLConfiguration();
+               aConfig.setDelimiterParsingDisabled(true);
+
+               try {
+                       aConfig.load(columnsXmlFileName);
+               } catch (ConfigurationException e) {
+                       // TODO 自動生成された catch ブロック
+                       e.printStackTrace();
+               }
+
                this.nutritionColumnList = new ArrayList<NutritionColumn>();
 
-               List<Object> names = aConfig.getList("cols.column.name");
-               List<Object> dispNames = aConfig.getList("cols.column.disp_name");
-               List<Object> aliases = aConfig.getList("cols.column.alias");
-               List<Object> formats = aConfig.getList("cols.column.format");
-               List<Object> units = aConfig.getList("cols.column.unit");
-               List<Object> useRawValue = aConfig.getList("cols.column.use_raw_value");
-               List<Object> useSum = aConfig.getList("cols.column.use_sum");
+               for (int index = 0; index < getRepetition(aConfig,"cols.column.no"); index++) {
+                       final String colIndex = "cols.column(" + index + ").";
 
-               for (Object aName : names) {
                        NutritionColumn nc = new NutritionColumn();
-                       nc.setName((String) aName);
-                       nc.setDispName((String) dispNames.get(names.indexOf(aName)));
-                       nc.setAlias((String) aliases.get(names.indexOf(aName)));
-                       nc.setFormat((String) formats.get(names.indexOf(aName)));
-                       nc.setUnit((String) units.get(names.indexOf(aName)));
-                       nc.setUseRawValue(((String)useRawValue.get(names.indexOf(aName))).equalsIgnoreCase("true"));
-                       nc.setUseSum(((String)useSum.get(names.indexOf(aName))).equalsIgnoreCase("true"));
+                       nc.setName(aConfig.getString(colIndex + "name", ""));
+                       nc.setTable(aConfig.getString(colIndex + "table", ""));
+                       nc.setDispName(aConfig.getString(colIndex + "disp_name", ""));
+                       nc.setAlias(aConfig.getString(colIndex + "alias", ""));
+                       nc.setFormula(aConfig.getString(colIndex + "formula", ""));
+                       nc.setFormat(aConfig.getString(colIndex + "format", ""));
+                       nc.setUnit(aConfig.getString(colIndex + "unit"));
+                       nc.setUseRawValue(aConfig.getString(colIndex + "use_raw_value", "").equalsIgnoreCase("true"));
+                       nc.setUseSum(aConfig.getString(colIndex + "use_sum", "").equalsIgnoreCase("true"));
 
                        this.addNutritionColumn(nc);
                }
@@ -55,4 +63,41 @@ public class NutritionColumnHolder {
 
 
 
+       public int indexOf(String alias) {
+               for(int i = 0; i <= this.nutritionColumnList.size(); i++) {
+                       if(this.nutritionColumnList.get(i).getAlias().equals(alias)) {
+                               return i;
+                       }
+               }
+
+               return -1;
+       }
+
+
+       public List<String> getNutritionAliasList(){
+               List<String> retAliasList = new ArrayList<String>();
+
+               for(NutritionColumn aColumn : this.getNutritionColumnList()) {
+                       if(aColumn.getAlias().length() > 0) {
+                               retAliasList.add(aColumn.getAlias());
+                       }
+               }
+
+               return retAliasList;
+       }
+
+
+         private static int getRepetition(
+                           final XMLConfiguration config,
+                           final String path) {
+                           Object obj = config.getProperty(path);
+
+                           if (obj == null) {
+                             return 0;
+                           } else if (obj instanceof Collection) {
+                             return ((Collection) obj).size();
+                           }
+
+                           return 1;
+                         }
 }
\ No newline at end of file