
<%#REFERENCE System.Windows.Forms.dll %>

<%#NAMESPACE System.Windows.Forms %>

public class GeneratedGui : DotNetScriptGui

{

public GeneratedGui(ZeusContext context) : base(context) {}

public override void Setup()

{

AcquireInputForm form = new AcquireInputForm(MyMeta, input);

if (form.ShowDialog() != DialogResult.OK)

{

ui.IsCanceled = true;

}

}

}

public class AcquireInputForm : Form

{

private ComboBox cboDatabases = new ComboBox();

private ComboBox cboTables = new ComboBox();

private Button btnOk = new Button();

private dbRoot meta;

private IZeusInput input;

public AcquireInputForm(dbRoot mymeta, IZeusInput zin)

{

this.meta = mymeta;

this.input = zin;

this.BindComboBox(cboDatabases, meta.Databases);

cboDatabases.SelectedItem = meta.DefaultDatabase.Name;

cboDatabases.Top = 10; cboDatabases.Left = 10; cboDatabases.Width = 200;

cboDatabases.SelectedIndexChanged += new EventHandler(cboDatabases_SelectedIndexChanged);

this.BindComboBox(cboTables, meta.DefaultDatabase.Tables);

cboTables.Top = 50; cboTables.Left = 10; cboTables.Width = 200;

btnOk.Text = "Ok";

btnOk.Top = 100; btnOk.Left = 10; btnOk.Width = 200;

btnOk.Click += new EventHandler(btnOk_Click);

this.Controls.AddRange( new Control[] {cboDatabases, cboTables, btnOk} );

this.Text = ".NetScript C# Sample: Java Class";

this.Width = 230;

this.Height = 160;

}

public void cboDatabases_SelectedIndexChanged(object sender, EventArgs args)

{

this.BindComboBox(

cboTables,

meta.Databases[ cboDatabases.SelectedItem.ToString() ].Tables

);

}

public void btnOk_Click(object sender, EventArgs args)

{

if ((cboDatabases.SelectedIndex >= 0) &&

(cboTables.SelectedIndex >= 0))

{

input["databaseName"] = cboDatabases.SelectedItem.ToString();

input["tableName"] = cboTables.SelectedItem.ToString();

this.DialogResult = DialogResult.OK;

this.Close();

}

else

{

MessageBox.Show("Fill out the required fields.. PLEASE??");

}

}

private void BindComboBox(ComboBox cbo, IEnumerable myMetaCollection)

{

cbo.Items.Clear();

foreach (INameValueItem item in myMetaCollection)

{

cbo.Items.Add(item.ItemValue);

}

}

}
模板主体
模板主体是生成代码的主要执行地。下面讲解了我如何生成代码的步骤。
1、将期望输出的代码放入到Render的方法中如下的代码,你将看到我将要生成的类。这几乎都是当我要生成一个模板是必做的第一件事情。

<%

public class GeneratedTemplate : DotNetScriptTemplate

{

public GeneratedTemplate(ZeusContext context) : base(context) {}

public override void Render()

{

string databaseName = input["databaseName"].ToString();

string tableName = input["tableName"].ToString();

%>

/*

* Employee.java

*

* Created on September 23, 2002, 12:59 PM

*/

package com.mygeneration.sample;

import java.sql.*;

import com.mygeneration.businessobjects.*;

import com.mygeneration.dataaccess.*;

public class Employee extends BizObj

{

public Employee()

{

}

// EmployeeID

public String getEmployeeID()

{

return getString(EmployeeSchema.EmployeeID.getFieldName());

}

public void setEmployeeID(String employeeID)

{

setString(EmployeeSchema.EmployeeID.getFieldName(), employeeID);

}

}<%

}

}

%>
2、添加动态代码把动态的代码添加到模板中,替换掉类名、属性名称以及数据类型。

<%

public class GeneratedTemplate : DotNetScriptTemplate

{

public GeneratedTemplate(ZeusContext context) : base(context) {}

public override void Render()

{

string databaseName = input["databaseName"].ToString();

string tableName = input["tableName"].ToString();

IDatabase database = MyMeta.Databases[databaseName];

ITable table = database.Tables[tableName];

%>/*

* <%= table.Alias %>.java

*

* Created on <%= DateTime.Now.ToString() %>

*/

package com.mygeneration.sample;

import java.sql.*;

import com.mygeneration.businessobjects.*;

import com.mygeneration.dataaccess.*;

public class <%= table.Alias %> extends BizObj

{

public <%= table.Alias %>()

{

}

<%

foreach (IColumn column in table.Columns)

{

string datatype = this.GetJavaType(column);

%>

// <%= column.Alias %>

public <%= datatype %> get<%= column.Alias %>()

{

return get<%= datatype %>(<%= table.Alias %>Schema.<%= column.Alias %>.getFieldName());

}

public void set<%= column.Alias %>(<%= datatype %> m_<%= column.Alias %>)

{

set<%= datatype %>(<%= table.Alias %>Schema.<%= column.Alias %>.getFieldName(), m_<%= column.Alias %>);

}

<%

}

%>

}<%

}

private string GetJavaType(IColumn column)

{

string sqlServerType = column.DataTypeName;

int charLength = column.CharacterMaxLength;

switch (sqlServerType)

{

case "bit":

return "Boolean";

case "decimal":

case "float":

case "numeric":

case "money":

case "smallmoney":

case "real":

return "Decimal";

case "tinyint":

case "smallint":

case "int":

case "bigint":

return "Integer";

case "smalldatetime":

case "datetime":

return "Timestamp";

case "varchar":

case "char":

case "nvarchar":

case "nchar":

case "text":

if (charLength == 1)

return "Character";

else

return "String";

default:

return "Object";

}

}

}

%>
总结
使用 DotNetScript ,你将会把 MyGeneration 的模板开发提升到一个新的水平,提供更强大的功能以及能开发更复杂的系统
。
宝宝切水果安卓版
休闲益智 下载
儿童脑筋急转弯
休闲益智 下载
袭击现场2
飞行射击 下载