public static HcSQLInfo CreateProduct(string schema, string name, string key, string sql)
        {
            var sqlInfo = new HcSQLInfo();
            if (HcMySQLToolContext.IsConnected)
            {
                sqlInfo.Name = name;
                sqlInfo.Key = key;
                sqlInfo.SQL = sql;
                sqlInfo.Columns = HcColumnInfo.CreateColumns(schema, sqlInfo.Name);
            }

            return sqlInfo;
        }
        private void createSqlJava(string folder, HcSQLInfo sqlInfo)
        {
            DirectoryInfo newFolder;
            if (Directory.Exists(folder + @"\src\" + Constants.Package.Replace(@".", @"\") + @"\main\db\sql"))
            {
                newFolder = new DirectoryInfo(folder + @"\src\" + Constants.Package.Replace(@".", @"\") + @"\main\db\sql");
            }
            else
            {
                newFolder = Directory.CreateDirectory(folder + @"\src\" + Constants.Package.Replace(@".", @"\") + @"\main\db\sql");
            }

            writeSqlSupportJava(newFolder.FullName, sqlInfo);
            writeSqlJava(newFolder.FullName, sqlInfo);
        }
        private void createMybatisCustomXML(string folder, HcSQLInfo sqlInfo)
        {
            DirectoryInfo newFolder;
            if (Directory.Exists(folder + @"\src\sql\cmt"))
            {
                newFolder = new DirectoryInfo(folder + @"\src\sql\cmt");
            }
            else
            {
                newFolder = Directory.CreateDirectory(folder + @"\src\sql\cmt");
            }

            var file = new FileStream(string.Format(@"{0}\custom.xml", newFolder.FullName), FileMode.Create, FileAccess.Write);
            using (StreamWriter writer = new StreamWriter(file, System.Text.Encoding.UTF8))
            {
                writer.WriteLine(@"<?xml version=""1.0"" encoding=""UTF-8"" ?>");
                writer.WriteLine(@"<!DOCTYPE mapper PUBLIC ""-//mybatis.org//DTD Mapper 3.0//EN"" ""http://mybatis.org/dtd/mybatis-3-mapper.dtd"">");
                writer.WriteLine(@"");
                writer.WriteLine(@"<mapper namespace=""custom"">");
                writer.WriteLine(@"");
                writer.WriteLine(@"	<select id=""{0}"" resultType=""{1}.main.db.sql.{2}DTO"">", sqlInfo.Key, Constants.Package, sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"		{0}", sqlInfo.SQL);
                writer.WriteLine(@"	</select>");
                writer.WriteLine(@"</mapper>");
            }
        }
 public void WriteServiceDBSql(string path, HcSQLInfo sqlInfo)
 {
     DirectoryInfo dir;
     if (Directory.Exists(path + @"\" + Constants.Package + @".main.db"))
     {
         dir = new DirectoryInfo(path + @"\" + Constants.Package + @".main.db");
     }
     else
     {
         dir = Directory.CreateDirectory(path + @"\" + Constants.Package + @".main.db");
     }
     createMybatisCustomXML(dir.FullName, sqlInfo);
     createSqlJava(dir.FullName, sqlInfo);
 }
        private void writeSqlSupportJava(string path, HcSQLInfo sqlInfo)
        {
            var newFolder = Directory.CreateDirectory(path + @"\support");
            var file = File.Create(string.Format(@"{0}\{1}DTOSupport.java", newFolder.FullName, sqlInfo.Name.ToTitleCase()));
            using (StreamWriter writer = new StreamWriter(file, System.Text.Encoding.UTF8))
            {
                writer.WriteLine(@"/*");
                writer.WriteLine(@" * {0}", ToolLibrary.Constants.ProjectName);
                writer.WriteLine(@" * {0}", ToolLibrary.Constants.CompanyName);
                writer.WriteLine(@" */");
                writer.WriteLine(@"package " + Constants.Package + @".main.db.sql.support;");
                writer.WriteLine(@"");
                if (sqlInfo.Columns.FindAll(d => d.DataType == MySqlDbType.VarChar).Count > 0)
                {
                    writer.WriteLine(@"import " + Constants.Package + @".fw.core.util.StringUtil;");
                }
                if (sqlInfo.Columns.FindAll(d => d.DataType == MySqlDbType.Date || d.DataType == MySqlDbType.Time).Count > 0)
                {
                    writer.WriteLine(@"import " + Constants.Package + @".fw.core.util.DateUtil;");
                }
                if (sqlInfo.Columns.FindAll(d => d.DataType == MySqlDbType.Blob).Count > 0)
                {
                    writer.WriteLine(@"import " + Constants.Package + @".fw.core.sql.CISBlob;");
                }
                writer.WriteLine(@"import " + Constants.Package + @".main.db.base.BaseTableDTO;");
                writer.WriteLine(@"import " + Constants.Package + @".main.db.sql.{0}DTO;", sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"");
                writer.WriteLine(@"/**");
                writer.WriteLine(@" *Service DB Support DTO");
                writer.WriteLine(@" *");
                writer.WriteLine(@" * History");
                writer.WriteLine(@" * REV.         Updated Date           Updater              Infomation");
                writer.WriteLine(@" * -------      ---------------        ----------------     ------------------");
                writer.WriteLine(@" * 1.0          {0}             TOOL                 Create", DateTime.Now.ToString("yyyy/MM/dd"));
                writer.WriteLine(@"*");
                writer.WriteLine(@" */");
                writer.WriteLine(@"public abstract class {0}DTOSupport extends BaseTableDTO {{", sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"");

                foreach (var column in sqlInfo.Columns)
                {
                    writer.WriteLine(@"");
                    writer.WriteLine(@"	public static final String COLUMN_{0} = ""{0}"";", column.ColumnName.ToUpper());
                }

                writer.WriteLine(@"");
                writer.WriteLine(@"	public static final String SQL_NAME = ""{0}"";", sqlInfo.Key);

                writer.WriteLine(@"");
                writer.WriteLine(@"	public static {0}DTO setDefaultValue() {{", sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"		{0}DTO defaultDTO = new {0}DTO();", sqlInfo.Name.ToTitleCase());

                foreach (var column in sqlInfo.Columns)
                {
                    writer.WriteLine(@"");
                    writer.WriteLine(@"		defaultDTO.set{0}({1});", column.ColumnName.ToPublicDefinition(), getDefaultValue(column.DataType));
                }

                writer.WriteLine(@"");
                writer.WriteLine(@"		return defaultDTO;");
                writer.WriteLine(@"	}");
                writer.WriteLine(@"}");
            }
        }
        private void writeSqlJava(string newFolder, HcSQLInfo sqlInfo)
        {
            var file = new FileStream(string.Format(@"{0}\{1}DTO.java", newFolder, sqlInfo.Name.ToTitleCase()), FileMode.Create, FileAccess.Write);
            using (StreamWriter writer = new StreamWriter(file, System.Text.Encoding.UTF8))
            {
                writer.WriteLine(@"/*");
                writer.WriteLine(@" * {0}", ToolLibrary.Constants.ProjectName);
                writer.WriteLine(@" * {0}", ToolLibrary.Constants.CompanyName);
                writer.WriteLine(@" */");
                writer.WriteLine(@"package " + Constants.Package + @".main.db.sql;");
                writer.WriteLine(@"");
                writer.WriteLine(@"import " + Constants.Package + @".main.db.sql.support.{0}DTOSupport;", sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"");
                writer.WriteLine(@"/**");
                writer.WriteLine(@" *Service DB DTO");
                writer.WriteLine(@" *");
                writer.WriteLine(@" * History");
                writer.WriteLine(@" * REV.         Updated Date           Updater              Infomation");
                writer.WriteLine(@" * -------      ---------------        ----------------     ------------------");
                writer.WriteLine(@" * 1.0          {0}             TOOL                 Create", DateTime.Now.ToString("yyyy/MM/dd"));
                writer.WriteLine(@"*");
                writer.WriteLine(@" */");
                writer.WriteLine(@"@" + Constants.Package + @".fw.core.type.Alias(""{0}"")", sqlInfo.Name.ToUpper());
                writer.WriteLine(@"@" + Constants.Package + @".fw.core.type.AliasKanJi("""")");
                writer.WriteLine(@"public class {0}DTO extends {0}DTOSupport implements java.io.Serializable, Comparable<{0}DTO> {{", sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"");
                writer.WriteLine(@"	private static final long serialVersionUID = 1L;");

                var i = 0;
                foreach (var column in sqlInfo.Columns)
                {
                    writer.WriteLine(@"");
                    writer.WriteLine(@"	@" + Constants.Package + @".fw.core.type.Alias(""{0}"")", column.ColumnName.ToUpper());
                    writer.WriteLine(@"	@" + Constants.Package + @".fw.core.type.Index({0})", i);
                    writer.WriteLine(@"	@" + Constants.Package + @".fw.core.type.DataType(""{0}"")", column.DataTypeName);
                    if (column.IsNullAble == false)
                    {
                        writer.WriteLine(@"	@" + Constants.Package + @".fw.core.type.NotNull");
                    }
                    if (column.DataType == MySqlDbType.VarChar || column.DataType == MySqlDbType.Blob)
                    {
                        writer.WriteLine(@"	@" + Constants.Package + @".fw.core.type.Length(min = {0}, max = {0})", column.Character_Maximum_Length);
                    }
                    if (column.ColumnKey == true)
                    {
                        writer.WriteLine(@"	@" + Constants.Package + @".fw.core.type.IsPK");
                    }
                    writer.WriteLine(@"	private {0} {1} = null;", getJavaTypeString(column.DataType), column.ColumnName.ToPrivateDefinition());
                    i++;
                }

                foreach (var column in sqlInfo.Columns)
                {
                    writer.WriteLine(@"");
                    writer.WriteLine(@"	public {0} get{1}() {{", getJavaTypeString(column.DataType), column.ColumnName.ToPublicDefinition());
                    writer.WriteLine(@"		return this.{0};", column.ColumnName.ToPrivateDefinition());
                    writer.WriteLine(@"	}");
                    writer.WriteLine(@"");
                    writer.WriteLine(@"	public void set{0}(", column.ColumnName.ToPublicDefinition());
                    writer.WriteLine(@"			{0} {1}) {{", getJavaTypeString(column.DataType), column.ColumnName.ToPrivateDefinition());
                    writer.WriteLine(@"		this.{0} = {0};", column.ColumnName.ToPrivateDefinition());
                    writer.WriteLine(@"	}");
                }
                writer.WriteLine(@"");
                writer.WriteLine(@"  	/* (non-Javadoc)");
                writer.WriteLine(@"     * @see java.lang.Comparable#compareTo(java.lang.Object)");
                writer.WriteLine(@"     */");
                writer.WriteLine(@"    @Override");
                writer.WriteLine(@"    public int compareTo(");
                writer.WriteLine(@"			{0}DTO compareToDTO) {{", sqlInfo.Name.ToTitleCase());
                writer.WriteLine(@"        return this.equals(compareToDTO) ? 0 : -1;");
                writer.WriteLine(@"    }");
                writer.WriteLine(@"}");
                writer.WriteLine(@"");
            }
        }