private static PackageBufINf upLoadConfigFile(
      ManagerConnection c, ByteBuffer buffer, byte packetId, String fileName, String content) {
    logger.info("Upload Daas Config file " + fileName + " ,content:" + content);
    String tempFileName = System.currentTimeMillis() + "_" + fileName;
    File tempFile = new File(SystemConfig.getHomePath(), "conf" + File.separator + tempFileName);
    BufferedOutputStream buff = null;
    boolean suc = false;
    try {
      byte[] fileData = content.getBytes("UTF-8");
      if (fileName.endsWith(".xml")) {
        checkXMLFile(fileName, fileData);
      }
      buff = new BufferedOutputStream(new FileOutputStream(tempFile));
      buff.write(fileData);
      buff.flush();

    } catch (Exception e) {
      logger.warn("write file err " + e);
      e.printStackTrace();
      return showInfo(c, buffer, packetId, "write file err " + e);

    } finally {
      if (buff != null) {
        try {
          buff.close();
          suc = true;
        } catch (IOException e) {
          logger.warn("save config file err " + e);
        }
      }
    }
    if (suc) {
      // if succcess
      File oldFile = new File(SystemConfig.getHomePath(), "conf" + File.separator + fileName);
      if (oldFile.exists()) {
        File backUP =
            new File(
                SystemConfig.getHomePath(),
                "conf" + File.separator + fileName + "_" + System.currentTimeMillis() + "_auto");
        if (!oldFile.renameTo(backUP)) {
          String msg = "rename old file failed";
          logger.warn(msg + " for upload file " + oldFile.getAbsolutePath());
          return showInfo(c, buffer, packetId, msg);
        }
      }
      File dest = new File(SystemConfig.getHomePath(), "conf" + File.separator + fileName);
      if (!tempFile.renameTo(dest)) {
        String msg = "rename file failed";
        logger.warn(msg + " for upload file " + tempFile.getAbsolutePath());
        return showInfo(c, buffer, packetId, msg);
      }
      return showInfo(c, buffer, packetId, "SUCCESS SAVED FILE:" + fileName);
    } else {
      return showInfo(c, buffer, packetId, "UPLOAD ERROR OCCURD:" + fileName);
    }
  }
  private static PackageBufINf listConfigFiles(
      ManagerConnection c, ByteBuffer buffer, byte packetId) {
    PackageBufINf bufINf = new PackageBufINf();
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    try {
      int i = 1;
      File[] file = new File(SystemConfig.getHomePath(), "conf").listFiles();
      for (File f : file) {
        if (f.isFile()) {
          RowDataPacket row = new RowDataPacket(FIELD_COUNT);
          row.add(
              StringUtil.encode(
                  (i++) + " : " + f.getName() + "  time:" + df.format(new Date(f.lastModified())),
                  c.getCharset()));
          row.packetId = ++packetId;
          buffer = row.write(buffer, c, true);
        }
      }

      bufINf.buffer = buffer;
      bufINf.packetId = packetId;
      return bufINf;

    } catch (Exception e) {
      e.printStackTrace();
      RowDataPacket row = new RowDataPacket(FIELD_COUNT);
      row.add(StringUtil.encode(e.toString(), c.getCharset()));
      row.packetId = ++packetId;
      buffer = row.write(buffer, c, true);
      bufINf.buffer = buffer;
    }
    bufINf.packetId = packetId;
    return bufINf;
  }
  private static PackageBufINf showConfigFile(
      ManagerConnection c, ByteBuffer buffer, byte packetId, String fileName) {
    File file = new File(SystemConfig.getHomePath(), "conf" + File.separator + fileName);
    BufferedReader br = null;
    PackageBufINf bufINf = new PackageBufINf();
    try {
      br = new BufferedReader(new FileReader(file));
      String line = null;
      while ((line = br.readLine()) != null) {
        if (line.isEmpty()) {
          continue;
        }
        RowDataPacket row = new RowDataPacket(FIELD_COUNT);
        row.add(StringUtil.encode(line, c.getCharset()));
        row.packetId = ++packetId;
        buffer = row.write(buffer, c, true);
      }
      bufINf.buffer = buffer;
      bufINf.packetId = packetId;
      return bufINf;

    } catch (Exception e) {
      e.printStackTrace();
      RowDataPacket row = new RowDataPacket(FIELD_COUNT);
      row.add(StringUtil.encode(e.toString(), c.getCharset()));
      row.packetId = ++packetId;
      buffer = row.write(buffer, c, true);
      bufINf.buffer = buffer;
    } finally {
      if (br != null) {
        try {
          br.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    bufINf.packetId = packetId;
    return bufINf;
  }
  private static void checkXMLFile(String xmlFileName, byte[] data)
      throws ParserConfigurationException, SAXException, IOException {
    InputStream dtdStream = new ByteArrayInputStream(new byte[0]);
    File confDir = new File(SystemConfig.getHomePath(), "conf");
    if (xmlFileName.equals("schema.xml")) {
      dtdStream = MycatServer.class.getResourceAsStream("/schema.dtd");
      if (dtdStream == null) {
        dtdStream = new ByteArrayInputStream(readFileByBytes(new File(confDir, "schema.dtd")));
      }

    } else if (xmlFileName.equals("server.xml")) {
      dtdStream = MycatServer.class.getResourceAsStream("/server.dtd");
      if (dtdStream == null) {
        dtdStream = new ByteArrayInputStream(readFileByBytes(new File(confDir, "server.dtd")));
      }
    } else if (xmlFileName.equals("rule.xml")) {
      dtdStream = MycatServer.class.getResourceAsStream("/rule.dtd");
      if (dtdStream == null) {
        dtdStream = new ByteArrayInputStream(readFileByBytes(new File(confDir, "rule.dtd")));
      }
    }
    ConfigUtil.getDocument(dtdStream, new ByteArrayInputStream(data));
  }