shop/CoreCms.Net.CodeGenerator/GeneratorCodeHelper.cs
2025-10-11 11:19:23 +08:00

630 lines
38 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Text;
using CoreCms.Net.Model.ViewModels.Basics;
using DotLiquid;
using SqlSugar;
namespace CoreCms.Net.CodeGenerator
{
/// <summary>
/// 自动生成代码
/// </summary>
public static class GeneratorCodeHelper
{
/// <summary>
/// 单表生成对应数据
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="tableDescription">表说明</param>
/// <param name="columns">表字段</param>
public static byte[] CodeGenerator(string tableName, string tableDescription, List<DbColumnInfo> columns, string fileType)
{
//ModelClassName
//ModelName
//ModelFields Name Comment
var dt = DateTime.Now;
byte[] data;
var obj = new
{
ModelCreateTime= dt,
ModelName = tableName,
ModelDescription = tableDescription,
ModelClassName = tableName,
ModelFields = columns.Select(r => new
{
r.DbColumnName,
r.ColumnDescription,
r.DataType,
r.DecimalDigits,
r.DefaultValue,
r.IsIdentity,
r.IsNullable,
r.IsPrimarykey,
//Length = (r.DataType == "nvarchar" && r.Length > 0) ? r.Length / 2 : r.Length,
r.Length,
r.PropertyName,
r.PropertyType,
r.Scale,
r.TableId,
r.TableName,
r.Value
}).ToArray()
};
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly;
using (MemoryStream ms = new MemoryStream())
{
using (ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, false))
{
string file;
string result;
Template template;
switch (fileType)
{
case "AllFiles":
//Controller
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Controllers.Controller.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry4 = zip.CreateEntry("Controller/" + tableName + "Controller.cs");
using (StreamWriter entryStream = new StreamWriter(entry4.Open()))
{
entryStream.Write(result);
}
}
//IRespository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + tableName + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Respository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + tableName + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//IServices
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + tableName + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Services
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + tableName + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//Model
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + tableName + ".cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//CreateHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/create.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//EditHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/edit.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//DetailsHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/details.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//IndexHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/index.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "EntityFiles":
//Model
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + tableName + ".cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "ServicesFiles":
//IServices
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + tableName + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Services
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + tableName + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "ViewFiles":
//CreateHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/create.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//EditHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/edit.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//DetailsHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/details.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//IndexHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/index.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "InterFaceFiles":
//IRespository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + tableName + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Respository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + tableName + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
}
}
data = ms.ToArray();
}
return data;
}
/// <summary>
/// 生成整个数据库文件
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="tableDescription">表说明</param>
/// <param name="columns">表字段</param>
public static byte[] CodeGeneratorAll(List<DbTableInfoAndColumns> dbModels, string fileType)
{
//ModelClassName
//ModelName
//ModelFields Name Comment
byte[] data;
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly;
using (MemoryStream ms = new MemoryStream())
{
using (ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, false))
{
string file;
string result;
Template template;
foreach (var item in dbModels)
{
var obj = new
{
ModelName = item.Name,
ModelDescription = item.Description,
ModelClassName = item.Name,
ModelFields = item.columns.Select(r => new
{
r.DbColumnName,
r.ColumnDescription,
r.DataType,
r.DecimalDigits,
r.DefaultValue,
r.IsIdentity,
r.IsNullable,
r.IsPrimarykey,
Length = (r.DataType == "nvarchar" && r.Length > 0) ? r.Length / 2 : r.Length,
r.PropertyName,
r.PropertyType,
r.Scale,
r.TableId,
r.TableName,
r.Value
}).ToArray()
};
switch (fileType)
{
case "AllFiles":
//Controller
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Controllers.Controller.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry4 = zip.CreateEntry("Controller/" + item.Name + "Controller.cs");
using (StreamWriter entryStream = new StreamWriter(entry4.Open()))
{
entryStream.Write(result);
}
}
//IRespository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + item.Name + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Respository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + item.Name + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//IServices
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + item.Name + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Services
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + item.Name + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//Model
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + item.Name + ".cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//CreateHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/create.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//EditHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/edit.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//DetailsHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/details.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//IndexHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/index.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "EntityFiles":
//Model
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + item.Name + ".cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "ServicesFiles":
//IServices
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + item.Name + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Services
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + item.Name + "Services.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "ViewFiles":
//CreateHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/create.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//EditHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/edit.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//DetailsHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/details.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
//IndexHtml
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/index.html");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
case "InterFaceFiles":
//IRespository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + item.Name + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
{
entryStream.Write(result);
}
}
//Respository
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8))
{
file = reader.ReadToEnd();
template = Template.Parse(file);
result = template.Render(Hash.FromAnonymousObject(obj));
ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + item.Name + "Repository.cs");
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
{
entryStream.Write(result);
}
}
break;
}
}
}
data = ms.ToArray();
}
return data;
}
}
}