public String getSelectStr(String kind) {
    try {
      String strSelect = "select " + "\n";
      Node xmlNode = xmlCon.selectSingleNode(xmlDoc, "//db_table");
      NodeList nodelist = null;
      Node tempNode = null;

      if (kind.equals("all")) {
        nodelist =
            xmlCon.selectNodes(
                xmlNode, "//db_table/logical_model/select_clause/logical_column[@dispflg='true']");
      } else if (kind.equals("use_flg")) {
        nodelist =
            xmlCon.selectNodes(
                xmlNode,
                "//db_table/logical_model/select_clause/logical_column[@dispflg='true' and @use_flg='1']");
      }
      // System.out.println(nodelist.getLength());
      for (int i = 0; i < nodelist.getLength(); i++) {
        // Sortが効かないので、番号がついている属性を指定して、SelectSingleNodeする。
        if (kind.equals("all")) {
          tempNode = nodelist.item(i);
        } else if (kind.equals("use_flg")) {
          tempNode =
              xmlCon.selectSingleNode(
                  xmlDoc,
                  "//db_table/logical_model/select_clause/logical_column[@use_order='"
                      + i
                      + "' and @dispflg='true' and @use_flg='1']");
        }
        // System.out.println(tempNode);
        if (tempNode != null) { // 同じ名前が重なる場合はNullとなる。
          if (strSelect.equals("select " + "\n")) {
            strSelect +=
                "     "
                    + xmlCon.selectSingleNode(tempNode, ".//sql").getFirstChild().getNodeValue();
            strSelect +=
                " as "
                    + xmlCon.selectSingleNode(tempNode, ".//name").getFirstChild().getNodeValue()
                    + "\n";
          } else {
            strSelect +=
                "    ,"
                    + xmlCon.selectSingleNode(tempNode, ".//sql").getFirstChild().getNodeValue();
            strSelect +=
                " as "
                    + xmlCon.selectSingleNode(tempNode, ".//name").getFirstChild().getNodeValue()
                    + "\n";
          }
        }
      }
      return strSelect;
    } catch (Exception e) {
      log.error("exception in getSelectStr():\n", e);
      e.printStackTrace();
    }
    return null;
  }
 public Document readFile(String filepath) {
   try {
     xmlDoc = xmlCon.readFile(filepath);
     return xmlDoc;
   } catch (Exception e) {
     log.error("exception in readFile():\n", e);
     e.printStackTrace();
   }
   return null;
 }
  public String getFromStr() {
    try {
      String strFrom = "from " + "\n";
      Node xmlNode = xmlCon.selectSingleNode(xmlDoc, "//db_table");
      NodeList nodelist = xmlCon.selectNodes(xmlNode, "//db_table");

      for (int i = 0; i < nodelist.getLength(); i++) {
        if (i == 0) {
          strFrom += "     " + ((Element) nodelist.item(i)).getAttribute("name") + "\n";
        } else {
          strFrom += "    ," + ((Element) nodelist.item(i)).getAttribute("name") + "\n";
        }
      }
      return strFrom;
    } catch (Exception e) {
      log.error("exception in getFromStr():\n", e);
      e.printStackTrace();
    }
    return null;
  }
  public String getJoinTableStr(Node node) {
    try {
      // 複数カラムJoin用のLoop
      String strJoin = "";
      String tableName1 = "";
      String tableName2 = "";

      Node tableNode1 = xmlCon.selectSingleNode(node, ".//table1");
      tableName1 = ((Element) tableNode1).getAttribute("tablename");
      Node tableNode2 = xmlCon.selectSingleNode(node, ".//table2");
      tableName2 = ((Element) tableNode2).getAttribute("tablename");

      NodeList columList1 = xmlCon.selectNodes(tableNode1, ".//join_column");
      NodeList columList2 = xmlCon.selectNodes(tableNode2, ".//join_column");

      for (int i = 0; i < columList1.getLength(); i++) { // 複数Table用のループ
        if (i == 0) {
          strJoin += "";
        } else {
          strJoin += "\n" + "    and ";
        }
        strJoin +=
            tableName1
                + "."
                + xmlCon.selectSingleNode(columList1.item(i), ".").getFirstChild().getNodeValue();
        strJoin +=
            " = "
                + tableName2
                + "."
                + xmlCon.selectSingleNode(columList2.item(i), ".").getFirstChild().getNodeValue();
      }

      return strJoin;
    } catch (Exception e) {
      log.error("exception in getJoinTableStr():\n", e);
      e.printStackTrace();
    }
    return null;
  }
  public String getJoinStr() {
    try {
      //			String strJoin = "where 'mode'!='viewer' "+"\n";
      String strJoin = "where 1=1 " + "\n";
      Node xmlNode = xmlCon.selectSingleNode(xmlDoc, "//RDBModel");
      NodeList nodelist = xmlCon.selectNodes(xmlNode, "//RDBModel/joins/join");

      for (int i = 0; i < nodelist.getLength(); i++) { // 複数Table用のループ
        //				xmlCon.selectSingleNode(nodelist.item(i),"//table1");
        if (i == 0) {
          strJoin += "    and " + getJoinTableStr(nodelist.item(i)) + "\n";
        } else {
          strJoin += "    and " + getJoinTableStr(nodelist.item(i)) + "\n";
        }
      }
      return strJoin;
    } catch (Exception e) {
      log.error("exception in getJoinStr():\n", e);
      e.printStackTrace();
    }
    return null;
  }
 public String getTableSQL(String xmlString) {
   try {
     xmlDoc = xmlCon.toXMLDocument(xmlString);
     String sqlString = "";
     sqlString += getSelectStr("all");
     sqlString += getFromStr();
     sqlString += getWhereStr("", "all");
     sqlString += getGroupByStr("all");
     sqlString += getOrderByStr("all");
     sqlString += getLimitStr();
     return sqlString;
   } catch (Exception e) {
     log.error("exception in getTableSQL():\n", e);
     e.printStackTrace();
   }
   return null;
 }
  public String getOrderByStr(String kind) {
    try {
      String strOrderBy = "order by " + "\n";
      Node xmlNode = xmlCon.selectSingleNode(xmlDoc, "//db_table");
      NodeList nodelist = null;
      Node tempNode = null;

      if (kind.equals("all")) {
        nodelist =
            xmlCon.selectNodes(
                xmlNode,
                "//db_table/logical_model/select_clause/logical_column[@groupbyflg='true']"); //
      } else if (kind.equals("use_flg")) {
        //				nodelist =
        // xmlCon.selectNodes(xmlNode,"//db_table/logical_model/select_clause/logical_column[@use_flg='1']");//@groupbyflg='true' and
        nodelist =
            xmlCon.selectNodes(
                xmlNode,
                "//db_table/logical_model/select_clause/logical_column[@groupbyflg='true' and @use_flg='1']"); //
      }

      if (nodelist.getLength() == 0) { // 無い場合は、何も返さない(FactTable用)
        return "";
      }

      boolean first_flg = true;
      int plusNum = 0; // Sort番号が飛び順になる場合。
      for (int i = 0; i < nodelist.getLength(); i++) {
        if (kind.equals("all")) {
          tempNode = nodelist.item(i);
          // Sortが効かないので、番号がついている属性を指定して、SelectSingleNodeする。
        } else if (kind.equals("use_flg")) {
          tempNode =
              xmlCon.selectSingleNode(
                  xmlDoc,
                  "//db_table/logical_model/select_clause/logical_column[@use_order='"
                      + (i + plusNum)
                      + "' and @groupbyflg='true' and @use_flg='1']");
          if (tempNode == null) {
            plusNum++;
            tempNode =
                xmlCon.selectSingleNode(
                    xmlDoc,
                    "//db_table/logical_model/select_clause/logical_column[@use_order='"
                        + (i + plusNum)
                        + "' and @groupbyflg='true' and @use_flg='1']");
            for (; plusNum < 1000 && tempNode == null; plusNum++) {
              tempNode =
                  xmlCon.selectSingleNode(
                      xmlDoc,
                      "//db_table/logical_model/select_clause/logical_column[@use_order='"
                          + (i + plusNum)
                          + "' and @groupbyflg='true' and @use_flg='1']");
            }
          }
        }
        if (tempNode != null) {
          if (first_flg == true) {
            strOrderBy +=
                "     "
                    + xmlCon.selectSingleNode(tempNode, ".//sql").getFirstChild().getNodeValue()
                    + "\n";
            first_flg = false;
          } else {
            strOrderBy +=
                "    ,"
                    + xmlCon.selectSingleNode(tempNode, ".//sql").getFirstChild().getNodeValue()
                    + "\n";
          }
        }
      }
      return strOrderBy;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  public String getGroupByStr(String kind) {
    try {
      String strGroupBy = "group by " + "\n";
      Node xmlNode = xmlCon.selectSingleNode(xmlDoc, "//db_table");
      NodeList nodelist = null;
      Node tempNode = null;

      // Selectに属するものをまとめて取得(絞り込みは、下のSort処理部分で。)
      if (kind.equals("all")) {
        nodelist =
            xmlCon.selectNodes(
                xmlNode,
                "//db_table/logical_model/select_clause/logical_column[@groupbyflg='true']"); //
      } else if (kind.equals("use_flg")) {
        // 修正
        //				nodelist =
        // xmlCon.selectNodes(xmlNode,"//db_table/logical_model/select_clause/logical_column[@use_flg='1']");//@groupbyflg='true' and
        nodelist =
            xmlCon.selectNodes(
                xmlNode,
                "//db_table/logical_model/select_clause/logical_column[@groupbyflg='true' and @use_flg='1']"); //
      }
      // System.out.println(nodelist.getLength());

      if (nodelist.getLength() == 0) { // 無い場合は、何も返さない(FactTable用)
        return "";
      }

      boolean first_flg = true;
      int plusNum = 0; // Sort番号が飛び順になる場合。
      // System.out.println(nodelist.getLength());
      for (int i = 0; i < nodelist.getLength(); i++) {
        // System.out.println(xmlCon.toXMLText(nodelist.item(i)));
        // Sortが効かないので、番号がついている属性を指定して、SelectSingleNodeする。
        if (kind.equals("all")) {
          tempNode = nodelist.item(i);
        } else if (kind.equals("use_flg")) {
          // System.out.println("Null"+i);
          // System.out.println("Plus"+plusNum);
          tempNode =
              xmlCon.selectSingleNode(
                  xmlDoc,
                  "//db_table/logical_model/select_clause/logical_column[@use_order='"
                      + (i + plusNum)
                      + "' and @groupbyflg='true' and @use_flg='1']");
          if (tempNode == null) {
            plusNum++;
            tempNode =
                xmlCon.selectSingleNode(
                    xmlDoc,
                    "//db_table/logical_model/select_clause/logical_column[@use_order='"
                        + (i + plusNum)
                        + "' and @groupbyflg='true' and @use_flg='1']");
            for (; plusNum < 1000 && tempNode == null; plusNum++) {
              tempNode =
                  xmlCon.selectSingleNode(
                      xmlDoc,
                      "//db_table/logical_model/select_clause/logical_column[@use_order='"
                          + (i + plusNum)
                          + "' and @groupbyflg='true' and @use_flg='1']");
            }
          }
          // System.out.println(plusNum+i);
          // System.out.println(xmlCon.toXMLText(tempNode));
          // System.out.println("後Null"+i);
          // System.out.println("後Plus"+plusNum);
        }
        if (tempNode != null) {
          if (first_flg == true) {
            strGroupBy +=
                "     "
                    + xmlCon.selectSingleNode(tempNode, ".//sql").getFirstChild().getNodeValue()
                    + "\n";
            first_flg = false;
          } else {
            strGroupBy +=
                "    ,"
                    + xmlCon.selectSingleNode(tempNode, ".//sql").getFirstChild().getNodeValue()
                    + "\n";
          }
          // System.out.println(strGroupBy);
        }
      }
      return strGroupBy;
    } catch (Exception e) {
      log.error("exception in getOrderByStr():\n", e);
      e.printStackTrace();
    }
    return null;
  }
  public String getWhereStr(String whereStr, String kind) {
    try {
      String strWhere = "";
      if (whereStr == "") {
        //				strWhere = "where 'mode'!='viewer' "+"\n";
        strWhere = "where 1=1 " + "\n";
      } else {
        strWhere = whereStr;
      }

      Node xmlNode = xmlCon.selectSingleNode(xmlDoc, "//db_table");
      NodeList nodelist = null;

      if (kind.equals("all")) {
        nodelist =
            xmlCon.selectNodes(xmlNode, "//db_table/logical_model/where_clause/logical_condition");
      } else if (kind.equals("use_flg")) {
        nodelist =
            xmlCon.selectNodes(
                xmlNode, "//db_table/logical_model/where_clause/logical_condition[@use_flg='1']");
      }

      // 条件が1つもなかったら、Whereを削除して、Return
      if (nodelist.getLength() == 0) {
        return whereStr;
      }

      // @が入っている場合は、サンプルSQLでは、コメントにする。
      // 実際に発行する場合は、ここを置き換えて条件を入れる。
      String sqlStr = "";
      int whereCnt = 0;
      for (int i = 0; i < nodelist.getLength(); i++) {
        if (i == 0) {
          if (whereStr == "") {
            sqlStr =
                "    and "
                    + xmlCon
                        .selectSingleNode(nodelist.item(i), ".//sql")
                        .getFirstChild()
                        .getNodeValue()
                    + "\n";
          } else {
            sqlStr =
                "    and "
                    + xmlCon
                        .selectSingleNode(nodelist.item(i), ".//sql")
                        .getFirstChild()
                        .getNodeValue()
                    + "\n";
          }
          if (sqlStr.indexOf("@") == -1) {
            strWhere += sqlStr;
            whereCnt++;
          } else {
            strWhere += "--" + sqlStr;
          }
        } else {
          sqlStr =
              "    and "
                  + xmlCon
                      .selectSingleNode(nodelist.item(i), ".//sql")
                      .getFirstChild()
                      .getNodeValue()
                  + "\n";
          if (sqlStr.indexOf("@") == -1) {
            strWhere += sqlStr;
            whereCnt++;
          } else {
            strWhere += "--" + sqlStr;
          }
        }
      }
      // 全部@が入っている場合は、Whereもコメントにする。
      //			if (whereCnt==0){
      //				strWhere = "-- " + strWhere;
      //			}

      return strWhere;
    } catch (Exception e) {
      log.error("exception in getWhereStr():\n", e);
      e.printStackTrace();
    }
    return null;
  }